slider api change
authorhgn <hgodden00@gmail.com>
Mon, 11 Mar 2024 15:24:32 +0000 (15:24 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 11 Mar 2024 15:24:32 +0000 (15:24 +0000)
vg_imgui.c
vg_imgui.h

index 21936cca44b9315aca8e2516027cda3b6fa6346c..08209b7d2ef44c1d3259416f529df2da3ab2ce0f 100644 (file)
@@ -704,6 +704,14 @@ int ui_click_up( u32 mask )
       return 0;
 }
 
+void ui_set_mouse_pos( ui_px x, ui_px y )
+{
+   SDL_WarpMouseInWindow( vg.window, x, y );
+   vg_ui.mouse[0] = x;
+   vg_ui.mouse[1] = y;
+   vg_ui.mouse_pos_overriden = 1;
+}
+
 void ui_prerender(void)
 {
    int x, y;
@@ -711,8 +719,12 @@ void ui_prerender(void)
    vg_ui.mouse_state[0] = SDL_GetMouseState( &x, &y );
    vg_ui.mouse_delta[0] = x-vg_ui.mouse[0];
    vg_ui.mouse_delta[1] = y-vg_ui.mouse[1];
-   vg_ui.mouse[0] = x;
-   vg_ui.mouse[1] = y;
+
+   if( !vg_ui.mouse_pos_overriden )
+   {
+      vg_ui.mouse[0] = x;
+      vg_ui.mouse[1] = y;
+   }
 
        vg_ui.cur_vert = 0;
        vg_ui.cur_indice = 0;
@@ -721,13 +733,16 @@ void ui_prerender(void)
    vg_ui.focused_control_hit = 0;
    vg_ui.cursor = k_ui_cursor_default;
    vg_ui.wants_mouse = 0;
+   vg_ui.mouse_pos_overriden = 0;
 
-   if( vg_ui.ignore_input_frames ){
+   if( vg_ui.ignore_input_frames )
+   {
       vg_ui.ignore_input_frames --;
       return;
    }
 
-   if( ui_click_down(UI_MOUSE_LEFT)||ui_click_down(UI_MOUSE_MIDDLE) ){
+   if( ui_click_down(UI_MOUSE_LEFT)||ui_click_down(UI_MOUSE_MIDDLE) )
+   {
       vg_ui.mouse_click[0] = vg_ui.mouse[0];
       vg_ui.mouse_click[1] = vg_ui.mouse[1];
    }
@@ -1284,13 +1299,22 @@ static enum ui_button_state _ui_slider(
    return state;
 }
 
-void ui_slider( ui_rect inout_panel, const char *str_label, 
+bool ui_slider( ui_rect inout_panel, const char *str_label, 
                 f32 min, f32 max, f32 *value, const char *format )
 {
    ui_rect rect, label, box;
    ui_standard_widget( inout_panel, rect, 1 );
    ui_label( rect, str_label, k_ui_scale, 0, box );
-   _ui_slider( box, min, max, value, format );
+
+   enum ui_button_state mask_using = 
+         k_ui_button_holding_inside |
+         k_ui_button_holding_outside |
+         k_ui_button_click;
+
+   if( _ui_slider( box, min, max, value, format ) & mask_using )
+      return 1;
+   else
+      return 0;
 }
 
 /*
index 4e725a824c37c62cc9e6448f1c0e349f4796534d..f2d4f05cdaecf84679823c21784bed8667c5dc43 100644 (file)
@@ -192,6 +192,7 @@ struct vg_imgui
        ui_px mouse[2], mouse_delta[2], mouse_click[2];
    u32 mouse_state[2];
    u32 ignore_input_frames;
+   bool mouse_pos_overriden;
    int wants_mouse;
 
    ui_rect click_fader, click_fader_end;
@@ -248,6 +249,7 @@ int ui_inside_rect( ui_rect rect, ui_px co[2] );
 int ui_click_down( u32 mask );
 int ui_clicking( u32 mask );
 int ui_click_up( u32 mask );
+void ui_set_mouse_pos( ui_px x, ui_px y );
 void ui_prerender(void);
 u32 ui_colour( enum ui_scheme_colour id );
 
@@ -285,7 +287,7 @@ void ui_postrender(void);
 int ui_checkbox( ui_rect inout_panel, const char *str_label, i32 *data );
 void ui_enum( ui_rect inout_panel, const char *str_label, 
               struct ui_enum_opt *options, u32 len, i32 *value );
-void ui_slider( ui_rect inout_panel, const char *str_label, 
+bool ui_slider( ui_rect inout_panel, const char *str_label, 
                 f32 min, f32 max, f32 *value, const char *format );
 void ui_colourpicker( ui_rect inout_panel, const char *str_label, v4f value );
 int ui_textbox( ui_rect inout_panel, const char *label,