Changeset 224872 in webkit


Ignore:
Timestamp:
Nov 15, 2017 4:06:43 AM (6 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK] Automatically adjust font size when gtk-xft-dpi changes
https://bugs.webkit.org/show_bug.cgi?id=142673

Some follow-up fixes for the previous patch.

Patch by Gabriel Ivascu <givascu@igalia.com> on 2017-11-15
Reviewed by Carlos Garcia Campos.

Source/WebCore:

  • platform/PlatformScreen.h:
  • platform/gtk/PlatformScreenGtk.cpp:

(WebCore::screenDPIObserverHandlersMap):
(WebCore::gtkXftDPIChangedCallback):
(WebCore::setScreenDPIObserverHandler):

  • platform/wpe/PlatformScreenWPE.cpp:

(WebCore::setScreenDPIObserverHandler):

Source/WebKit:

  • UIProcess/API/glib/WebKitSettings.cpp:

(webKitSettingsDispose):
(webKitSettingsConstructed):

Location:
trunk/Source
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r224871 r224872  
     12017-11-15  Gabriel Ivascu  <givascu@igalia.com>
     2
     3        [GTK] Automatically adjust font size when gtk-xft-dpi changes
     4        https://bugs.webkit.org/show_bug.cgi?id=142673
     5
     6        Some follow-up fixes for the previous patch.
     7
     8        Reviewed by Carlos Garcia Campos.
     9
     10        * platform/PlatformScreen.h:
     11        * platform/gtk/PlatformScreenGtk.cpp:
     12        (WebCore::screenDPIObserverHandlersMap):
     13        (WebCore::gtkXftDPIChangedCallback):
     14        (WebCore::setScreenDPIObserverHandler):
     15        * platform/wpe/PlatformScreenWPE.cpp:
     16        (WebCore::setScreenDPIObserverHandler):
     17
    1182017-11-14  Nan Wang  <n_wang@apple.com>
    219
  • trunk/Source/WebCore/platform/PlatformScreen.h

    r224776 r224872  
    6565#if USE(GLIB)
    6666double screenDPI();
    67 void setScreenDPIObserverHandler(Function<void()>&&);
     67void setScreenDPIObserverHandler(Function<void()>&&, void*);
    6868#endif
    6969
  • trunk/Source/WebCore/platform/gtk/PlatformScreenGtk.cpp

    r224776 r224872  
    4141#include <cmath>
    4242#include <gtk/gtk.h>
    43 #include <wtf/Optional.h>
     43#include <wtf/HashMap.h>
     44#include <wtf/NeverDestroyed.h>
    4445
    4546namespace WebCore {
     
    114115}
    115116
    116 static std::optional<Function<void()>> screenDPIObserverHandler;
     117static WTF::HashMap<void*, Function<void()>>& screenDPIObserverHandlersMap()
     118{
     119    static WTF::NeverDestroyed<WTF::HashMap<void*, Function<void()>>> handlersMap;
     120    return handlersMap;
     121}
    117122
    118123static void gtkXftDPIChangedCallback()
    119124{
    120     if (screenDPIObserverHandler)
    121         (*screenDPIObserverHandler)();
     125    for (const auto& keyValuePair : screenDPIObserverHandlersMap())
     126        keyValuePair.value();
    122127}
    123128
    124 void setScreenDPIObserverHandler(Function<void()>&& handler)
     129void setScreenDPIObserverHandler(Function<void()>&& handler, void* context)
    125130{
    126131    static GtkSettings* gtkSettings = gtk_settings_get_default();
    127132    static unsigned long gtkXftDpiChangedHandlerID = 0;
    128133
    129     if (!handler) {
    130         if (gtkSettings && gtkXftDpiChangedHandlerID) {
    131             g_signal_handler_disconnect(gtkSettings, gtkXftDpiChangedHandlerID);
    132             gtkXftDpiChangedHandlerID = 0;
    133         }
     134    if (!gtkSettings)
    134135        return;
     136
     137    if (handler)
     138        screenDPIObserverHandlersMap().set(context, WTFMove(handler));
     139    else
     140        screenDPIObserverHandlersMap().remove(context);
     141
     142    if (!screenDPIObserverHandlersMap().isEmpty()) {
     143        if (!gtkXftDpiChangedHandlerID)
     144            gtkXftDpiChangedHandlerID = g_signal_connect(gtkSettings, "notify::gtk-xft-dpi", G_CALLBACK(gtkXftDPIChangedCallback), nullptr);
     145    } else if (gtkXftDpiChangedHandlerID) {
     146        g_signal_handler_disconnect(gtkSettings, gtkXftDpiChangedHandlerID);
     147        gtkXftDpiChangedHandlerID = 0;
    135148    }
    136 
    137     screenDPIObserverHandler = WTFMove(handler);
    138     if (gtkSettings && !gtkXftDpiChangedHandlerID)
    139         gtkXftDpiChangedHandlerID = g_signal_connect(gtkSettings, "notify::gtk-xft-dpi", G_CALLBACK(gtkXftDPIChangedCallback), nullptr);
    140149}
    141150
  • trunk/Source/WebCore/platform/wpe/PlatformScreenWPE.cpp

    r224776 r224872  
    6161}
    6262
    63 void setScreenDPIObserverHandler(Function<void()>&&)
     63void setScreenDPIObserverHandler(Function<void()>&&, void*)
    6464{
    6565    notImplemented();
  • trunk/Source/WebKit/ChangeLog

    r224871 r224872  
     12017-11-15  Gabriel Ivascu  <givascu@igalia.com>
     2
     3        [GTK] Automatically adjust font size when gtk-xft-dpi changes
     4        https://bugs.webkit.org/show_bug.cgi?id=142673
     5
     6        Some follow-up fixes for the previous patch.
     7
     8        Reviewed by Carlos Garcia Campos.
     9
     10        * UIProcess/API/glib/WebKitSettings.cpp:
     11        (webKitSettingsDispose):
     12        (webKitSettingsConstructed):
     13
    1142017-11-14  Nan Wang  <n_wang@apple.com>
    215
  • trunk/Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp

    r224776 r224872  
    162162static void webKitSettingsDispose(GObject* object)
    163163{
    164     WebCore::setScreenDPIObserverHandler(nullptr);
     164    WebCore::setScreenDPIObserverHandler(nullptr, object);
    165165    G_OBJECT_CLASS(webkit_settings_parent_class)->dispose(object);
    166166}
     
    181181
    182182        auto scalingFactor = newScreenDpi / settings->priv->screenDpi;
    183         auto prevFontSize = settings->priv->preferences->defaultFontSize();
    184         auto prevMonospaceFontSize = settings->priv->preferences->defaultFixedFontSize();
    185 
    186         settings->priv->preferences->setDefaultFontSize(std::round(prevFontSize * scalingFactor));
    187         g_object_notify(G_OBJECT(settings), "default-font-size");
    188 
    189         settings->priv->preferences->setDefaultFixedFontSize(std::round(prevMonospaceFontSize * scalingFactor));
    190         g_object_notify(G_OBJECT(settings), "default-monospace-font-size");
    191 
     183        auto fontSize = settings->priv->preferences->defaultFontSize();
     184        auto monospaceFontSize = settings->priv->preferences->defaultFixedFontSize();
    192185        settings->priv->screenDpi = newScreenDpi;
    193     });
     186
     187        g_object_freeze_notify(G_OBJECT(settings));
     188        webkit_settings_set_default_font_size(settings, std::round(fontSize * scalingFactor));
     189        webkit_settings_set_default_monospace_font_size(settings, std::round(monospaceFontSize * scalingFactor));
     190        g_object_thaw_notify(G_OBJECT(settings));
     191    }, object);
    194192}
    195193
Note: See TracChangeset for help on using the changeset viewer.