[Bf-blender-cvs] [1de1cedf4c2] master: UI: better widget drawing with thick line width.

Harley Acheson noreply at git.blender.org
Thu Feb 21 18:03:45 CET 2019


Commit: 1de1cedf4c2fe3dc460267ea3134f17df508b7d9
Author: Harley Acheson
Date:   Thu Feb 21 17:34:48 2019 +0100
Branches: master
https://developer.blender.org/rB1de1cedf4c2fe3dc460267ea3134f17df508b7d9

UI: better widget drawing with thick line width.

When the line width was larger than the UI scale, there was not enough
space for thicker widget outlines to draw properly. Now widgets are made
a little larger to accommodate the thicker outlines.

Differential Revision: https://developer.blender.org/D4368

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

M	source/blender/editors/interface/interface_layout.c
M	source/blender/editors/screen/area.c
M	source/blender/editors/space_view3d/view3d_header.c
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/intern/wm_window.c

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

diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index ddf1454d3b7..b0ac22898b6 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -723,7 +723,7 @@ static void ui_item_enum_expand_exec(
 		if (icon && name[0] && !icon_only)
 			but = uiDefIconTextButR_prop(block, but_type, 0, icon, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 		else if (icon)
-			but = uiDefIconButR_prop(block, but_type, 0, icon, 0, 0, (is_first) ? itemw : ceilf(itemw - UI_DPI_FAC), h, ptr, prop, -1, 0, value, -1, -1, NULL);
+			but = uiDefIconButR_prop(block, but_type, 0, icon, 0, 0, (is_first) ? itemw : ceilf(itemw - U.pixelsize), h, ptr, prop, -1, 0, value, -1, -1, NULL);
 		else
 			but = uiDefButR_prop(block, but_type, 0, name, 0, 0, itemw, h, ptr, prop, -1, 0, value, -1, -1, NULL);
 
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 7c5f13f4f20..b5c7a19b9af 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -2504,10 +2504,10 @@ void ED_region_header_init(ARegion *ar)
 	UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy);
 }
 
-/* UI_UNIT_Y is defined as U variable now, depending dpi */
 int ED_area_headersize(void)
 {
-	return (int)(HEADERY * UI_DPI_FAC);
+	/* Accomodate widget and padding. */
+	return U.widget_unit + (int)(UI_DPI_FAC * HEADER_PADDING_Y);
 }
 
 int ED_area_header_alignment_or_fallback(const ScrArea *area, int fallback)
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index d99681fcd5b..78bda66b8ff 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -134,10 +134,10 @@ void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C)
 		                 0, 0, UI_UNIT_X, UI_UNIT_Y, &em->selectmode, 1.0, 0.0, 0, 0,
 		                 TIP_("Vertex select - Shift-Click for multiple modes, Ctrl-Click contracts selection"));
 		uiDefIconButBitS(block, UI_BTYPE_TOGGLE, SCE_SELECT_EDGE, B_SEL_EDGE, ICON_EDGESEL,
-		                 0, 0, ceilf(UI_UNIT_X - UI_DPI_FAC), UI_UNIT_Y, &em->selectmode, 1.0, 0.0, 0, 0,
+		                 0, 0, ceilf(UI_UNIT_X - U.pixelsize), UI_UNIT_Y, &em->selectmode, 1.0, 0.0, 0, 0,
 		                 TIP_("Edge select - Shift-Click for multiple modes, Ctrl-Click expands/contracts selection"));
 		uiDefIconButBitS(block, UI_BTYPE_TOGGLE, SCE_SELECT_FACE, B_SEL_FACE, ICON_FACESEL,
-		                 0, 0, ceilf(UI_UNIT_X - UI_DPI_FAC), UI_UNIT_Y, &em->selectmode, 1.0, 0.0, 0, 0,
+		                 0, 0, ceilf(UI_UNIT_X - U.pixelsize), UI_UNIT_Y, &em->selectmode, 1.0, 0.0, 0, 0,
 		                 TIP_("Face select - Shift-Click for multiple modes, Ctrl-Click expands selection"));
 	}
 }
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index f67ec090381..e0dca9cd646 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -469,9 +469,10 @@ enum {
 	AREA_FLAG_ACTIONZONES_UPDATE = (1 << 8),
 };
 
-#define AREAGRID	4
-#define AREAMINX	32
-#define HEADERY		26
+#define AREAGRID          4
+#define AREAMINX          32
+#define HEADER_PADDING_Y  6
+#define HEADERY           (20 + HEADER_PADDING_Y)
 
 /** #bScreen.flag */
 enum {
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 72f97e7a01f..b12852220a2 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -3713,7 +3713,7 @@ static void rna_def_userdef_view(BlenderRNA *brna)
 
 	/* View  */
 	prop = RNA_def_property(srna, "ui_scale", PROP_FLOAT, PROP_NONE);
-	RNA_def_property_ui_text(prop, "UI Scale", "Changes the size of the fonts and buttons in the interface");
+	RNA_def_property_ui_text(prop, "UI Scale", "Changes the size of the fonts and widgets in the interface");
 	RNA_def_property_range(prop, 0.25f, 4.0f);
 	RNA_def_property_ui_range(prop, 0.5f, 2.0f, 1, 2);
 	RNA_def_property_float_default(prop, 1.0f);
@@ -3722,7 +3722,8 @@ static void rna_def_userdef_view(BlenderRNA *brna)
 	prop = RNA_def_property(srna, "ui_line_width", PROP_ENUM, PROP_NONE);
 	RNA_def_property_enum_items(prop, line_width);
 	RNA_def_property_ui_text(prop, "UI Line Width",
-	                         "Changes the thickness of lines and points in the interface");
+	                         "Changes the thickness of widget outlines, lines and points in the interface, "
+	                         "for high DPI displays");
 	RNA_def_property_update(prop, 0, "rna_userdef_dpi_update");
 
 	/* display */
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 4fc4e391b8a..c432dce0757 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -603,9 +603,13 @@ void WM_window_set_dpi(wmWindow *win)
 	U.pixelsize = pixelsize;
 	U.dpi = dpi / pixelsize;
 	U.virtual_pixel = (pixelsize == 1) ? VIRTUAL_PIXEL_NATIVE : VIRTUAL_PIXEL_DOUBLE;
-	U.widget_unit = (U.pixelsize * U.dpi * 20 + 36) / 72;
 	U.dpi_fac = ((U.pixelsize * (float)U.dpi) / 72.0f);
 
+	/* Set user preferences globals for drawing, and for forward compatibility. */
+	U.widget_unit = (U.pixelsize * U.dpi * 20 + 36) / 72;
+	/* If line thickness differs from scaling factor then adjustments need to be made */
+	U.widget_unit += 2 * ((int)U.pixelsize - (int)U.dpi_fac);
+
 	/* update font drawing */
 	BLF_default_dpi(U.pixelsize * U.dpi);
 }



More information about the Bf-blender-cvs mailing list