From 6fa269edfc1625203841be42ed90470209acf6bd Mon Sep 17 00:00:00 2001 From: ltsSmitty Date: Wed, 17 Apr 2024 16:13:50 -0400 Subject: [PATCH] Feat: add graphics widget (#34) * Feat: add graphics widget * replace binder with assignment; format as Allman; remove redundant undefined --- src/elements/controls/graphics.ts | 43 +++++++++++++++++++++++++++++++ src/index.ts | 1 + 2 files changed, 44 insertions(+) create mode 100644 src/elements/controls/graphics.ts diff --git a/src/elements/controls/graphics.ts b/src/elements/controls/graphics.ts new file mode 100644 index 0000000..361a3e9 --- /dev/null +++ b/src/elements/controls/graphics.ts @@ -0,0 +1,43 @@ +import { BuildOutput } from "@src/windows/buildOutput"; +import { ParentControl } from "@src/windows/parentControl"; +import { WidgetCreator } from "@src/windows/widgets/widgetCreator"; +import { ElementParams } from "../elementParams"; +import { AbsolutePosition } from "../layouts/absolute/absolutePosition"; +import { FlexiblePosition } from "../layouts/flexible/flexiblePosition"; +import { Control } from "./control"; + +/** + * The parameters for configuring the custom graphics drawing widget. + */ +export interface GraphicsParams extends ElementParams +{ + /** + * Use for drawing custom graphics. See {@link GraphicsContext} for more information. + * @default undefined + */ + onDraw?: (g: GraphicsContext) => void; +} + +/** + * Create a custom widget for drawing. + */ +export function graphics(params: GraphicsParams & FlexiblePosition): WidgetCreator; +export function graphics(params: GraphicsParams & AbsolutePosition): WidgetCreator; +export function graphics(params: GraphicsParams & I): WidgetCreator +{ + return (parent, output) => new GraphicsControls(parent, output, params); +} + +/** + * A controller class for a graphics drawing widget. + */ +export class GraphicsControls extends Control implements CustomDesc, GraphicsParams +{ + onDraw?: ((g: GraphicsContext) => void); + + constructor(parent: ParentControl, output: BuildOutput, params: GraphicsParams & I) + { + super("custom", parent, output, params); + this.onDraw = params.onDraw; + } +} diff --git a/src/index.ts b/src/index.ts index d0cede7..efdeaf4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -30,6 +30,7 @@ export { dropdown, DropdownParams, DropdownDisableMode } from "./elements/contro export { dropdownButton, DropdownButtonParams, DropdownButtonAction } from "./elements/controls/dropdownButton"; export { dropdownSpinner, DropdownSpinnerParams } from "./elements/controls/dropdownSpinner"; export { flexible, horizontal, vertical, FlexibleLayoutParams, FlexibleLayoutContainer } from "./elements/layouts/flexible/flexible"; +export { graphics, GraphicsParams } from "./elements/controls/graphics"; export { groupbox, GroupBoxParams } from "./elements/controls/groupbox"; export { label, LabelParams } from "./elements/controls/label"; export { listview, ListViewParams, ListViewColumnParams } from "./elements/controls/listview";