Modified: trunk/Source/WebKit/gtk/ChangeLog (109516 => 109517)
--- trunk/Source/WebKit/gtk/ChangeLog 2012-03-02 06:50:49 UTC (rev 109516)
+++ trunk/Source/WebKit/gtk/ChangeLog 2012-03-02 07:33:24 UTC (rev 109517)
@@ -1,3 +1,23 @@
+2012-03-01 Carlos Garcia Campos <[email protected]>
+
+ [GTK] Simplify the code to adjust font sizes depending on screen DPI
+ https://bugs.webkit.org/show_bug.cgi?id=80032
+
+ Reviewed by Martin Robinson.
+
+ * webkit/webkitwebview.cpp:
+ (screenDPI): Helper function to get the DPI of a given
+ GdkScreen. Added also fallback code when gdk_screen_resolution
+ returns -1.
+ (webViewGetDPI): Use screenDPI() from WebCore.
+ (webViewConvertFontSizeToPixels): This is the existing
+ pixelsFromSize(), renamed and moved to be used also in
+ webkit_web_view_screen_changed().
+ (webkit_web_view_screen_changed): Use
+ webViewConvertFontSizeToPixels() instead of duplicating the code.
+ (webkit_web_view_settings_notify): Use
+ webViewConvertFontSizeToPixels() instead of pixelsFromSize().
+
2012-02-27 Vincent Untz <[email protected]>> and Gustavo Noronha Silva <[email protected]>
Build fix for building with GTK+ 2.x.
Modified: trunk/Source/WebKit/gtk/webkit/webkitwebview.cpp (109516 => 109517)
--- trunk/Source/WebKit/gtk/webkit/webkitwebview.cpp 2012-03-02 06:50:49 UTC (rev 109516)
+++ trunk/Source/WebKit/gtk/webkit/webkitwebview.cpp 2012-03-02 07:33:24 UTC (rev 109517)
@@ -1416,6 +1416,19 @@
return axRoot;
}
+static double screenDPI(GdkScreen* screen)
+{
+ // gdk_screen_get_resolution() returns -1 when no DPI is set.
+ double dpi = gdk_screen_get_resolution(screen);
+ if (dpi != -1)
+ return dpi;
+
+ static const double kMillimetresPerInch = 25.4;
+ double diagonalSizeInPixels = hypot(gdk_screen_get_width(screen), gdk_screen_get_height(screen));
+ double diagonalSizeInInches = hypot(gdk_screen_get_width_mm(screen), gdk_screen_get_height_mm(screen)) / kMillimetresPerInch;
+ return diagonalSizeInPixels / diagonalSizeInInches;
+}
+
static gdouble webViewGetDPI(WebKitWebView* webView)
{
if (webView->priv->webSettings->priv->enforce96DPI)
@@ -1423,12 +1436,12 @@
static const double defaultDPI = 96;
GdkScreen* screen = gtk_widget_has_screen(GTK_WIDGET(webView)) ? gtk_widget_get_screen(GTK_WIDGET(webView)) : gdk_screen_get_default();
- if (!screen)
- return defaultDPI;
+ return screen ? screenDPI(screen) : defaultDPI;
+}
- // gdk_screen_get_resolution() returns -1 when no DPI is set.
- gdouble DPI = gdk_screen_get_resolution(screen);
- return DPI != -1 ? DPI : defaultDPI;
+static inline gint webViewConvertFontSizeToPixels(WebKitWebView* webView, double fontSize)
+{
+ return fontSize / 72.0 * webViewGetDPI(webView);
}
static void webkit_web_view_screen_changed(GtkWidget* widget, GdkScreen* previousScreen)
@@ -1441,8 +1454,6 @@
WebKitWebSettings* webSettings = priv->webSettings.get();
Settings* settings = core(webView)->settings();
- gdouble DPI = webViewGetDPI(webView);
-
guint defaultFontSize, defaultMonospaceFontSize, minimumFontSize, minimumLogicalFontSize;
g_object_get(webSettings,
@@ -1452,10 +1463,10 @@
"minimum-logical-font-size", &minimumLogicalFontSize,
NULL);
- settings->setDefaultFontSize(defaultFontSize / 72.0 * DPI);
- settings->setDefaultFixedFontSize(defaultMonospaceFontSize / 72.0 * DPI);
- settings->setMinimumFontSize(minimumFontSize / 72.0 * DPI);
- settings->setMinimumLogicalFontSize(minimumLogicalFontSize / 72.0 * DPI);
+ settings->setDefaultFontSize(webViewConvertFontSizeToPixels(webView, defaultFontSize));
+ settings->setDefaultFixedFontSize(webViewConvertFontSizeToPixels(webView, defaultMonospaceFontSize));
+ settings->setMinimumFontSize(webViewConvertFontSizeToPixels(webView, minimumFontSize));
+ settings->setMinimumLogicalFontSize(webViewConvertFontSizeToPixels(webView, minimumLogicalFontSize));
}
static void webkit_web_view_drag_end(GtkWidget* widget, GdkDragContext* context)
@@ -3336,11 +3347,6 @@
webkit_web_view_screen_changed(GTK_WIDGET(webView), NULL);
}
-static inline gint pixelsFromSize(WebKitWebView* webView, gint size)
-{
- return size / 72.0 * webViewGetDPI(webView);
-}
-
static void webkit_web_view_settings_notify(WebKitWebSettings* webSettings, GParamSpec* pspec, WebKitWebView* webView)
{
Settings* settings = core(webView)->settings();
@@ -3365,13 +3371,13 @@
else if (name == g_intern_string("serif-font-family"))
settings->setSerifFontFamily(g_value_get_string(&value));
else if (name == g_intern_string("default-font-size"))
- settings->setDefaultFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
+ settings->setDefaultFontSize(webViewConvertFontSizeToPixels(webView, g_value_get_int(&value)));
else if (name == g_intern_string("default-monospace-font-size"))
- settings->setDefaultFixedFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
+ settings->setDefaultFixedFontSize(webViewConvertFontSizeToPixels(webView, g_value_get_int(&value)));
else if (name == g_intern_string("minimum-font-size"))
- settings->setMinimumFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
+ settings->setMinimumFontSize(webViewConvertFontSizeToPixels(webView, g_value_get_int(&value)));
else if (name == g_intern_string("minimum-logical-font-size"))
- settings->setMinimumLogicalFontSize(pixelsFromSize(webView, g_value_get_int(&value)));
+ settings->setMinimumLogicalFontSize(webViewConvertFontSizeToPixels(webView, g_value_get_int(&value)));
else if (name == g_intern_string("enforce-96-dpi"))
webkit_web_view_screen_changed(GTK_WIDGET(webView), NULL);
else if (name == g_intern_string("auto-load-images"))