import type { Application, Container } from 'pixi.js'; import { ui } from '../../ui'; import type { Editor } from '../Editor'; import type { SnapToggle } from '../graph/SnapToggle'; import type { EditorState } from '../state'; /** What every group of test hooks is built from. */ export interface HookContext { app: Application; state: EditorState; editor: Editor; } export function centreOf(widget: { getGlobalPosition(): { x: number; y: number }; w: number; h: number }): { x: number; y: number; } { const p = widget.getGlobalPosition(); return { x: p.x + widget.w / 2, y: p.y + widget.h / 2 }; } /** Whether `node` and everything it hangs from are visible, up to a stage. */ export function shownOnStage(node: Container): boolean { let current = node; while (current.visible) { if (!current.parent) return current === ui().app.stage; current = current.parent; } return false; } /** A tab's magnet (#194): where to click it, how big it is drawn, and whether it is on. */ export function snapButton(snap: SnapToggle): { x: number; y: number; w: number; h: number; toggled: boolean; } { return { ...centreOf(snap.button), w: snap.button.w, h: snap.button.h, toggled: snap.button.toggled, }; }