package main import "core:fmt" import t "tafl" main :: proc() { width, height : int = 1920, 1080 t.start_window(width, height, "tafl test") for !t.window_should_close() { if t.resized(){ width, height = t.get_window_size() } { t.tafl( // ROOT tafl sizing_width=t.FIXED(int(width)), sizing_height=t.FIXED(int(height)), layout=.LEFT_TO_RIGHT, color=colors.background, padding={5,5,5,5}, child_gap=5, ) { // Left bar t.tafl(color=colors.panel_blackground, sizing_height=t.GROW, sizing_width=t.FIT, layout=.TOP_TO_BOTTOM) { t.tafl(color={0,0,0,0}, sizing_height=t.GROW, sizing_width=t.GROW) } slider() { t.tafl( padding={8,8,8,8}, child_gap=8, color={.0, .0, .0, 0.4}, ) { if button("Yeet", "yeet").clicked { fmt.println("YEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEET!") } if button("Bawls", "bawls").clicked { fmt.println("Baaaaaaaaaaaawwwwwwwwwwwllllllls.") } if button("Render", "render").clicked { fmt.println("Reeeeeennnnnndeeeeeeeeeeeeeeeer!") } } } } { // Middle section t.tafl(color=colors.panel_blackground, sizing_width=t.GROW, sizing_height=t.GROW, position_horizontal=.MIDDLE, position_vertical=.MIDDLE, child_gap=5, layout=.TOP_TO_BOTTOM,) {// Red square t.tafl(color={1,0,0,1}, sizing_width=t.FIXED(300), sizing_height=t.FIXED(300), padding={1,1,1,1},) { t.tafl(color={0,0,0,0.5}, sizing_width=t.GROW, sizing_height=t.GROW) } } {// Red square t.tafl(color={1,0,0,1}, sizing_width=t.FIXED(200), sizing_height=t.FIXED(200), padding={1,1,1,1},) { t.tafl(color={0,0,0,0.5}, sizing_width=t.GROW, sizing_height=t.GROW) } } } { // Right bar t.tafl(color=colors.panel_blackground, sizing_width=t.FIXED(300), sizing_height=t.GROW, child_gap=20, layout=.TOP_TO_BOTTOM) { {t.tafl(color={.5, .5, .5, 1}, sizing_height=t.FIXED(50), sizing_width=t.GROW, )} {t.tafl(color={.5, .5, .5, 1}, sizing_height=t.FIXED(50), sizing_width=t.GROW, )} {t.tafl(color={.5, .5, .8, 1}, sizing_height=t.GROW, sizing_width=t.GROW, )} {t.tafl(color={.5, .5, .5, 1}, sizing_height=t.FIXED(50), sizing_width=t.GROW, )} } } } t.render() free_all(context.temp_allocator) } } button :: proc(text : string, id : string) -> t.Com { com := t.tafl(sizing_width=t.FIXED(120), sizing_height=t.FIXED(40), color=colors.button_outline, padding={2,2,2,2}, flags=t.BUTTON, id=id) color : t.Color = {.1,.1,.1, 1} if com.hover do color = {.2,.2,.2, 1} if com.clicked || com.is_down do color = {.05,.05,.05, 1} t.tafl(sizing_width=t.GROW, sizing_height=t.GROW, color=color, position_horizontal=.MIDDLE, position_vertical=.MIDDLE,) t.tafl(text=text) return com } slider_root : int = 0 slider_delta : int = 0 slider_current : int = 0 slider :: proc(id : string = "a_slider") -> t.Com { com : t.Com t.tafl(padding={2,2,2,2}, sizing_width=t.GROW) t.tafl(sizing_width=t.GROW, sizing_height=t.FIXED(30), color={.1,.1,.1,1}, padding={5,5,5,5}, layout=.LEFT_TO_RIGHT, position_horizontal=.END, position_vertical=.END) { com = t.tafl(sizing_width=t.FIXED(80), sizing_height=t.GROW, color={.5,.5,.5,1}, padding={2,2,2,2}, flags={.DRAGGABLE, .CLICKABLE, .HOVERABLE}, id=id) core_color : t.Color = {.2,.2,.2,1} if com.hover { core_color = {.3,.3,.3,1} } if com.pressed_down { slider_root = slider_root+slider_delta } if com.dragging { core_color = {.12,.12,.12,1} fmt.println(com.drag_delta) slider_delta = com.drag_delta.x slider_current = slider_root+slider_delta fmt.println(slider_current) } { t.tafl(sizing_height=t.GROW, sizing_width=t.GROW, color=core_color) } } { t.tafl(sizing_width=t.FIXED(-slider_current), sizing_height=t.GROW) } return com } Color_Scheme :: struct { background : t.Color, panel_blackground : t.Color, panel_border : t.Color, button_outline : t.Color, } colors : Color_Scheme = { background = {.1, .1, .1, 1}, panel_blackground = {.2, .2, .2, 1}, panel_border = {.35, .35, .35, 1}, button_outline = {.1, .5, 1, 1}, } panel :: proc() { }