From 40687c8c5624dda5bd6b9c6b0e281fb079755040 Mon Sep 17 00:00:00 2001 From: San Jacobs Date: Sat, 26 Aug 2023 12:57:44 +0200 Subject: WIP OUI stuff --- src/main.odin | 120 +++++++---------------------------------- src/ui_implementation.odin | 130 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 100 deletions(-) create mode 100644 src/ui_implementation.odin diff --git a/src/main.odin b/src/main.odin index 1657c0f..25cdf22 100644 --- a/src/main.odin +++ b/src/main.odin @@ -137,12 +137,26 @@ when true { // hotloop oui.begin_layout() - a_panel := panel() - oui.set_layout(a_panel, .Absolute) - oui.set_size(a_panel, 200, 200) - oui.set_offset(a_panel, 20, 20) - a_button := button("Testerino", 50) + master_container := panel() + oui.set_layout(master_container, .Absolute) + oui.set_size(master_container, int(GetScreenWidth()), int(GetScreenHeight())) + + top_bar := panel(BGCOLOR) + oui.set_cut(master_container, .Top) + oui.set_height(top_bar, 30) + oui.item_insert(master_container, top_bar) + + date_label := label("Date", font) + + bottom_bar := panel(PBGCOLOR) + oui.set_cut(master_container, .Bottom) + oui.set_height(bottom_bar, 50) + oui.item_insert(master_container, bottom_bar) + + + +/* a_button := button("Testerino", 50) if oui.latest_clicked() { fmt.println("CLICKO BOIO") } @@ -150,7 +164,7 @@ when true { oui.set_height(a_button, 50) oui.set_offset(a_button, 20, 20) - oui.item_insert(a_panel, a_button) + oui.item_insert(a_panel, a_button)*/ oui.end_layout() @@ -217,97 +231,3 @@ when true { } } -BGCOLOR : rl.Color : {30, 30, 30, 255} -PBGCOLOR : rl.Color : {40, 40, 40, 255} - -DAY_HEIGHT :: 35 -TIMELINE_START :: 175 -TIMELINE_END :: -85 - -Item :: oui.Item -Call :: oui.Call - -Data_Element :: enum int { - Panel, - Button, - Text_Input, - Timeblock, -// ... -} - -Data_Head :: struct { - subtype: Data_Element, -} - -Data_Panel :: struct { - using _: Data_Head, -} - -Data_Button :: struct { - using _: Data_Head, - text: string, - selected: bool, -} - -button_callback :: proc(item: Item, event: Call) -> int { - data := cast(^Data_Button) oui.get_handle(item) - - #partial switch event { - case .Cursor_Handle: - //return int(Cursor_Type.Hand) - } - - return -1 -} - -panel :: proc() -> Item { - item := oui.item_make() - - data := oui.alloc_typed(item, Data_Panel) - data.subtype = .Panel - - return item -} - -button :: proc(text: string, width: int, selected := false) -> Item { - item := oui.item_make() - oui.set_size(item, width, 35) - oui.set_callback(item, button_callback) - - data := oui.alloc_typed(item, Data_Button) - data.subtype = .Button - data.text = text - data.selected = selected - - return item -} - -// recursive loop -ui_draw_children :: proc(item: oui.Item) { - list := oui.children_sorted(item) - for kid in list { - ui_draw(kid) - } -} - -ui_draw :: proc(item: oui.Item) { - head := cast(^Data_Head) oui.get_handle(item) - rect := oui.get_rect(item) - - //fmt.println(rect, head, item) - - if head == nil { - ui_draw_children(item) - return - } - - #partial switch head.subtype { - //case .Panel_Root: - // ... render any type of item - case .Button: - rl.DrawRectangle(i32(rect.l), i32(rect.t), i32(rect.r-rect.l), i32(rect.b-rect.t), PBGCOLOR) - case .Panel: - rl.DrawRectangle(i32(rect.l), i32(rect.t), i32(rect.r-rect.l), i32(rect.b-rect.t), rl.RED) - ui_draw_children(item) - } -} \ No newline at end of file diff --git a/src/ui_implementation.odin b/src/ui_implementation.odin new file mode 100644 index 0000000..4842a76 --- /dev/null +++ b/src/ui_implementation.odin @@ -0,0 +1,130 @@ +package main + +import "../lib/oui" +import rl "vendor:raylib" + + + +BGCOLOR : rl.Color : {30, 30, 30, 255} +PBGCOLOR : rl.Color : {40, 40, 40, 255} + +DAY_HEIGHT :: 35 +TIMELINE_START :: 175 +TIMELINE_END :: -85 + + + +Item :: oui.Item +Call :: oui.Call + +Data_Element :: enum int { + Panel, + Button, + Label, + Text_Input, + Timeblock, +// ... +} + +Data_Head :: struct { + subtype: Data_Element, +} + +Data_Panel :: struct { + using _: Data_Head, + color: rl.Color, +} + +Data_Button :: struct { + using _: Data_Head, + text: string, + selected: bool, +} + +Data_Label :: struct { + using _: Data_Head, + text: string, + alignment: Text_Alignment, +} + +button_callback :: proc(item: Item, event: Call) -> int { + data := cast(^Data_Button) oui.get_handle(item) + + #partial switch event { + case .Cursor_Handle: + //return int(Cursor_Type.Hand) + } + + return -1 +} + +panel :: proc(color : rl.Color = rl.RED) -> Item { + item := oui.item_make() + + data := oui.alloc_typed(item, Data_Panel) + data.subtype = .Panel + data.color = color + + return item +} + +button :: proc(text: string, width: int, selected := false) -> Item { + item := oui.item_make() + oui.set_size(item, width, 35) + oui.set_callback(item, button_callback) + + data := oui.alloc_typed(item, Data_Button) + data.subtype = .Button + data.text = text + data.selected = selected + + return item +} + +Text_Alignment :: enum int { + Left, + Right, +} +label :: proc(text: string, font: rl.Font, alignment: Text_Alignment = .Left) -> Item { + item := oui.item_make() + + data := oui.alloc_typed(item, Data_Label) + data.subtype = .Label + data.text = text + data.alignment = alignment + + return item +} + +// recursive loop +ui_draw_children :: proc(item: oui.Item) { + list := oui.children_sorted(item) + for kid in list { + ui_draw(kid) + } +} + +ui_draw :: proc(item: oui.Item) { + head := cast(^Data_Head) oui.get_handle(item) + rect := oui.get_rect(item) + + //fmt.println(rect, head, item) + + if head == nil { + ui_draw_children(item) + return + } + + #partial switch head.subtype { + //case .Panel_Root: + // ... render any type of item + case .Button: + rl.DrawRectangle(i32(rect.l), i32(rect.t), i32(rect.r-rect.l), i32(rect.b-rect.t), PBGCOLOR) + case .Panel: + subtyped := cast(^Data_Panel) head + rl.DrawRectangle(i32(rect.l), i32(rect.t), i32(rect.r-rect.l), i32(rect.b-rect.t), subtyped.color) + ui_draw_children(item) + case .Label: + + } +} \ No newline at end of file -- cgit v1.2.1