# ui_fill.ludic — linear-gradient backgrounds (a direction or an angle, stops placed or spread) drawn # as whole-pixel bands; object-fit contain and cover for a picture of its own size; aspect-ratio # making a height from a width, and a native's width from its height. import "ludic.ui" program UiFill { numbers float var rects: []string = new []string var pics: []string = new []string var clips: int = 0 const STYLE: string = "" const BODY: string = "
" function rec_rect(x: float, y: float, w: float, h: float, c: int, a: float) -> void { push(rects, `{int(x)},{int(y)} {int(w)}x{int(h)} {ui_hex(c)}`) } function rec_image(src: string, x: float, y: float, w: float, h: float, c: int, a: float) -> void { push(pics, `{int(x)},{int(y)} {int(w)}x{int(h)}`) } function rec_clip(x: float, y: float, w: float, h: float) -> void { clips += 1 } function no_clip() -> void { } function no_text(x: float, y: float, s: string, size: float, c: int, a: float) -> void { } function nat_w(src: string) -> float { return 200.0 } function nat_h(src: string) -> float { return 100.0 } function knob_measure(n: UiNode, avail: float) -> void { } function knob_draw(n: UiNode) -> void { } entry { let b = new UiBackend b.rect = fn rec_rect b.text = fn no_text b.image = fn rec_image b.image_w = fn nat_w b.image_h = fn nat_h b.clip = fn rec_clip b.unclip = fn no_clip ui_backend(b) ui_native("knob", fn knob_measure, fn knob_draw) ui_load_text("" + STYLE + BODY + "", "f.xml") ui_show("f", null, 0.0, 0.0, 400.0, 600.0) let r: UiNode = ui_nodes("f", null) ui_place(r, 0.0, 0.0, 400.0, 600.0) let n = len(rects) print(`{rects[0]} .. {rects[49]} | {rects[50]} .. {rects[59]} .. {rects[69]} of {n} | {pics[0]} | {pics[1]} clipped {clips} | ratio {int(r.children[4].ch)} knob {int(r.children[5].children[0].cw)}`) } }