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;
}
* -----------------------------------------------------------------------------
*/
+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;
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 ) );
}
* -----------------------------------------------------------------------------
*/
-static enum ui_button_state _ui_slider(
- ui_rect box, f32 min, f32 max, f32 *value, const char *format )
+enum ui_button_state ui_slider_base(
+ ui_rect box, f32 min, f32 max, f32 *value, f32 *out_t )
{
- f32 t;
-
- enum ui_button_state
- mask_using =
- k_ui_button_holding_inside |
- k_ui_button_holding_outside |
- k_ui_button_click,
- mask_brighter =
- mask_using | k_ui_button_hover,
- state = ui_colourbutton( box, k_ui_bg, k_ui_bg+2, k_ui_bg+3 );
+ enum ui_button_state mask_using =
+ k_ui_button_holding_inside |
+ k_ui_button_holding_outside |
+ k_ui_button_click,
+ state = ui_button_base( box );
- if( state & mask_using ){
- t = vg_clampf( (f32)(vg_ui.mouse[0] - box[0]) / (f32)( box[2] ),
- 0.0f, 1.0f );
+ f32 t;
+ if( state & mask_using )
+ {
+ t = vg_clampf( (f32)(vg_ui.mouse[0] - box[0]) / (f32)( box[2] ), 0,1 );
*value = vg_lerpf( min, max, t );
}
else
t = vg_clampf( (*value - min) / (max-min), 0.0f, 1.0f );
-
- ui_rect line = { box[0], box[1], t * (f32)box[2], box[3] };
- ui_fill( line, ui_colour(state&mask_brighter? k_ui_bg+4: k_ui_bg+2) );
- ui_outline( box, 1, ui_colour(state? k_ui_fg+3: k_ui_bg+3), 0 );
+ *out_t = t;
+
+ return state;
+}
+void ui_slider_text( ui_rect box, const char *format, f32 value )
+{
/* TODO: replace this one day with our own function */
char buf[32];
- snprintf( buf, sizeof(buf), format? format: "%.2f", *value );
+ snprintf( buf, sizeof(buf), format? format: "%.2f", value );
ui_text( box, buf, 1, k_ui_align_middle_center, 0 );
-
- return state;
}
-bool ui_slider( ui_rect inout_panel, const char *str_label,
- f32 min, f32 max, f32 *value, const char *format )
+bool ui_slider_standard( ui_rect box, 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 );
+ f32 t;
enum ui_button_state mask_using =
k_ui_button_holding_inside |
k_ui_button_holding_outside |
- k_ui_button_click;
+ k_ui_button_click,
+ mask_brighter = mask_using | k_ui_button_hover,
+ state = ui_slider_base( box, min, max, value, &t );
- if( _ui_slider( box, min, max, value, format ) & mask_using )
- return 1;
- else
- return 0;
+ ui_rect line = { box[0], box[1], t * (f32)box[2], box[3] };
+ ui_fill( line, ui_colour(state&mask_brighter? k_ui_bg+4: k_ui_bg+2) );
+
+ ui_fill( (ui_rect){ box[0]+line[2], box[1], box[2]-line[2], box[3] },
+ ui_colour( k_ui_bg ) );
+ ui_outline( box, 1, ui_colour(state? k_ui_fg+3: k_ui_bg+3), 0 );
+ ui_slider_text( box, NULL, *value );
+
+ return (state & mask_using) && 1;
+}
+
+bool ui_slider( ui_rect inout_panel, const char *str_label,
+ f32 min, f32 max, f32 *value )
+{
+ ui_rect rect, label, box;
+ ui_standard_widget( inout_panel, rect, 1 );
+ ui_label( rect, str_label, k_ui_scale, 0, box );
+ return ui_slider_standard( box, min, max, value, NULL );
}
/*
enum ui_button_state modified = 0x00;
- for( u32 i=0; i<4; i ++ ){
- modified |= _ui_slider( sliders[i], 0.0f, 1.0f, hsv+i,
+ for( u32 i=0; i<4; i ++ )
+ {
+ modified |= ui_slider_standard( sliders[i], 0.0f, 1.0f, hsv+i,
(const char *[]){ "hue %.2f",
"sat %.2f",
"lum %.2f",