From bdb4f706597450371dd719709c565b1bc43123d7 Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <fourdan@xfce.org>
Date: Mon, 20 Apr 2020 20:13:57 +0200
Subject: [PATCH] Revert "frame: Fix title align"

Bug: 16711

We need to keep the pango font attributes for the scale with HiDPI.

This reverts commit 34a31e274af2636d7bcb7cba833738ef4ff1be3e.

(cherry picked from commit fbd078082dddb5b27b92fdf5b3d058baf6bd06bc)
---
 src/events.c   |  1 +
 src/frame.c    |  9 ++++++++-
 src/screen.c   | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/screen.h   |  2 ++
 src/settings.c |  2 ++
 5 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/src/events.c b/src/events.c
index 91c0dd6c5..4f668dd24 100644
--- a/src/events.c
+++ b/src/events.c
@@ -2767,6 +2767,7 @@ refresh_font_cb (GObject * obj, GdkEvent * ev, gpointer data)
     for (list = display_info->screens; list; list = g_slist_next (list))
     {
         ScreenInfo *screen_info = (ScreenInfo *) list->data;
+        myScreenUpdateFontHeight (screen_info);
         clientUpdateAllFrames (screen_info, UPDATE_FRAME);
     }
 
diff --git a/src/frame.c b/src/frame.c
index 4d1870425..5df2ec17a 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -205,7 +205,14 @@ frameCreateTitlePixmap (Client * c, int state, int left, int right, xfwmPixmap *
     }
     pango_layout_get_pixel_extents (layout, NULL, &logical_rect);
 
-    title_height = logical_rect.height;
+    title_height = screen_info->font_height;
+    if (!title_height)
+    {
+        /* If for some reason the font height is not known,
+         * use the actual pango layout height.
+         */
+        title_height = logical_rect.height;
+    }
     title_y = voffset + (frameDecorationTop(screen_info) - title_height) / 2;
     if (title_y + title_height > frameDecorationTop(screen_info))
     {
diff --git a/src/screen.c b/src/screen.c
index 25feef1b2..f4daa4722 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -304,6 +304,7 @@ myScreenInit (DisplayInfo *display_info, GdkScreen *gscr, unsigned long event_ma
     screen_info->systray = getSystrayWindow (display_info, screen_info->net_system_tray_selection);
 #endif
 
+    screen_info->font_height = 0;
     screen_info->font_desc = NULL;
     screen_info->pango_attr_list = NULL;
     screen_info->box_gc = None;
@@ -864,3 +865,53 @@ myScreenGetFontDescription (ScreenInfo *screen_info)
     widget = myScreenGetGtkWidget (screen_info);
     return getUIPangoFontDesc (widget);
 }
+
+gboolean
+myScreenUpdateFontHeight (ScreenInfo *screen_info)
+{
+    PangoFontDescription *desc;
+    PangoContext *context;
+    PangoFontMetrics *metrics;
+    PangoAttribute *attr;
+    GtkWidget *widget;
+    gint font_height;
+    gint scale;
+
+    g_return_val_if_fail (screen_info != NULL, FALSE);
+
+    widget = myScreenGetGtkWidget (screen_info);
+    desc = myScreenGetFontDescription (screen_info);
+    context = getUIPangoContext (widget);
+
+    if (desc != NULL && context != NULL)
+    {
+        metrics = pango_context_get_metrics (context, desc, NULL);
+        scale = gtk_widget_get_scale_factor (widget);
+        font_height =
+                 PANGO_PIXELS (pango_font_metrics_get_ascent (metrics) +
+                               pango_font_metrics_get_descent (metrics)) * scale;
+        pango_font_metrics_unref (metrics);
+
+        if (font_height != screen_info->font_height)
+        {
+            screen_info->font_height = font_height;
+
+            if (screen_info->pango_attr_list != NULL)
+            {
+                pango_attr_list_unref (screen_info->pango_attr_list);
+                screen_info->pango_attr_list = NULL;
+            }
+            if (scale != 1)
+            {
+                screen_info->pango_attr_list = pango_attr_list_new ();
+                attr = pango_attr_scale_new (scale);
+                pango_attr_list_insert (screen_info->pango_attr_list, attr);
+            }
+        }
+
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
diff --git a/src/screen.h b/src/screen.h
index 3c49a434a..74b927992 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -115,6 +115,7 @@ struct _ScreenInfo
     GC box_gc;
 
     /* Title font */
+    gint font_height;
     PangoFontDescription *font_desc;
     PangoAttrList *pango_attr_list;
 
@@ -296,6 +297,7 @@ void                     myScreenFindMonitorAtPoint             (ScreenInfo *,
                                                                  gint,
                                                                  GdkRectangle *);
 PangoFontDescription *   myScreenGetFontDescription             (ScreenInfo *);
+gboolean                 myScreenUpdateFontHeight               (ScreenInfo *);
 void                     myScreenGetXineramaMonitorGeometry     (ScreenInfo *,
                                                                  gint,
                                                                  GdkRectangle *);
diff --git a/src/settings.c b/src/settings.c
index c74194b80..ccb14319f 100644
--- a/src/settings.c
+++ b/src/settings.c
@@ -465,11 +465,13 @@ loadTheme (ScreenInfo *screen_info, Settings *rc)
         g_value_unset (&tmp_val2);
     }
 
+    screen_info->font_height = 0;
     font = getStringValue ("title_font", rc);
     if (font && strlen (font))
     {
         screen_info->font_desc = pango_font_description_from_string (font);
     }
+    myScreenUpdateFontHeight (screen_info);
 
     gdk_rgba_parse (&screen_info->title_colors[ACTIVE], getStringValue ("active_text_color", rc));
     gdk_rgba_parse (&screen_info->title_colors[INACTIVE], getStringValue ("inactive_text_color", rc));
-- 
GitLab