images
    settings (sampler)

text
    figure out ways to speed up / what costs the most
    resizing (per frame) is really slow (assuming painter isn't griefing)
    bug where x offset doesn't shift texture correctly (eg typing a vs j)
    bug (?) where if you spam a key it slows down at a certain point, seems to be line based

masks r just made to bare minimum work

scaling
    could be just a simple scaling factor that multiplies abs
    and need to ensure text uses raw abs and not scaled abs
    naming? (pt, px)
    want to keep (drawn) regions using px? or should I add another field to UiScalar/Vec
    field could be best solution so redrawing stuff isn't needed & you can specify both as user

WidgetRef<W> or smth instead of Id
    enum that's either an Id or an actual concrete instance of W
    painter takes them in instead of (or in addition to) id
    then type wrapper widgets to contain them
    allows for compile time optimization if a widget wrapper's inner is known at compile time
        and the id of inner is not needed anywhere
    maybe introduce InnerWidget trait to allow for editors to expose & modify inner type
    maybe could also store a parent widget and keep using InnerWidget trait? unsure if possible

really weird limitation:
    I don't think you can currently remove an element from a parent and put it in a child of the same parent
    because it removes the unused children after the entire parent redraw
    but the child gets drawn during that, so it will think the child is still active !!!
    or something like that idk, maybe I need a special enum for parent that includes a undecided state where it may or may not get redrawn by the parent
    or just do ref counting and ensure all drawn things == 1 afterwards (seems like best way)

tags
vecs for each widget type?
