# ui.um ``` ``` ## struct Theme* ```go type Theme* = struct { fg, bg: uint32 borderColor: uint32 borderSize: th.fu } ``` ## struct Generic* ```go type Generic* = struct { r: rect.Rect gridPos: th.Vf2 gridSpan: th.Vf2 theme: Theme ctx: interface{} onEvent: fn(eventType: th.uu, ctx: interface{}) pressed: bool selected: bool } ``` A structure all elements have to contain. t can be set manually by the user, s being the dimensions, or it can be set by another elements. onEvent is an event callback. It will pass whatever is set in the ctx field. Event types: eventUnknown eventHover eventPress eventJustPress eventRelease ## interface Element* ```go type Element* = interface { handle() draw() get(): ^Generic } ``` An interface every ui element has to implements. ## interface TextRenderer* ```go type TextRenderer* = interface { draw(text: str, pos: th.Vf2, color: uint32, scale: th.fu = 1.0) measure(text: str): th.Vf2 } ``` Interface used anywhere, where text is rendered. ## struct PixelFont* ```go type PixelFont* = struct { } ``` Bindings around canvas's font rendering functions to make them usable with the TextRenderer interface. ## fn draw* `fn (pf: ^PixelFont) draw*(text: str, pos: th.Vf2, color: uint32, scale: th.fu = 1.0) {` ## fn measure* `fn (pf: ^PixelFont) measure*(text: str): th.Vf2 {` ## fn mkGeneric* `fn mkGeneric*(): Generic {` ## fn grid* `fn (g: ^Generic) grid*(x, y: th.uu): ^Generic {` Functions that sets the grid pos of a Generic ## fn span* `fn (g: ^Generic) span*(x, y: th.uu): ^Generic {` Function setting the grid span of a Generic ## fn handle* `fn (g: ^Generic) handle*() {` Generic's handle function. It checks for events. If you create your own ui element and want to have more control over how events are fired, you don't have to use it. ## fn drawBorder* `fn drawBorder*(p, d: th.Vf2, t: Theme) {`