From: Brendan Hansen Date: Wed, 6 Oct 2021 03:22:17 +0000 (-0500) Subject: using #tag for customizable config options X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=cc016659ec37e543bc0de611a0e01fd921513c06;p=onyx-wasm-analyzer.git using #tag for customizable config options --- diff --git a/src/app/colors.onyx b/src/app/colors.onyx index 64c57bb..4553dc7 100644 --- a/src/app/colors.onyx +++ b/src/app/colors.onyx @@ -101,4 +101,10 @@ update_ui_colors :: () { ui.default_radio_theme.selected_color = config.Colors.secondary; ui.default_radio_theme.hover_color = config.Colors.primary; ui.default_radio_theme.click_color = config.Colors.primary_light; + + ui.default_slider_theme.text_color = config.Colors.primary_text; + ui.default_slider_theme.box_color = config.Colors.primary_dark; + ui.default_slider_theme.box_border_color = config.Colors.primary; + ui.default_slider_theme.bar_hover_color = config.Colors.secondary; + ui.default_slider_theme.bar_color = config.Colors.primary_light; } diff --git a/src/app/settings.onyx b/src/app/settings.onyx index 04ed206..3e55858 100644 --- a/src/app/settings.onyx +++ b/src/app/settings.onyx @@ -12,25 +12,10 @@ package app Application_Settings :: struct { colorscheme := Colorscheme.Undefined; - - coolness : Slider_Option(i32) = .{ 5, 0, 5 }; - badness : Slider_Option(f32) = .{ 0, 0, 10 }; - - test : Test = .{ 5, 5 }; - test2 : Test = .{ 0, 0 }; - wrapped : Wrapper = .{ value = 40 }; - - Test :: struct { x: i32; y: f32; } - Wrapper :: struct { - test := Test.{ 10, 10 }; - value: i32; - } } -Slider_Option :: struct (T: type_expr) { - value: T; - min, max: T; -} +Slider_Int :: struct { min, max: i32; } +Slider_Float :: struct { min, max: f32; } settings_save :: (settings: ^Application_Settings) { use type_info; @@ -163,27 +148,29 @@ settings_window_draw :: (obj: ^any, win: ^Application_Window) { struct_type := cast(^Type_Info_Struct) member_type; sub_object := cast(rawptr) (cast(^u8) obj.data + member.offset); - switch member.type { - case #type Slider_Option(i32) do render_slider_option(i32, sub_object); - case #type Slider_Option(f32) do render_slider_option(f32, sub_object); + rect.x0 += 32; + defer rect.x0 -= 32; - case #default { - rect.x0 += 32; - defer rect.x0 -= 32; - - sub_object_any := any.{ sub_object, member.type }; - render_settings(rect, win_rect, ^sub_object_any); - } - } + sub_object_any := any.{ sub_object, member.type }; + render_settings(rect, win_rect, ^sub_object_any); } case .Basic do switch member.type { case i32 { value := cast(^i32) (cast(^u8) obj.data + member.offset); + low, high : i32; + low, high = 0, 10; + + if elem := array.first(member.tags, (x) => x.type == Slider_Int); elem != null { + slider_int := cast(^Slider_Int) elem.data; + low = slider_int.min; + high = slider_int.max; + } + tmp_rect, *rect = ui.Flow.split_horizontal(*rect, top_height=32); if ui.Rectangle.intersects(tmp_rect, win_rect) { - ui.slider(tmp_rect, value, -10, 10, increment=counter); + ui.slider(tmp_rect, value, low, high, increment=counter); ui.draw_text(tmp_rect, conv.str_format(msg_buffer, " Current: {}", *value)); } } @@ -191,9 +178,18 @@ settings_window_draw :: (obj: ^any, win: ^Application_Window) { case f32 { value := cast(^f32) (cast(^u8) obj.data + member.offset); + low, high : f32; + low, high = 0, 1; + + if elem := array.first(member.tags, (x) => x.type == Slider_Float); elem != null { + slider_int := cast(^Slider_Float) elem.data; + low = slider_int.min; + high = slider_int.max; + } + tmp_rect, *rect = ui.Flow.split_horizontal(*rect, top_height=32); if ui.Rectangle.intersects(tmp_rect, win_rect) { - ui.slider(tmp_rect, value, 0, 100, increment=counter); + ui.slider(tmp_rect, value, low, high, increment=counter); ui.draw_text(tmp_rect, conv.str_format(msg_buffer, " Current: {}", *value)); } } @@ -201,15 +197,4 @@ settings_window_draw :: (obj: ^any, win: ^Application_Window) { } } } - - render_slider_option :: macro ($T: type_expr, so: rawptr) { - so_ := cast(^Slider_Option(T)) so; - - tmp_rect, *rect = ui.Flow.split_horizontal(*rect, top_height=32); - - if ui.Rectangle.intersects(tmp_rect, win_rect) { - ui.slider(tmp_rect, ^so_.value, so_.min, so_.max, increment=counter); - ui.draw_text(tmp_rect, conv.str_format(msg_buffer, " Current: {}", so_.value)); - } - } }