Bug 1353596 part 2 - Make GTK's GetFontImpl use aDevPixPerCSSPixel param. r?karlt draft
authorXidorn Quan <me@upsuper.org>
Fri, 07 Apr 2017 18:25:47 +1000
changeset 558251 5ec28dee1411d617399e0c50c17bc24a981f10a3
parent 558250 58928d457006ebedcfcdd382c53256b4632e2b47
child 558252 eb9c495ae99bf8c5760c811d92e54bb1c4d64124
push id52850
push userxquan@mozilla.com
push dateFri, 07 Apr 2017 11:54:10 +0000
reviewerskarlt
bugs1353596
milestone55.0a1
Bug 1353596 part 2 - Make GTK's GetFontImpl use aDevPixPerCSSPixel param. r?karlt MozReview-Commit-ID: 3365NcUhoBc
widget/gtk/ScreenHelperGTK.cpp
widget/gtk/ScreenHelperGTK.h
widget/gtk/nsLookAndFeel.cpp
--- a/widget/gtk/ScreenHelperGTK.cpp
+++ b/widget/gtk/ScreenHelperGTK.cpp
@@ -137,18 +137,18 @@ ScreenHelperGTK::GetGTKMonitorScaleFacto
     // supports a variable scale factor per display.
     GdkScreen *screen = gdk_screen_get_default();
     return sGdkScreenGetMonitorScaleFactorPtr(screen, 0);
   }
 #endif
   return 1;
 }
 
-static float
-GetDefaultCssScale()
+float
+ScreenHelperGTK::GetDefaultCssScale()
 {
   double scale = nsIWidget::DefaultScaleOverride();
   if (scale <= 0.0) {
     scale = ScreenHelperGTK::GetGTKMonitorScaleFactor() * gfxPlatformGtk::GetDPIScale();
   }
   return scale;
 }
 
@@ -170,17 +170,17 @@ MakeScreen(GdkWindow* aRootWindow)
 {
   RefPtr<Screen> screen;
 
   gint scale = ScreenHelperGTK::GetGTKMonitorScaleFactor();
   gint width = gdk_screen_width() * scale;
   gint height = gdk_screen_height() * scale;
   uint32_t pixelDepth = GetGTKPixelDepth();
   DesktopToLayoutDeviceScale contentsScale(1.0);
-  CSSToLayoutDeviceScale defaultCssScale(GetDefaultCssScale());
+  CSSToLayoutDeviceScale defaultCssScale(ScreenHelperGTK::GetDefaultCssScale());
 
   LayoutDeviceIntRect rect;
   LayoutDeviceIntRect availRect;
   rect = availRect = LayoutDeviceIntRect(0, 0, width, height);
 
 #ifdef MOZ_X11
   // We need to account for the taskbar, etc in the available rect.
   // See http://freedesktop.org/Standards/wm-spec/index.html#id2767771
@@ -259,17 +259,17 @@ MakeScreen(GdkWindow* aRootWindow)
 
 static already_AddRefed<Screen>
 MakeScreen(const XineramaScreenInfo& aScreenInfo)
 {
   LayoutDeviceIntRect xineRect(aScreenInfo.x_org, aScreenInfo.y_org,
                                aScreenInfo.width, aScreenInfo.height);
   uint32_t pixelDepth = GetGTKPixelDepth();
   DesktopToLayoutDeviceScale contentsScale(1.0);
-  CSSToLayoutDeviceScale defaultCssScale(GetDefaultCssScale());
+  CSSToLayoutDeviceScale defaultCssScale(ScreenHelperGTK::GetDefaultCssScale());
 
   MOZ_LOG(sScreenLog, LogLevel::Debug, ("New screen [%d %d %d %d %d %f]",
                                         xineRect.x, xineRect.y,
                                         xineRect.width, xineRect.height,
                                         pixelDepth, defaultCssScale.scale));
   RefPtr<Screen> screen = new Screen(xineRect, xineRect,
                                      pixelDepth, pixelDepth,
                                      contentsScale, defaultCssScale);
--- a/widget/gtk/ScreenHelperGTK.h
+++ b/widget/gtk/ScreenHelperGTK.h
@@ -22,16 +22,17 @@ class ScreenHelperGTK final : public Scr
 {
 public:
   ScreenHelperGTK();
   ~ScreenHelperGTK() override;
 
   float GetSystemDefaultScale() override;
 
   static gint GetGTKMonitorScaleFactor();
+  static float GetDefaultCssScale();
 
 #ifdef MOZ_X11
   Atom NetWorkareaAtom() { return mNetWorkareaAtom; }
 #endif
 
   // For internal use from signal callback functions
   void RefreshScreens();
 
--- a/widget/gtk/nsLookAndFeel.cpp
+++ b/widget/gtk/nsLookAndFeel.cpp
@@ -926,24 +926,19 @@ GetSystemFontInfo(GtkWidget *aWidget,
 
     // |size| is now either pixels or pango-points (not Mozilla-points!)
 
     if (!pango_font_description_get_size_is_absolute(desc)) {
         // |size| is in pango-points, so convert to pixels.
         size *= float(gfxPlatformGtk::GetDPI()) / POINTS_PER_INCH_FLOAT;
     }
 
-    // Scale fonts up on HiDPI displays.
-    // This would be done automatically with cairo, but we manually manage
-    // the display scale for platform consistency.
-    size *= ScreenHelperGTK::GetGTKMonitorScaleFactor();
-
-    // |size| is now pixels
-
-    aFontStyle->size = size;
+    // Scale fonts to unzoomed CSS pixel
+    aFontStyle->size = size * ScreenHelperGTK::GetGTKMonitorScaleFactor()
+                            / ScreenHelperGTK::GetDefaultCssScale();
 
     pango_font_description_free(desc);
 }
 
 static void
 GetSystemFontInfo(LookAndFeel::FontID aID,
                   nsString *aFontName,
                   gfxFontStyle *aFontStyle)
@@ -1056,16 +1051,17 @@ nsLookAndFeel::GetFontImpl(FontID aID, n
 
   if (!*isCached) {
     GetSystemFontInfo(aID, cachedFontName, cachedFontStyle);
     *isCached = true;
   }
 
   aFontName = *cachedFontName;
   aFontStyle = *cachedFontStyle;
+  aFontStyle.size *= aDevPixPerCSSPixel;
   return true;
 }
 
 void
 nsLookAndFeel::EnsureInit()
 {
     GdkColor colorValue;
     GdkColor *colorValuePtr;