odin-libui

Odin bindings to libui
Log | Files | Refs | Submodules | README | LICENSE

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(&params)
     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