Changeset 224776 in webkit
- Timestamp:
- Nov 13, 2017 1:42:54 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r224775 r224776 1 2017-11-13 Gabriel Ivascu <givascu@igalia.com> 2 3 [GTK] Automatically adjust font size when gtk-xft-dpi changes 4 https://bugs.webkit.org/show_bug.cgi?id=142673 5 6 Reviewed by Michael Catanzaro. 7 8 * platform/PlatformScreen.h: 9 * platform/gtk/PlatformScreenGtk.cpp: 10 (WebCore::gtkXftDPIChangedCallback): 11 (WebCore::setScreenDPIObserverHandler): 12 * platform/wpe/PlatformScreenWPE.cpp: 13 (WebCore::setScreenDPIObserverHandler): 14 1 15 2017-11-13 Commit Queue <commit-queue@webkit.org> 2 16 -
trunk/Source/WebCore/platform/PlatformScreen.h
r224737 r224776 25 25 26 26 #pragma once 27 28 #if USE(GLIB) 29 #include <wtf/Function.h> 30 #endif 27 31 28 32 #if PLATFORM(MAC) … … 61 65 #if USE(GLIB) 62 66 double screenDPI(); 67 void setScreenDPIObserverHandler(Function<void()>&&); 63 68 #endif 64 69 -
trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp
r224737 r224776 41 41 #include <cmath> 42 42 #include <gtk/gtk.h> 43 #include <wtf/Optional.h> 43 44 44 45 namespace WebCore { … … 113 114 } 114 115 116 static std::optional<Function<void()>> screenDPIObserverHandler; 117 118 static void gtkXftDPIChangedCallback() 119 { 120 if (screenDPIObserverHandler) 121 (*screenDPIObserverHandler)(); 122 } 123 124 void setScreenDPIObserverHandler(Function<void()>&& handler) 125 { 126 static GtkSettings* gtkSettings = gtk_settings_get_default(); 127 static unsigned long gtkXftDpiChangedHandlerID = 0; 128 129 if (!handler) { 130 if (gtkSettings && gtkXftDpiChangedHandlerID) { 131 g_signal_handler_disconnect(gtkSettings, gtkXftDpiChangedHandlerID); 132 gtkXftDpiChangedHandlerID = 0; 133 } 134 return; 135 } 136 137 screenDPIObserverHandler = WTFMove(handler); 138 if (gtkSettings && !gtkXftDpiChangedHandlerID) 139 gtkXftDpiChangedHandlerID = g_signal_connect(gtkSettings, "notify::gtk-xft-dpi", G_CALLBACK(gtkXftDPIChangedCallback), nullptr); 140 } 141 115 142 static GdkScreen* getScreen(GtkWidget* widget) 116 143 { -
trunk/Source/WebCore/platform/wpe/PlatformScreenWPE.cpp
r224737 r224776 61 61 } 62 62 63 void setScreenDPIObserverHandler(Function<void()>&&) 64 { 65 notImplemented(); 66 } 67 63 68 FloatRect screenRect(Widget*) 64 69 { -
trunk/Source/WebKit/ChangeLog
r224772 r224776 1 2017-11-13 Gabriel Ivascu <givascu@igalia.com> 2 3 [GTK] Automatically adjust font size when gtk-xft-dpi changes 4 https://bugs.webkit.org/show_bug.cgi?id=142673 5 6 Reviewed by Michael Catanzaro. 7 8 * UIProcess/API/glib/WebKitSettings.cpp: 9 (webKitSettingsDispose): 10 (webKitSettingsConstructed): 11 (webkit_settings_class_init): 12 1 13 2017-11-13 Chris Dumez <cdumez@apple.com> 2 14 -
trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp
r224737 r224776 80 80 bool allowModalDialogs { false }; 81 81 bool zoomTextOnly { false }; 82 double screenDpi { 96 }; 82 83 }; 83 84 … … 159 160 }; 160 161 162 static void webKitSettingsDispose(GObject* object) 163 { 164 WebCore::setScreenDPIObserverHandler(nullptr); 165 G_OBJECT_CLASS(webkit_settings_parent_class)->dispose(object); 166 } 167 161 168 static void webKitSettingsConstructed(GObject* object) 162 169 { 163 170 G_OBJECT_CLASS(webkit_settings_parent_class)->constructed(object); 164 171 165 WebPreferences* prefs = WEBKIT_SETTINGS(object)->priv->preferences.get(); 172 WebKitSettings* settings = WEBKIT_SETTINGS(object); 173 WebPreferences* prefs = settings->priv->preferences.get(); 166 174 prefs->setShouldRespectImageOrientation(true); 175 176 settings->priv->screenDpi = WebCore::screenDPI(); 177 WebCore::setScreenDPIObserverHandler([settings]() { 178 auto newScreenDpi = WebCore::screenDPI(); 179 if (newScreenDpi == settings->priv->screenDpi) 180 return; 181 182 auto scalingFactor = newScreenDpi / settings->priv->screenDpi; 183 auto prevFontSize = settings->priv->preferences->defaultFontSize(); 184 auto prevMonospaceFontSize = settings->priv->preferences->defaultFixedFontSize(); 185 186 settings->priv->preferences->setDefaultFontSize(std::round(prevFontSize * scalingFactor)); 187 g_object_notify(G_OBJECT(settings), "default-font-size"); 188 189 settings->priv->preferences->setDefaultFixedFontSize(std::round(prevMonospaceFontSize * scalingFactor)); 190 g_object_notify(G_OBJECT(settings), "default-monospace-font-size"); 191 192 settings->priv->screenDpi = newScreenDpi; 193 }); 167 194 } 168 195 … … 513 540 GObjectClass* gObjectClass = G_OBJECT_CLASS(klass); 514 541 gObjectClass->constructed = webKitSettingsConstructed; 542 gObjectClass->dispose = webKitSettingsDispose; 515 543 gObjectClass->set_property = webKitSettingsSetProperty; 516 544 gObjectClass->get_property = webKitSettingsGetProperty; -
trunk/Tools/ChangeLog
r224765 r224776 1 2017-11-13 Gabriel Ivascu <givascu@igalia.com> 2 3 [GTK] Automatically adjust font size when gtk-xft-dpi changes 4 https://bugs.webkit.org/show_bug.cgi?id=142673 5 6 Reviewed by Michael Catanzaro. 7 8 * TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp: 9 (testWebKitSettings): 10 1 11 2017-11-13 Jonathan Bedard <jbedard@apple.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitSettings.cpp
r224737 r224776 169 169 g_assert_cmpuint(webkit_settings_font_size_to_points(8), ==, 6); 170 170 g_assert_cmpuint(webkit_settings_font_size_to_points(24), ==, 18); 171 172 // Test font size on DPI change. The font size value in pixels should scale 173 // accordingly, while the font size value in points should remain the same. 174 if (gtkSettings) { 175 // At 96 DPI, 20 pixels is 15 points. 176 webkit_settings_set_default_font_size(settings, 20); 177 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15); 178 // At 96 DPI, 16 pixels is 12 points. 179 webkit_settings_set_default_monospace_font_size(settings, 16); 180 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12); 181 182 // Set DPI to 120. The scaling factor is 120 / 96 == 1.25. 183 g_object_set(gtkSettings, "gtk-xft-dpi", 120 * 1024, nullptr); 184 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 25); 185 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15); 186 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 20); 187 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12); 188 189 // Set DPI back to 96. The scaling factor is 96 / 120 == 0.8. 190 g_object_set(gtkSettings, "gtk-xft-dpi", 96 * 1024, nullptr); 191 g_assert_cmpuint(webkit_settings_get_default_font_size(settings), ==, 20); 192 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_font_size(settings)), ==, 15); 193 g_assert_cmpuint(webkit_settings_get_default_monospace_font_size(settings), ==, 16); 194 g_assert_cmpuint(webkit_settings_font_size_to_points(webkit_settings_get_default_monospace_font_size(settings)), ==, 12); 195 } 171 196 #endif 172 197
Note: See TracChangeset
for help on using the changeset viewer.