Work around small DPI resulting in blurry fonts, clamping auto DPI to minimum 96.

Since we added auto DPI on Linux, on some systems the UI draws smaller than before
due to the monitor reporting DPI values like 88. Blender font drawing gives quite
blurry results for such slightly smaller DPI, apparently because the builtin font
isn't really designed for such small font sizes. As a workaround this clamps the
auto DPI to minimum 96, since the main case we are interested in supporting is
high DPI displays anyway.

Differential Revision: https://developer.blender.org/D2740
This commit is contained in:
Brecht Van Lommel 2017-07-17 14:10:57 +02:00
parent d268cad06a
commit 9bbb197d14
2 changed files with 13 additions and 2 deletions

View File

@ -3926,12 +3926,18 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "dpi", PROP_INT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "DPI", "Font size and resolution for display");
RNA_def_property_ui_text(prop, "DPI",
"DPI for addons to use when drawing custom user interface elements. Controlled by "
"operating system settings and Blender UI scale, with a reference value of 72 DPI. "
"Note that since this value includes a user defined scale, it is not always the "
"actual monitor DPI.");
prop = RNA_def_property(srna, "pixel_size", PROP_FLOAT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_float_sdna(prop, NULL, "pixelsize");
RNA_def_property_ui_text(prop, "Pixel Size", "");
RNA_def_property_ui_text(prop, "Pixel Size",
"Suggested line thickness and point size in pixels, for addons drawing custom user "
"interface elements. Controlled by operating system settings and Blender UI scale.");
prop = RNA_def_property(srna, "font_path_ui", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "font_path_ui");

View File

@ -379,6 +379,11 @@ void WM_window_set_dpi(wmWindow *win)
{
int auto_dpi = GHOST_GetDPIHint(win->ghostwin);
/* Clamp auto DPI to 96, since our font/interface drawing does not work well
* with lower sizes. The main case we are interested in supporting is higher
* DPI. If a smaller UI is desired it is still possible to adjust UI scale. */
auto_dpi = MAX2(auto_dpi, 96);
/* Lazily init UI scale size, preserving backwards compatibility by
* computing UI scale from ratio of previous DPI and auto DPI */
if (U.ui_scale == 0) {