[Bf-blender-cvs] [3469e623d31] blender2.8: UI/Python: layout API support for setting button emboss style.

Brecht Van Lommel noreply at git.blender.org
Sun May 13 13:46:08 CEST 2018


Commit: 3469e623d3174ff4e82c430478640dfacd0e63ff
Author: Brecht Van Lommel
Date:   Sun May 13 12:57:31 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB3469e623d3174ff4e82c430478640dfacd0e63ff

UI/Python: layout API support for setting button emboss style.

===================================================================

M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_layout.c
M	source/blender/makesrna/intern/rna_ui.c

===================================================================

diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index c1aae483644..850b84dcd4b 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -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);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 6626693ebec..f0ea6466763 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -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)
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index bb4f6719fbc..9e868cf17e9 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -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)



More information about the Bf-blender-cvs mailing list