[Bf-blender-cvs] [13ca63d2ada] blender2.8: Draw background on pulldown widgets if the header is transparent.

Brecht Van Lommel noreply at git.blender.org
Fri Jun 1 15:11:44 CEST 2018


Commit: 13ca63d2adad0da7b73ed3e38da53363e1de3428
Author: Brecht Van Lommel
Date:   Fri Jun 1 15:04:51 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB13ca63d2adad0da7b73ed3e38da53363e1de3428

Draw background on pulldown widgets if the header is transparent.

Since the viewport header now supports transparency, text on pulldowns
can be hard to read if their color matches the viewport content.

Background is drawn using the 'inner' theme color, that was unused until now.

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

M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/interface/interface_widgets.c
M	source/blender/editors/interface/resources.c
M	source/blender/editors/screen/area.c

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

diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index f2ab7318037..171fbc68e19 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -94,6 +94,7 @@ void    ED_region_image_metadata_draw(int x, int y, struct ImBuf *ibuf, const rc
 void    ED_region_grid_draw(struct ARegion *ar, float zoomx, float zoomy);
 float	ED_region_blend_alpha(struct ARegion *ar);
 void	ED_region_visible_rect(struct ARegion *ar, struct rcti *rect);
+bool    ED_region_is_overlap(int spacetype, int regiontype);
 
 int     ED_region_snap_size_test(const struct ARegion *ar);
 bool    ED_region_snap_size_apply(struct ARegion *ar, int snap_flag);
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index e4faac5129e..928ac8c9171 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -2626,15 +2626,9 @@ static void widget_state_nothing(uiWidgetType *wt, int UNUSED(state))
 }
 
 /* special case, button that calls pulldown */
-static void widget_state_pulldown(uiWidgetType *wt, int state)
+static void widget_state_pulldown(uiWidgetType *wt, int UNUSED(state))
 {
 	wt->wcol = *(wt->wcol_theme);
-
-	copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
-	copy_v3_v3_char(wt->wcol.outline, wt->wcol.inner);
-
-	if (state & UI_ACTIVE)
-		copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
 }
 
 /* special case, pie menu items */
@@ -3812,10 +3806,23 @@ static void widget_menunodebut(uiWidgetColors *wcol, rcti *rect, int UNUSED(stat
 
 static void widget_pulldownbut(uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign)
 {
-	if (state & UI_ACTIVE) {
+	float back[4];
+	UI_GetThemeColor4fv(TH_BACK, back);
+
+	if ((state & UI_ACTIVE) || (back[3] < 1.0f)) {
 		uiWidgetBase wtb;
 		const float rad = wcol->roundness * U.widget_unit;
 
+		if (state & UI_ACTIVE) {
+			copy_v4_v4_char(wcol->inner, wcol->inner_sel);
+			copy_v3_v3_char(wcol->text, wcol->text_sel);
+			copy_v3_v3_char(wcol->outline, wcol->inner);
+		}
+		else {
+			wcol->inner[3] *= 1.0f - back[3];
+			wcol->outline[3] = 0.0f;
+		}
+
 		widget_init(&wtb);
 
 		/* half rounded */
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 979a2164199..67165eeee95 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -56,6 +56,8 @@
 
 #include "BLF_api.h"
 
+#include "ED_screen.h"
+
 #include "UI_interface.h"
 #include "UI_interface_icons.h"
 
@@ -96,6 +98,7 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
 	static char error[4] = {240, 0, 240, 255};
 	static char alert[4] = {240, 60, 60, 255};
 	static char headerdesel[4] = {0, 0, 0, 255};
+	static char back[4] = {0, 0, 0, 255};
 	static char setting = 0;
 	const char *cp = error;
 
@@ -183,6 +186,12 @@ const unsigned char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colo
 						cp = ts->header;
 					else
 						cp = ts->button;
+
+						copy_v4_v4_char(back, cp);
+						if (!ED_region_is_overlap(spacetype, theme_regionid)) {
+							back[3] = 255;
+						}
+						cp = back;
 					break;
 				case TH_LOW_GRAD:
 					cp = ts->gradients.gradient;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index cd7a0904f38..daaa6a31446 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -1005,19 +1005,19 @@ static void region_overlap_fix(ScrArea *sa, ARegion *ar)
 }
 
 /* overlapping regions only in the following restricted cases */
-static bool region_is_overlap(ScrArea *sa, ARegion *ar)
+bool ED_region_is_overlap(int spacetype, int regiontype)
 {
 	if (U.uiflag2 & USER_REGION_OVERLAP) {
-		if (ELEM(sa->spacetype, SPACE_VIEW3D, SPACE_SEQ, SPACE_IMAGE)) {
-			if (ELEM(ar->regiontype, RGN_TYPE_TOOLS, RGN_TYPE_UI, RGN_TYPE_TOOL_PROPS))
+		if (ELEM(spacetype, SPACE_VIEW3D, SPACE_SEQ, SPACE_IMAGE)) {
+			if (ELEM(regiontype, RGN_TYPE_TOOLS, RGN_TYPE_UI, RGN_TYPE_TOOL_PROPS))
 				return 1;
 
-			if (ELEM(sa->spacetype, SPACE_VIEW3D, SPACE_IMAGE)) {
-				if (ar->regiontype == RGN_TYPE_HEADER)
+			if (ELEM(spacetype, SPACE_VIEW3D, SPACE_IMAGE)) {
+				if (regiontype == RGN_TYPE_HEADER)
 					return 1;
 			}
-			else if (sa->spacetype == SPACE_SEQ) {
-				if (ar->regiontype == RGN_TYPE_PREVIEW)
+			else if (spacetype == SPACE_SEQ) {
+				if (regiontype == RGN_TYPE_PREVIEW)
 					return 1;
 			}
 		}
@@ -1046,7 +1046,7 @@ static void region_rect_recursive(wmWindow *win, ScrArea *sa, ARegion *ar, rcti
 	alignment = ar->alignment & ~RGN_SPLIT_PREV;
 	
 	/* set here, assuming userpref switching forces to call this again */
-	ar->overlap = region_is_overlap(sa, ar);
+	ar->overlap = ED_region_is_overlap(sa->spacetype, ar->regiontype);
 
 	/* clear state flags first */
 	ar->flag &= ~RGN_FLAG_TOO_SMALL;



More information about the Bf-blender-cvs mailing list