+/*
+ * Dropdown / Enum
+ * -----------------------------------------------------------------------------
+ */
+
+/*
+ * unfortunately no return value since we only find out that event in the
+ * postrender step.
+ */
+static void ui_enum( ui_rect rect, const char *str_label,
+ struct ui_dropdown_opt *options, u32 len,
+ struct ui_dropdown_value *value )
+{
+ ui_rect label, box;
+ ui_split( rect, k_ui_axis_v, ui_text_line_width( str_label ) + 8,
+ 0, label, box );
+ ui_text( label, str_label, 1, k_ui_align_middle_left, 0 );
+
+ if( ui_button_text( box, options[ value->index ].alias, 1 ) ){
+ vg_ui.focused_control_type = k_ui_control_dropdown;
+ vg_ui.ptr_dropdown = value;
+ vg_ui.dropdown.option_count = len;
+ vg_ui.dropdown.options = options;
+ rect_copy( box, vg_ui.dropdown.rect );
+ }
+}
+
+static void ui_enum_post(void)
+{
+ ui_rect drawer;
+ rect_copy( vg_ui.dropdown.rect, drawer );
+ drawer[3] *= vg_ui.dropdown.option_count;
+
+ int close = 0;
+ int clickany= ui_click_up(UI_MOUSE_LEFT|UI_MOUSE_RIGHT|UI_MOUSE_MIDDLE),
+ hover = ui_inside_rect( drawer, vg_ui.mouse );
+
+ if( clickany && !hover ){
+ return;
+ }
+
+ /* HACK */
+ vg_ui.focused_control_type = k_ui_control_none;
+ struct ui_dropdown_value *value = vg_ui.ptr_dropdown;
+
+ for( u32 i=0; i<vg_ui.dropdown.option_count; i++ ){
+ ui_rect button;
+ ui_split( drawer, k_ui_axis_h, vg_ui.dropdown.rect[3], 1, button,drawer );
+
+ enum ui_scheme_colour colour = k_ui_bg+3;
+ if( i == value->index ) colour = k_ui_orange;
+
+ if( ui_colourbutton_text( button, vg_ui.dropdown.options[i].alias, 1,
+ colour ) ){
+ value->index = i;
+ value->value = vg_ui.dropdown.options[i].value;
+ close = 1;
+ }
+ }
+
+ /* HACK */
+ vg_ui.focused_control_type = k_ui_control_dropdown;
+
+ if( !close )
+ vg_ui.focused_control_hit = 1;
+}
+