UI: split theme draw style into separate field
Was using UI_BLOCK_LOOP to control draw style, this meant we couldn't use popup theme colors for cases where it the interface has the same purpose as a popup but happens not to use this flag.
This commit is contained in:
@@ -462,6 +462,11 @@ void UI_block_update_from_old(const struct bContext *C, struct uiBlock *block);
|
||||
|
||||
uiBlock *UI_block_find_in_region(const char *name, struct ARegion *ar);
|
||||
|
||||
enum {
|
||||
UI_BLOCK_THEME_STYLE_REGULAR = 0,
|
||||
UI_BLOCK_THEME_STYLE_POPUP = 1,
|
||||
};
|
||||
void UI_block_theme_style_set(uiBlock *block, char theme_style);
|
||||
void UI_block_emboss_set(uiBlock *block, char dt);
|
||||
|
||||
void UI_block_free(const struct bContext *C, uiBlock *block);
|
||||
|
||||
@@ -2879,6 +2879,11 @@ void UI_block_emboss_set(uiBlock *block, char dt)
|
||||
block->dt = dt;
|
||||
}
|
||||
|
||||
void UI_block_theme_style_set(uiBlock *block, char theme_style)
|
||||
{
|
||||
block->theme_style = theme_style;
|
||||
}
|
||||
|
||||
/**
|
||||
* \param but: Button to update.
|
||||
* \param validate: When set, this function may change the button value.
|
||||
|
||||
@@ -404,9 +404,10 @@ struct uiBlock {
|
||||
short alignnr;
|
||||
|
||||
char direction;
|
||||
char theme_style; /* UI_BLOCK_THEME_STYLE_* */
|
||||
char dt; /* drawtype: UI_EMBOSS, UI_EMBOSS_NONE ... etc, copied to buttons */
|
||||
bool auto_open;
|
||||
char _pad[7];
|
||||
char _pad[6];
|
||||
double auto_open_last;
|
||||
|
||||
const char *lockstr;
|
||||
|
||||
@@ -629,6 +629,7 @@ uiBlock *ui_block_func_COLOR(bContext *C, uiPopupBlockHandle *handle, void *arg_
|
||||
ui_block_colorpicker(block, handle->retvec, &but->rnapoin, but->rnaprop, show_picker);
|
||||
|
||||
block->flag = UI_BLOCK_LOOP | UI_BLOCK_KEEP_OPEN | UI_BLOCK_OUT_1 | UI_BLOCK_MOVEMOUSE_QUIT;
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
UI_block_bounds_set_normal(block, 0.5 * UI_UNIT_X);
|
||||
|
||||
block->block_event_func = ui_colorpicker_small_wheel_cb;
|
||||
|
||||
@@ -87,6 +87,7 @@ static uiBlock *ui_block_func_PIE(bContext *UNUSED(C), uiPopupBlockHandle *handl
|
||||
UI_block_layout_resolve(block, &width, &height);
|
||||
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_NUMSELECT);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
block->minbounds = minwidth;
|
||||
block->bounds = 1;
|
||||
|
||||
@@ -235,6 +235,7 @@ static uiBlock *ui_block_func_POPUP(bContext *C, uiPopupBlockHandle *handle, voi
|
||||
|
||||
uiBut *but_activate = NULL;
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_NUMSELECT);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
UI_block_direction_set(block, direction);
|
||||
|
||||
/* offset the mouse position, possibly based on earlier selection */
|
||||
|
||||
@@ -502,6 +502,7 @@ uiBlock *ui_popup_block_refresh(
|
||||
}
|
||||
|
||||
block->flag |= UI_BLOCK_LOOP;
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
/* defer this until blocks are translated (below) */
|
||||
block->oldblock = NULL;
|
||||
|
||||
@@ -267,6 +267,7 @@ static uiBlock *id_search_menu(bContext *C, ARegion *ar, void *arg_litem)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_SEARCH_MENU);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
/* preview thumbnails */
|
||||
if (template_ui.prv_rows > 0 && template_ui.prv_cols > 0) {
|
||||
@@ -1774,6 +1775,7 @@ static uiBlock *ui_icon_view_menu_cb(bContext *C, ARegion *ar, void *arg_litem)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS_PULLDOWN);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_NO_FLIP);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
RNA_property_enum_items(C, &args.ptr, args.prop, &item, NULL, &free);
|
||||
|
||||
|
||||
@@ -1473,7 +1473,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *b
|
||||
#endif
|
||||
|
||||
/* cut string in 2 parts - only for menu entries */
|
||||
if ((but->block->flag & UI_BLOCK_LOOP) &&
|
||||
if ((but->block->theme_style == UI_BLOCK_THEME_STYLE_POPUP) &&
|
||||
(but->editstr == NULL))
|
||||
{
|
||||
if (but->flag & UI_BUT_HAS_SEP_CHAR) {
|
||||
@@ -3749,7 +3749,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
|
||||
wt->wcol_theme = &tui->wcol_box;
|
||||
wt->state = widget_state;
|
||||
}
|
||||
else if (but->block->flag & UI_BLOCK_LOOP) {
|
||||
else if (but->block->theme_style == UI_BLOCK_THEME_STYLE_POPUP) {
|
||||
wt->wcol_theme = &tui->wcol_menu_back;
|
||||
wt->state = widget_state;
|
||||
}
|
||||
@@ -3785,8 +3785,9 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
|
||||
|
||||
case UI_BTYPE_SEARCH_MENU:
|
||||
wt = widget_type(UI_WTYPE_NAME);
|
||||
if (but->block->flag & UI_BLOCK_LOOP)
|
||||
if (but->block->theme_style == UI_BLOCK_THEME_STYLE_POPUP) {
|
||||
wt->wcol_theme = &btheme->tui.wcol_menu_back;
|
||||
}
|
||||
break;
|
||||
|
||||
case UI_BTYPE_BUT_TOGGLE:
|
||||
@@ -3805,9 +3806,9 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
|
||||
wt = widget_type(UI_WTYPE_TOGGLE);
|
||||
|
||||
/* option buttons have strings outside, on menus use different colors */
|
||||
if (but->block->flag & UI_BLOCK_LOOP)
|
||||
if (but->block->theme_style == UI_BLOCK_THEME_STYLE_POPUP) {
|
||||
wt->state = widget_state_option_menu;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case UI_BTYPE_MENU:
|
||||
|
||||
@@ -1019,6 +1019,7 @@ static uiBlock *node_find_menu(bContext *C, ARegion *ar, void *arg_op)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_SEARCH_MENU);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
but = uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 10, 9 * UI_UNIT_X, UI_UNIT_Y, 0, 0, "");
|
||||
UI_but_func_search_set(but, NULL, node_find_cb, op->type, node_find_call_cb, NULL);
|
||||
|
||||
@@ -180,6 +180,7 @@ static uiBlock *tool_search_menu(bContext *C, ARegion *ar, void *arg_listbase)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_SEARCH_MENU);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
/* fake button, it holds space for search items */
|
||||
uiDefBut(block, UI_BTYPE_LABEL, 0, "", 10, 15, UI_searchbox_size_x(), UI_searchbox_size_y(), NULL, 0, 0, 0, 0, NULL);
|
||||
|
||||
@@ -768,6 +768,7 @@ static uiBlock *wm_enum_search_menu(bContext *C, ARegion *ar, void *arg_op)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_SEARCH_MENU);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
search[0] = '\0';
|
||||
#if 0 /* ok, this isn't so easy... */
|
||||
@@ -980,6 +981,8 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op)
|
||||
|
||||
block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
|
||||
UI_block_flag_disable(block, UI_BLOCK_LOOP);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_REGULAR);
|
||||
|
||||
/* UI_BLOCK_NUMSELECT for layer buttons */
|
||||
UI_block_flag_enable(block, UI_BLOCK_NUMSELECT | UI_BLOCK_KEEP_OPEN | UI_BLOCK_MOVEMOUSE_QUIT);
|
||||
|
||||
@@ -1064,6 +1067,7 @@ static uiBlock *wm_block_dialog_create(bContext *C, ARegion *ar, void *userData)
|
||||
|
||||
block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
|
||||
UI_block_flag_disable(block, UI_BLOCK_LOOP);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_REGULAR);
|
||||
|
||||
/* intentionally don't use 'UI_BLOCK_MOVEMOUSE_QUIT', some dialogues have many items
|
||||
* where quitting by accident is very annoying */
|
||||
@@ -1106,6 +1110,7 @@ static uiBlock *wm_operator_ui_create(bContext *C, ARegion *ar, void *userData)
|
||||
block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
|
||||
UI_block_flag_disable(block, UI_BLOCK_LOOP);
|
||||
UI_block_flag_enable(block, UI_BLOCK_KEEP_OPEN | UI_BLOCK_MOVEMOUSE_QUIT);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_REGULAR);
|
||||
|
||||
layout = UI_block_layout(block, UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, 0, 0, data->width, data->height, 0, style);
|
||||
|
||||
@@ -1433,6 +1438,7 @@ static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(ar
|
||||
* with the OS when the splash shows, window clipping in this case gives
|
||||
* ugly results and clipping the splash isn't useful anyway, just disable it [#32938] */
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_KEEP_OPEN | UI_BLOCK_NO_WIN_CLIP);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
/* XXX splash scales with pixelsize, should become widget-units */
|
||||
but = uiDefBut(block, UI_BTYPE_IMAGE, 0, "", 0, 0.5f * U.widget_unit, U.pixelsize * 501, U.pixelsize * 282, ibuf, 0.0, 0.0, 0, 0, ""); /* button owns the imbuf now */
|
||||
@@ -1582,6 +1588,7 @@ static uiBlock *wm_block_search_menu(bContext *C, ARegion *ar, void *userdata)
|
||||
|
||||
block = UI_block_begin(C, ar, "_popup", UI_EMBOSS);
|
||||
UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_SEARCH_MENU);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
|
||||
but = uiDefSearchBut(block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 10, init_data->size[0], UI_UNIT_Y, 0, 0, "");
|
||||
UI_but_func_operator_search(but);
|
||||
|
||||
@@ -345,6 +345,7 @@ static uiBlock *block_create_confirm_quit(struct bContext *C, struct ARegion *ar
|
||||
uiBlock *block = UI_block_begin(C, ar, "confirm_quit_popup", UI_EMBOSS);
|
||||
|
||||
UI_block_flag_enable(block, UI_BLOCK_KEEP_OPEN | UI_BLOCK_LOOP | UI_BLOCK_NO_WIN_CLIP | UI_BLOCK_NUMSELECT);
|
||||
UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
|
||||
uiLayout *layout = UI_block_layout(
|
||||
|
||||
Reference in New Issue
Block a user