chromium: fix build with gtk2

This commit is contained in:
Sascha Kuehndel (InuSasha) 2017-12-14 16:48:20 +01:00
parent 36a44f5e66
commit b2b65f66e3
No known key found for this signature in database
GPG Key ID: 15FED89617B88D1B

View File

@ -0,0 +1,63 @@
diff --git a/chrome/browser/ui/libgtkui/gtk_ui.cc b/chrome/browser/ui/libgtkui/gtk_ui.cc
index cef1ef0..7df1d0c 100644
--- a/chrome/browser/ui/libgtkui/gtk_ui.cc
+++ b/chrome/browser/ui/libgtkui/gtk_ui.cc
@@ -315,15 +315,52 @@
return params;
}
+float GtkDpiToScaleFactor(int dpi) {
+ // GTK multiplies the DPI by 1024 before storing it.
+ return dpi / (1024 * kDefaultDPI);
+}
+
+gint GetGdkScreenSettingInt(const char* setting_name) {
+ GValue value = G_VALUE_INIT;
+ g_value_init(&value, G_TYPE_INT);
+ if (!gdk_screen_get_setting(gdk_screen_get_default(), setting_name, &value))
+ return -1;
+ return g_value_get_int(&value);
+}
+
+float GetScaleFromGdkScreenSettings() {
+ gint window_scale = GetGdkScreenSettingInt("gdk-window-scaling-factor");
+ if (window_scale <= 0)
+ return -1;
+ gint font_dpi = GetGdkScreenSettingInt("gdk-unscaled-dpi");
+ if (font_dpi <= 0)
+ return -1;
+ return window_scale * GtkDpiToScaleFactor(font_dpi);
+}
+
+float GetScaleFromXftDPI() {
+ GtkSettings* gtk_settings = gtk_settings_get_default();
+ CHECK(gtk_settings);
+ gint gtk_dpi = -1;
+ g_object_get(gtk_settings, "gtk-xft-dpi", &gtk_dpi, nullptr);
+ if (gtk_dpi <= 0)
+ return -1;
+ return GtkDpiToScaleFactor(gtk_dpi);
+}
+
float GetRawDeviceScaleFactor() {
if (display::Display::HasForceDeviceScaleFactor())
return display::Display::GetForcedDeviceScaleFactor();
- GdkScreen* screen = gdk_screen_get_default();
- gint scale = gdk_screen_get_monitor_scale_factor(
- screen, gdk_screen_get_primary_monitor(screen));
- gdouble resolution = gdk_screen_get_resolution(screen);
- return resolution <= 0 ? scale : resolution * scale / kDefaultDPI;
+ float scale = GetScaleFromGdkScreenSettings();
+ if (scale > 0)
+ return scale;
+
+ scale = GetScaleFromXftDPI();
+ if (scale > 0)
+ return scale;
+
+ return 1;
}
views::LinuxUI::NonClientMiddleClickAction GetDefaultMiddleClickAction() {