main.odin (2752B)
1 package main 2 3 import "core:c" 4 import "core:log" 5 6 import libui "../../" 7 8 main :: proc() { 9 options: libui.InitOptions 10 11 if err := libui.Init(&options); err != "" { 12 defer libui.FreeInitError(err) 13 log.errorf("init error: %v", err) 14 return 15 } 16 17 window := libui.NewWindow("drawtext", 640, 480, 1) 18 libui.WindowSetMargined(window, 1) 19 20 libui.WindowOnClosing(window, on_closing, nil) 21 libui.OnShouldQuit(should_quit, window) 22 23 box := libui.NewHorizontalBox() 24 libui.BoxSetPadded(box, 1) 25 libui.WindowSetChild(window, auto_cast box) 26 27 control_panel := libui.NewVerticalBox() 28 libui.BoxSetPadded(control_panel, 1) 29 libui.BoxAppend(box, auto_cast control_panel, 1) 30 31 handler := libui.AreaHandler { 32 Draw = handler_draw, 33 MouseEvent = handler_mouse_event, 34 MouseCrossed = handler_mouse_crossed, 35 DragBroken = handler_drag_broken, 36 KeyEvent = handler_key_event, 37 } 38 39 area := libui.NewArea(&handler) 40 libui.BoxAppend(box, auto_cast area, 1) 41 42 libui.BoxAppend(control_panel, auto_cast libui.NewButton("one"), 0) 43 libui.BoxAppend(control_panel, auto_cast libui.NewButton("two"), 0) 44 libui.BoxAppend(control_panel, auto_cast libui.NewButton("three"), 0) 45 libui.BoxAppend(control_panel, auto_cast libui.NewButton("four"), 0) 46 libui.BoxAppend(control_panel, auto_cast libui.NewButton("five"), 0) 47 48 libui.ControlShow(auto_cast window) 49 libui.Main() 50 libui.Uninit() 51 } 52 53 on_closing :: proc "c" (w: libui.Window, data: rawptr) -> c.int { 54 libui.ControlDestroy(auto_cast w) 55 libui.Quit() 56 return 0 57 } 58 59 should_quit :: proc "c" (data: rawptr) -> c.int { 60 libui.ControlDestroy(auto_cast data) 61 return 1 62 } 63 64 handler_draw :: proc(handler: ^libui.AreaHandler, area: libui.Area, p: ^libui.AreaDrawParams) { 65 params: libui.DrawTextLayoutParams 66 default_font: libui.FontDescriptor 67 68 text := libui.NewAttributedString("The quick brown fox jumps over the lazy dog.") 69 defer libui.FreeAttributedString(text) 70 71 params.String = text 72 params.Width = p.AreaWidth 73 params.Align = .DrawTextAlignCenter 74 75 params.DefaultFont = &default_font 76 params.DefaultFont.Family = "Courier New" 77 params.DefaultFont.Size = 18.0 78 params.DefaultFont.Weight = .TextWeightNormal 79 params.DefaultFont.Stretch = .TextStretchNormal 80 params.DefaultFont.Italic = .TextItalicNormal 81 82 text_layout := libui.DrawNewTextLayout(¶ms) 83 defer libui.DrawFreeTextLayout(text_layout) 84 85 libui.DrawText(p.Context, text_layout, 0, 0) 86 } 87 88 handler_mouse_event :: proc(_: ^libui.AreaHandler, _: libui.Area, _: ^libui.AreaMouseEvent) { 89 90 } 91 92 handler_mouse_crossed :: proc(_: ^libui.AreaHandler, _: libui.Area, left: c.int) { 93 94 } 95 handler_drag_broken :: proc(_: ^libui.AreaHandler, _: libui.Area) { 96 97 } 98 99 handler_key_event :: proc(_: ^libui.AreaHandler, _: libui.Area, _: ^libui.AreaKeyEvent) -> c.int { 100 return 0 101 } 102