checkbox imgui api
[vg.git] / vg_imgui.c
index 60bb296bfab0a3d8eb9984b8f3f853d4523aa0d8..bb4f46f54d7f7d152904985871c75d0f9f6c2140 100644 (file)
@@ -839,7 +839,7 @@ u32 ui_ntext( ui_rect rect, const char *str, u32 len, ui_px scale,
          text_cursor[0] -= vg_ui.font->sx*scale;
 
          ui_rect glyph;
-         ui_text_glyph( vg_ui.font, '\xb6' /*FIXME*/, glyph );
+         ui_text_glyph( vg_ui.font, '\xb1' /*FIXME*/, glyph );
          ui_fill_rect( text_cursor, 0x00ffffff, glyph );
          text_cursor[0] += vg_ui.font->sx*scale;
       }
@@ -1199,6 +1199,14 @@ void ui_postrender(void)
  * -----------------------------------------------------------------------------
  */
 
+enum ui_button_state ui_checkbox_base( ui_rect box, i32 *data )
+{
+   enum ui_button_state state = ui_button_base( box );
+   if( state == k_ui_button_click )
+      *data = (*data) ^ 0x1;
+   return state;
+}
+
 int ui_checkbox( ui_rect inout_panel, const char *str_label, i32 *data )
 {
    ui_rect rect, label, box;
@@ -1206,12 +1214,34 @@ int ui_checkbox( ui_rect inout_panel, const char *str_label, i32 *data )
 
    ui_split( rect, k_ui_axis_v, -rect[3], 0, label, box );
    ui_text( label, str_label, k_ui_scale, k_ui_align_middle_left, 0 );
+   
+   enum ui_button_state state = ui_checkbox_base( box, data );
 
-   int changed = ui_colourbutton( box, k_ui_bg, 0, 0 ) == k_ui_button_click;
-   if( changed )
-      *data = (*data) ^ 0x1;
+   if( state == k_ui_button_holding_inside )
+   {
+      ui_fill( box, ui_colour(k_ui_bg+2) );
+      ui_outline( box, 1, ui_colour(k_ui_fg), 0 );
+   }
+   else if( state == k_ui_button_holding_outside )
+   {
+      ui_fill( box, ui_colour(k_ui_bg) );
+      ui_outline( box, 1, ui_colour(k_ui_fg), 0 );
+   }
+   else if( state == k_ui_button_hover )
+   {
+      ui_fill( box, ui_colour(k_ui_bg) );
+      ui_outline( box, 1, ui_colour(k_ui_fg), 0 );
+   }
+   else 
+   {
+      ui_fill( box, ui_colour(k_ui_bg) );
+      ui_outline( box, 1, ui_colour(k_ui_bg+4), 0 );
+   }
+
+   bool changed = (state == k_ui_button_click);
 
-   if( *data ){
+   if( *data )
+   {
       ui_rect_pad( box, (ui_px[2]){4,4} );
       ui_fill( box, ui_colour( k_ui_orange ) );
    }