UI_Progress_Bar :: struct { #as using base : UI_Elem = .{type = .PROGRESS_BAR}; value : float; value_ptr : *float; draw_proc := (percent : float, pix_coord : float) -> Vector3 { return ifx pix_coord < percent then Vector3.{0, 1, 0} else .{0, 0, 0}; } show_percent := true; } set_value :: (progress_bar : *UI_Progress_Bar, value : float) { progress_bar.value = value; progress_bar.value_ptr = null; } set_value_ptr :: (progress_bar : *UI_Progress_Bar, value_ptr : *float) { progress_bar.value_ptr = value_ptr; } c_draw_progress_bar :: (canvas : *Canvas, ui_elem : *UI_Elem, _zone : Ibox2, style : *UI_Style) -> bool { using progress_bar := cast(*UI_Progress_Bar) ui_elem; value_current := ifx value_ptr then <