Martin Stransky 92ebef2
diff -up mozilla-release/widget/gtk/nsLookAndFeel.cpp.1144745-2 mozilla-release/widget/gtk/nsLookAndFeel.cpp
Martin Stransky 92ebef2
--- mozilla-release/widget/gtk/nsLookAndFeel.cpp.1144745-2	2015-05-13 10:30:08.204367309 +0200
Martin Stransky 92ebef2
+++ mozilla-release/widget/gtk/nsLookAndFeel.cpp	2015-05-13 10:30:08.208367321 +0200
Martin Stransky 92ebef2
@@ -18,6 +18,7 @@
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
 #include <fontconfig/fontconfig.h>
Martin Stransky 92ebef2
 #include "gfxPlatformGtk.h"
Martin Stransky 92ebef2
+#include "nsScreenGtk.h"
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
 #include "gtkdrawing.h"
Martin Stransky 92ebef2
 #include "nsStyleConsts.h"
Martin Stransky 92ebef2
@@ -742,12 +743,7 @@ GetSystemFontInfo(GtkWidget *aWidget,
Martin Stransky 92ebef2
     // Scale fonts up on HiDPI displays.
Martin Stransky 92ebef2
     // This would be done automatically with cairo, but we manually manage
Martin Stransky 92ebef2
     // the display scale for platform consistency.
Martin Stransky 92ebef2
-    static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*,gint))
Martin Stransky 92ebef2
-        dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
Martin Stransky 92ebef2
-    if (sGdkScreenGetMonitorScaleFactorPtr) {
Martin Stransky 92ebef2
-        GdkScreen *screen = gdk_screen_get_default();
Martin Stransky 92ebef2
-        size *= (*sGdkScreenGetMonitorScaleFactorPtr)(screen, 0);
Martin Stransky 92ebef2
-    }
Martin Stransky 92ebef2
+    size *= nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
     // |size| is now pixels
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-2 mozilla-release/widget/gtk/nsNativeThemeGTK.cpp
Martin Stransky 92ebef2
--- mozilla-release/widget/gtk/nsNativeThemeGTK.cpp.1144745-2	2015-05-13 10:30:08.206367315 +0200
Martin Stransky 92ebef2
+++ mozilla-release/widget/gtk/nsNativeThemeGTK.cpp	2015-05-13 10:30:46.966488584 +0200
Martin Stransky 92ebef2
@@ -6,6 +6,7 @@
Martin Stransky 92ebef2
 #include "nsNativeThemeGTK.h"
Martin Stransky 92ebef2
 #include "nsThemeConstants.h"
Martin Stransky 92ebef2
 #include "gtkdrawing.h"
Martin Stransky 92ebef2
+#include "nsScreenGtk.h"
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
 #include "nsIObserverService.h"
Martin Stransky 92ebef2
 #include "nsIServiceManager.h"
Martin Stransky 92ebef2
@@ -89,23 +90,6 @@ nsNativeThemeGTK::RefreshWidgetWindow(ns
Martin Stransky 92ebef2
   vm->InvalidateAllViews();
Martin Stransky 92ebef2
 }
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
-gint
Martin Stransky 92ebef2
-nsNativeThemeGTK::GdkScaleFactor()
Martin Stransky 92ebef2
-{
Martin Stransky 92ebef2
-#if (MOZ_WIDGET_GTK >= 3)
Martin Stransky 92ebef2
-  // Since GDK 3.10
Martin Stransky 92ebef2
-  static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
Martin Stransky 92ebef2
-      dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
Martin Stransky 92ebef2
-  if (sGdkScreenGetMonitorScaleFactorPtr) {
Martin Stransky 92ebef2
-      // FIXME: In the future, we'll want to fix this for GTK on Wayland which
Martin Stransky 92ebef2
-      // supports a variable scale factor per display.
Martin Stransky 92ebef2
-      GdkScreen *screen = gdk_screen_get_default();
Martin Stransky 92ebef2
-      return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
Martin Stransky 92ebef2
-  }
Martin Stransky 92ebef2
-#endif
Martin Stransky 92ebef2
-    return 1;
Martin Stransky 92ebef2
-}
Martin Stransky 92ebef2
-
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
 static bool IsFrameContentNodeInNamespace(nsIFrame *aFrame, uint32_t aNamespace)
Martin Stransky 92ebef2
 {
Martin Stransky 92ebef2
@@ -796,10 +780,11 @@ nsNativeThemeGTK::GetExtraSizeForWidget(
Martin Stransky 92ebef2
   default:
Martin Stransky 92ebef2
     return false;
Martin Stransky 92ebef2
   }
Martin Stransky 92ebef2
-  aExtra->top *= GdkScaleFactor();
Martin Stransky 92ebef2
-  aExtra->right *= GdkScaleFactor();
Martin Stransky 92ebef2
-  aExtra->bottom *= GdkScaleFactor();
Martin Stransky 92ebef2
-  aExtra->left *= GdkScaleFactor();
Martin Stransky 92ebef2
+  gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
+  aExtra->top *= scale;
Martin Stransky 92ebef2
+  aExtra->right *= scale;
Martin Stransky 92ebef2
+  aExtra->bottom *= scale;
Martin Stransky 92ebef2
+  aExtra->left *= scale;
Martin Stransky 92ebef2
   return true;
Martin Stransky 92ebef2
 }
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
@@ -827,7 +812,7 @@ nsNativeThemeGTK::DrawWidgetBackground(n
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   gfxRect rect = presContext->AppUnitsToGfxUnits(aRect);
Martin Stransky 92ebef2
   gfxRect dirtyRect = presContext->AppUnitsToGfxUnits(aDirtyRect);
Martin Stransky 92ebef2
-  gint scaleFactor = GdkScaleFactor();
Martin Stransky 92ebef2
+  gint scaleFactor = nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   // Align to device pixels where sensible
Martin Stransky 92ebef2
   // to provide crisper and faster drawing.
Martin Stransky 92ebef2
@@ -1066,10 +1051,11 @@ nsNativeThemeGTK::GetWidgetPadding(nsDev
Martin Stransky 92ebef2
         aResult->left += horizontal_padding;
Martin Stransky 92ebef2
         aResult->right += horizontal_padding;
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
-        aResult->top *= GdkScaleFactor();
Martin Stransky 92ebef2
-        aResult->right *= GdkScaleFactor();
Martin Stransky 92ebef2
-        aResult->bottom *= GdkScaleFactor();
Martin Stransky 92ebef2
-        aResult->left *= GdkScaleFactor();
Martin Stransky 92ebef2
+        gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
+        aResult->top *= scale;
Martin Stransky 92ebef2
+        aResult->right *= scale;
Martin Stransky 92ebef2
+        aResult->bottom *= scale;
Martin Stransky 92ebef2
+        aResult->left *= scale;
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
         return true;
Martin Stransky 92ebef2
       }
Martin Stransky 92ebef2
@@ -1332,7 +1318,7 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
Martin Stransky 92ebef2
     break;
Martin Stransky 92ebef2
   }
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
-  *aResult = *aResult * GdkScaleFactor();
Martin Stransky 92ebef2
+  *aResult = *aResult * nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   return NS_OK;
Martin Stransky 92ebef2
 }
Martin Stransky 92ebef2
diff -up mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-2 mozilla-release/widget/gtk/nsNativeThemeGTK.h
Martin Stransky 92ebef2
--- mozilla-release/widget/gtk/nsNativeThemeGTK.h.1144745-2	2015-05-13 10:30:08.206367315 +0200
Martin Stransky 92ebef2
+++ mozilla-release/widget/gtk/nsNativeThemeGTK.h	2015-05-13 10:30:08.209367325 +0200
Martin Stransky 92ebef2
@@ -81,7 +81,6 @@ private:
Martin Stransky 92ebef2
                                nsIntMargin* aExtra);
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   void RefreshWidgetWindow(nsIFrame* aFrame);
Martin Stransky 92ebef2
-  gint GdkScaleFactor();
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   uint8_t mDisabledWidgetTypes[32];
Martin Stransky 92ebef2
   uint8_t mSafeWidgetStates[1024];    // 256 widgets * 32 bits per widget
Martin Stransky 92ebef2
diff -up mozilla-release/widget/gtk/nsScreenGtk.cpp.1144745-2 mozilla-release/widget/gtk/nsScreenGtk.cpp
Martin Stransky 92ebef2
--- mozilla-release/widget/gtk/nsScreenGtk.cpp.1144745-2	2015-05-08 18:55:27.000000000 +0200
Martin Stransky 92ebef2
+++ mozilla-release/widget/gtk/nsScreenGtk.cpp	2015-05-13 10:30:08.209367325 +0200
Martin Stransky 92ebef2
@@ -63,6 +63,23 @@ nsScreenGtk :: GetAvailRect(int32_t *out
Martin Stransky 92ebef2
   
Martin Stransky 92ebef2
 } // GetAvailRect
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
+gint
Martin Stransky 92ebef2
+nsScreenGtk :: GetGtkMonitorScaleFactor()
Martin Stransky 92ebef2
+{
Martin Stransky 92ebef2
+#if (MOZ_WIDGET_GTK >= 3)
Martin Stransky 92ebef2
+  // Since GDK 3.10
Martin Stransky 92ebef2
+  static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
Martin Stransky 92ebef2
+      dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
Martin Stransky 92ebef2
+  if (sGdkScreenGetMonitorScaleFactorPtr) {
Martin Stransky 92ebef2
+      // FIXME: In the future, we'll want to fix this for GTK on Wayland which
Martin Stransky 92ebef2
+      // supports a variable scale factor per display.
Martin Stransky 92ebef2
+      GdkScreen *screen = gdk_screen_get_default();
Martin Stransky 92ebef2
+      return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
Martin Stransky 92ebef2
+  }
Martin Stransky 92ebef2
+#endif
Martin Stransky 92ebef2
+    return 1;
Martin Stransky 92ebef2
+}
Martin Stransky 92ebef2
+
Martin Stransky 92ebef2
 double
Martin Stransky 92ebef2
 nsScreenGtk :: GetDPIScale()
Martin Stransky 92ebef2
 {
Martin Stransky 92ebef2
@@ -127,20 +144,9 @@ nsScreenGtk :: GetColorDepth(int32_t *aC
Martin Stransky 92ebef2
 void
Martin Stransky 92ebef2
 nsScreenGtk :: Init (GdkWindow *aRootWindow)
Martin Stransky 92ebef2
 {
Martin Stransky 92ebef2
-  gint width = gdk_screen_width();
Martin Stransky 92ebef2
-  gint height = gdk_screen_height();
Martin Stransky 92ebef2
-
Martin Stransky 92ebef2
-  // Since GDK 3.10
Martin Stransky 92ebef2
-  static auto sGdkScreenGetMonitorScaleFactorPtr = (gint (*)(GdkScreen*, gint))
Martin Stransky 92ebef2
-      dlsym(RTLD_DEFAULT, "gdk_screen_get_monitor_scale_factor");
Martin Stransky 92ebef2
-  if (sGdkScreenGetMonitorScaleFactorPtr) {
Martin Stransky 92ebef2
-      // FIXME: In the future, we'll want to fix this for GTK on Wayland which
Martin Stransky 92ebef2
-      // supports a variable scale factor per display.
Martin Stransky 92ebef2
-      GdkScreen *screen = gdk_window_get_screen(aRootWindow);
Martin Stransky 92ebef2
-      gint scale = sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
Martin Stransky 92ebef2
-      width *= scale;
Martin Stransky 92ebef2
-      height *= scale;
Martin Stransky 92ebef2
-  }
Martin Stransky 92ebef2
+  gint scale = nsScreenGtk::GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
+  gint width = gdk_screen_width()*scale;
Martin Stransky 92ebef2
+  gint height = gdk_screen_height()*scale;
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
   // We listen for configure events on the root window to pick up
Martin Stransky 92ebef2
   // changes to this rect.  We could listen for "size_changed" signals
Martin Stransky 92ebef2
diff -up mozilla-release/widget/gtk/nsScreenGtk.h.1144745-2 mozilla-release/widget/gtk/nsScreenGtk.h
Martin Stransky 92ebef2
--- mozilla-release/widget/gtk/nsScreenGtk.h.1144745-2	2015-05-08 18:55:27.000000000 +0200
Martin Stransky 92ebef2
+++ mozilla-release/widget/gtk/nsScreenGtk.h	2015-05-13 10:30:08.209367325 +0200
Martin Stransky 92ebef2
@@ -43,7 +43,8 @@ public:
Martin Stransky 92ebef2
   void Init(XineramaScreenInfo *aScreenInfo);
Martin Stransky 92ebef2
 #endif /* MOZ_X11 */
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
-  static double GetDPIScale();
Martin Stransky 92ebef2
+  static gint    GetGtkMonitorScaleFactor();
Martin Stransky 92ebef2
+  static double  GetDPIScale();
Martin Stransky 92ebef2
 
Martin Stransky 92ebef2
 private:
Martin Stransky 92ebef2
   uint32_t mScreenNum;