UI/Python: layout API support for setting button emboss style.
This commit is contained in:
parent
343c2e94f5
commit
3469e623d3
|
@ -100,6 +100,8 @@ enum {
|
|||
UI_EMBOSS_NONE = 1, /* Nothing, only icon and/or text */
|
||||
UI_EMBOSS_PULLDOWN = 2, /* Pulldown menu style */
|
||||
UI_EMBOSS_RADIAL = 3, /* Pie Menu */
|
||||
|
||||
UI_EMBOSS_UNDEFINED = 255, /* For layout engine, use emboss from block. */
|
||||
};
|
||||
|
||||
/* uiBlock->direction */
|
||||
|
@ -946,6 +948,7 @@ void uiLayoutSetAlignment(uiLayout *layout, char alignment);
|
|||
void uiLayoutSetKeepAspect(uiLayout *layout, bool keepaspect);
|
||||
void uiLayoutSetScaleX(uiLayout *layout, float scale);
|
||||
void uiLayoutSetScaleY(uiLayout *layout, float scale);
|
||||
void uiLayoutSetEmboss(uiLayout *layout, char emboss);
|
||||
|
||||
int uiLayoutGetOperatorContext(uiLayout *layout);
|
||||
bool uiLayoutGetActive(uiLayout *layout);
|
||||
|
@ -956,6 +959,7 @@ bool uiLayoutGetKeepAspect(uiLayout *layout);
|
|||
int uiLayoutGetWidth(uiLayout *layout);
|
||||
float uiLayoutGetScaleX(uiLayout *layout);
|
||||
float uiLayoutGetScaleY(uiLayout *layout);
|
||||
int uiLayoutGetEmboss(uiLayout *layout);
|
||||
|
||||
/* layout specifiers */
|
||||
uiLayout *uiLayoutRow(uiLayout *layout, int align);
|
||||
|
|
|
@ -151,6 +151,7 @@ struct uiLayout {
|
|||
bool redalert;
|
||||
bool keepaspect;
|
||||
char alignment;
|
||||
char emboss;
|
||||
};
|
||||
|
||||
typedef struct uiLayoutItemFlow {
|
||||
|
@ -844,8 +845,9 @@ static uiBut *uiItemFullO_ptr_ex(
|
|||
|
||||
w = ui_text_icon_width(layout, name, icon, 0);
|
||||
|
||||
int prev_emboss = layout->emboss;
|
||||
if (flag & UI_ITEM_R_NO_BG)
|
||||
UI_block_emboss_set(block, UI_EMBOSS_NONE);
|
||||
layout->emboss = UI_EMBOSS_NONE;
|
||||
|
||||
/* create the button */
|
||||
if (icon) {
|
||||
|
@ -867,7 +869,9 @@ static uiBut *uiItemFullO_ptr_ex(
|
|||
but->drawflag |= UI_BUT_TEXT_LEFT;
|
||||
|
||||
if (flag & UI_ITEM_R_NO_BG)
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
layout->emboss = prev_emboss;
|
||||
|
||||
if (flag & UI_ITEM_R_NO_BG)
|
||||
|
||||
if (flag & UI_ITEM_O_DEPRESS) {
|
||||
but->flag |= UI_SELECT_DRAW;
|
||||
|
@ -1496,8 +1500,9 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
|
|||
/* get size */
|
||||
ui_item_rna_size(layout, name, icon, ptr, prop, index, icon_only, compact, &w, &h);
|
||||
|
||||
if (no_bg)
|
||||
UI_block_emboss_set(block, UI_EMBOSS_NONE);
|
||||
int prev_emboss = layout->emboss;
|
||||
if (flag & UI_ITEM_R_NO_BG)
|
||||
layout->emboss = UI_EMBOSS_NONE;
|
||||
|
||||
/* array property */
|
||||
if (index == RNA_NO_INDEX && is_array)
|
||||
|
@ -1543,8 +1548,8 @@ void uiItemFullR(uiLayout *layout, PointerRNA *ptr, PropertyRNA *prop, int index
|
|||
UI_but_flag_enable(but, UI_BUT_LIST_ITEM);
|
||||
}
|
||||
|
||||
if (no_bg)
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
if (flag & UI_ITEM_R_NO_BG)
|
||||
layout->emboss = prev_emboss;
|
||||
|
||||
/* ensure text isn't added to icon_only buttons */
|
||||
if (but && icon_only) {
|
||||
|
@ -1880,9 +1885,6 @@ static uiBut *ui_item_menu(
|
|||
|
||||
UI_block_layout_set_current(block, layout);
|
||||
|
||||
if (layout->root->type == UI_LAYOUT_HEADER)
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
|
||||
if (!name)
|
||||
name = "";
|
||||
if (layout->root->type == UI_LAYOUT_MENU && !icon)
|
||||
|
@ -1914,9 +1916,6 @@ static uiBut *ui_item_menu(
|
|||
but->func_argN = argN;
|
||||
}
|
||||
|
||||
if (layout->root->type == UI_LAYOUT_HEADER) {
|
||||
UI_block_emboss_set(block, UI_EMBOSS);
|
||||
}
|
||||
if (ELEM(layout->root->type, UI_LAYOUT_PANEL, UI_LAYOUT_TOOLBAR) ||
|
||||
(force_menu && layout->root->type != UI_LAYOUT_MENU)) /* We never want a dropdown in menu! */
|
||||
{
|
||||
|
@ -2947,7 +2946,7 @@ static void ui_litem_init_from_parent(uiLayout *litem, uiLayout *layout, int ali
|
|||
litem->context = layout->context;
|
||||
litem->redalert = layout->redalert;
|
||||
litem->w = layout->w;
|
||||
litem->emboss = layout->root->block->dt;
|
||||
litem->emboss = layout->emboss;
|
||||
BLI_addtail(&layout->items, litem);
|
||||
}
|
||||
|
||||
|
@ -3177,6 +3176,11 @@ void uiLayoutSetScaleY(uiLayout *layout, float scale)
|
|||
layout->scale[1] = scale;
|
||||
}
|
||||
|
||||
void uiLayoutSetEmboss(uiLayout *layout, char emboss)
|
||||
{
|
||||
layout->emboss = emboss;
|
||||
}
|
||||
|
||||
bool uiLayoutGetActive(uiLayout *layout)
|
||||
{
|
||||
return layout->active;
|
||||
|
@ -3217,6 +3221,16 @@ float uiLayoutGetScaleY(uiLayout *layout)
|
|||
return layout->scale[1];
|
||||
}
|
||||
|
||||
int uiLayoutGetEmboss(uiLayout *layout)
|
||||
{
|
||||
if (layout->emboss == UI_EMBOSS_UNDEFINED) {
|
||||
return layout->root->block->dt;
|
||||
}
|
||||
else {
|
||||
return layout->emboss;
|
||||
}
|
||||
}
|
||||
|
||||
/********************** Layout *******************/
|
||||
|
||||
static void ui_item_scale(uiLayout *litem, const float scale[2])
|
||||
|
@ -3470,6 +3484,7 @@ uiLayout *UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int s
|
|||
layout->active = 1;
|
||||
layout->enabled = 1;
|
||||
layout->context = NULL;
|
||||
layout->emboss = UI_EMBOSS_UNDEFINED;
|
||||
|
||||
if (type == UI_LAYOUT_MENU || type == UI_LAYOUT_PIEMENU)
|
||||
layout->space = 0;
|
||||
|
@ -3534,6 +3549,10 @@ void ui_layout_add_but(uiLayout *layout, uiBut *but)
|
|||
but->context = layout->context;
|
||||
but->context->used = true;
|
||||
}
|
||||
|
||||
if (layout->emboss != UI_EMBOSS_UNDEFINED) {
|
||||
but->dt = layout->emboss;
|
||||
}
|
||||
}
|
||||
|
||||
void uiLayoutSetOperatorContext(uiLayout *layout, int opcontext)
|
||||
|
|
|
@ -904,6 +904,16 @@ static void rna_UILayout_scale_y_set(PointerRNA *ptr, float value)
|
|||
uiLayoutSetScaleY(ptr->data, value);
|
||||
}
|
||||
|
||||
static int rna_UILayout_emboss_get(PointerRNA *ptr)
|
||||
{
|
||||
return uiLayoutGetEmboss(ptr->data);
|
||||
}
|
||||
|
||||
static void rna_UILayout_emboss_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
uiLayoutSetEmboss(ptr->data, value);
|
||||
}
|
||||
|
||||
#else /* RNA_RUNTIME */
|
||||
|
||||
static void rna_def_ui_layout(BlenderRNA *brna)
|
||||
|
@ -919,6 +929,14 @@ static void rna_def_ui_layout(BlenderRNA *brna)
|
|||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
static const EnumPropertyItem emboss_items[] = {
|
||||
{UI_EMBOSS, "NORMAL", 0, "Normal", "Draw standard button emboss style"},
|
||||
{UI_EMBOSS_NONE, "NONE", 0, "None", "Draw only text and icons"},
|
||||
{UI_EMBOSS_PULLDOWN, "PULLDOWN_MENU", 0, "Pulldown Menu", "Draw pulldown menu style"},
|
||||
{UI_EMBOSS_RADIAL, "RADIAL_MENU", 0, "Radial Menu", "Draw radial menu style"},
|
||||
{0, NULL, 0, NULL, NULL}
|
||||
};
|
||||
|
||||
/* layout */
|
||||
|
||||
srna = RNA_def_struct(brna, "UILayout", NULL);
|
||||
|
@ -956,6 +974,10 @@ static void rna_def_ui_layout(BlenderRNA *brna)
|
|||
RNA_def_property_float_funcs(prop, "rna_UILayout_scale_y_get", "rna_UILayout_scale_y_set", NULL);
|
||||
RNA_def_property_ui_text(prop, "Scale Y", "Scale factor along the Y for items in this (sub)layout");
|
||||
RNA_api_ui_layout(srna);
|
||||
|
||||
prop = RNA_def_property(srna, "emboss", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_items(prop, emboss_items);
|
||||
RNA_def_property_enum_funcs(prop, "rna_UILayout_emboss_get", "rna_UILayout_emboss_set", NULL);
|
||||
}
|
||||
|
||||
static void rna_def_panel(BlenderRNA *brna)
|
||||
|
|
Loading…
Reference in New Issue