Changeset 245072 in webkit


Ignore:
Timestamp:
May 8, 2019 3:24:56 PM (5 years ago)
Author:
timothy@apple.com
Message:

Add plumbing for inactive system colors in RenderTheme cache.
https://bugs.webkit.org/show_bug.cgi?id=197699
rdar://problem/49406936

Reviewed by Tim Horton.

Source/WebCore:

  • css/StyleColor.h:
  • page/Page.cpp:

(WebCore::Page::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.

  • page/Page.h:

(WebCore::Page::useInactiveAppearance const):

  • rendering/RenderTheme.cpp:

(WebCore::RenderTheme::purgeCaches):
(WebCore::RenderTheme::platformColorsDidChange):
(WebCore::RenderTheme::colorCache const):

  • rendering/RenderTheme.h:
  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::setUseDarkAppearanceInternal):

Source/WebKit:

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):

  • Shared/WebPageCreationParameters.h:
  • UIProcess/Cocoa/WebViewImpl.h:
  • UIProcess/Cocoa/WebViewImpl.mm:

(WebKit::WebViewImpl::effectiveAppearanceIsInactive):

  • UIProcess/PageClient.h:

(WebKit::PageClient::effectiveAppearanceIsInactive const):

  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::creationParameters):
(WebKit::WebPageProxy::useInactiveAppearance const):
(WebKit::WebPageProxy::effectiveAppearanceDidChange):

  • UIProcess/WebPageProxy.h:
  • UIProcess/mac/PageClientImplMac.h:
  • UIProcess/mac/PageClientImplMac.mm:

(WebKit::PageClientImpl::effectiveAppearanceIsInactive const):

  • WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:

(WKBundlePageSetUseDarkAppearance):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::m_shrinkToFitContentTimer):
(WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
  • WebProcess/WebPage/gtk/WebPageGtk.cpp:

(WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.

Source/WebKitLegacy/mac:

  • WebView/WebView.mm:

(-[WebView _commonInitializationWithFrameName:groupName:]):
(-[WebView _setUseDarkAppearance:]):
(-[WebView _useInactiveAppearance]):
(-[WebView _setUseInactiveAppearance:]):
(-[WebView _setUseDarkAppearance:useInactiveAppearance:]):
(-[WebView _effectiveAppearanceIsInactive]):
(-[WebView viewDidChangeEffectiveAppearance]):

  • WebView/WebViewPrivate.h:
Location:
trunk/Source
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r245068 r245072  
     12019-05-08  Timothy Hatcher  <timothy@apple.com>
     2
     3        Add plumbing for inactive system colors in RenderTheme cache.
     4        https://bugs.webkit.org/show_bug.cgi?id=197699
     5        rdar://problem/49406936
     6
     7        Reviewed by Tim Horton.
     8
     9        * css/StyleColor.h:
     10        * page/Page.cpp:
     11        (WebCore::Page::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.
     12        * page/Page.h:
     13        (WebCore::Page::useInactiveAppearance const):
     14        * rendering/RenderTheme.cpp:
     15        (WebCore::RenderTheme::purgeCaches):
     16        (WebCore::RenderTheme::platformColorsDidChange):
     17        (WebCore::RenderTheme::colorCache const):
     18        * rendering/RenderTheme.h:
     19        * testing/InternalSettings.cpp:
     20        (WebCore::InternalSettings::setUseDarkAppearanceInternal):
     21
    1222019-05-08  Robin Morisset  <rmorisset@apple.com>
    223
  • trunk/Source/WebCore/css/StyleColor.h

    r233552 r245072  
    5555        ForVisitedLink = 1 << 0,
    5656        UseSystemAppearance = 1 << 1,
    57         UseDarkAppearance = 1 << 2
     57        UseDarkAppearance = 1 << 2,
     58        UseInactiveAppearance = 1 << 3
    5859    };
    5960
  • trunk/Source/WebCore/page/Page.cpp

    r244998 r245072  
    27272727}
    27282728
    2729 void Page::setUseDarkAppearance(bool value)
     2729void Page::effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance)
    27302730{
    27312731#if HAVE(OS_DARK_MODE_SUPPORT)
    2732     if (m_useDarkAppearance == value)
    2733         return;
    2734 
    2735     m_useDarkAppearance = value;
    2736 
    2737     InspectorInstrumentation::defaultAppearanceDidChange(*this, value);
     2732    if (m_useDarkAppearance == useDarkAppearance && m_useInactiveAppearance == useInactiveAppearance)
     2733        return;
     2734
     2735    m_useDarkAppearance = useDarkAppearance;
     2736    m_useInactiveAppearance = useInactiveAppearance;
     2737
     2738    InspectorInstrumentation::defaultAppearanceDidChange(*this, useDarkAppearance);
    27382739
    27392740    appearanceDidChange();
    27402741#else
    2741     UNUSED_PARAM(value);
     2742    UNUSED_PARAM(useDarkAppearance);
     2743
     2744    if (m_useInactiveAppearance == useInactiveAppearance)
     2745        return;
     2746
     2747    m_useInactiveAppearance = useInactiveAppearance;
     2748
     2749    appearanceDidChange();
    27422750#endif
    27432751}
  • trunk/Source/WebCore/page/Page.h

    r244998 r245072  
    381381   
    382382    WEBCORE_EXPORT bool useDarkAppearance() const;
    383     WEBCORE_EXPORT void setUseDarkAppearance(bool);
     383    bool useInactiveAppearance() const { return m_useInactiveAppearance; }
     384    WEBCORE_EXPORT void effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance);
    384385    bool defaultUseDarkAppearance() const { return m_useDarkAppearance; }
    385386    void setUseDarkAppearanceOverride(Optional<bool>);
     
    835836   
    836837    bool m_useSystemAppearance { false };
     838    bool m_useInactiveAppearance { false };
    837839    bool m_useDarkAppearance { false };
    838840    Optional<bool> m_useDarkAppearanceOverride;
  • trunk/Source/WebCore/rendering/RenderTheme.cpp

    r242308 r245072  
    12131213void RenderTheme::purgeCaches()
    12141214{
    1215     m_colorCache = ColorCache();
    1216     m_darkColorCache = ColorCache();
     1215    m_colorCacheMap.clear();
    12171216}
    12181217
    12191218void RenderTheme::platformColorsDidChange()
    12201219{
    1221     m_colorCache = ColorCache();
    1222     m_darkColorCache = ColorCache();
     1220    m_colorCacheMap.clear();
    12231221
    12241222    Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment();
     
    12271225auto RenderTheme::colorCache(OptionSet<StyleColor::Options> options) const -> ColorCache&
    12281226{
    1229     if (options.contains(StyleColor::Options::UseDarkAppearance))
    1230         return m_darkColorCache;
    1231     return m_colorCache;
     1227    auto optionsIgnoringVisitedLink = options;
     1228    optionsIgnoringVisitedLink.remove(StyleColor::Options::ForVisitedLink);
     1229
     1230    return m_colorCacheMap.ensure(optionsIgnoringVisitedLink.toRaw(), [] {
     1231        return ColorCache();
     1232    }).iterator->value;
    12321233}
    12331234
  • trunk/Source/WebCore/rendering/RenderTheme.h

    r240628 r245072  
    442442
    443443private:
    444     mutable ColorCache m_colorCache;
    445     mutable ColorCache m_darkColorCache;
     444    mutable HashMap<uint8_t, ColorCache, DefaultHash<uint8_t>::Hash, WTF::UnsignedWithZeroKeyHashTraits<uint8_t>> m_colorCacheMap;
    446445};
    447446
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r245062 r245072  
    549549#endif
    550550    ASSERT(m_page);
    551     m_page->setUseDarkAppearance(useDarkAppearance);
     551    m_page->effectiveAppearanceDidChange(useDarkAppearance, m_page->useInactiveAppearance());
    552552}
    553553
  • trunk/Source/WebKit/ChangeLog

    r245069 r245072  
     12019-05-08  Timothy Hatcher  <timothy@apple.com>
     2
     3        Add plumbing for inactive system colors in RenderTheme cache.
     4        https://bugs.webkit.org/show_bug.cgi?id=197699
     5        rdar://problem/49406936
     6
     7        Reviewed by Tim Horton.
     8
     9        * Shared/WebPageCreationParameters.cpp:
     10        (WebKit::WebPageCreationParameters::encode const):
     11        (WebKit::WebPageCreationParameters::decode):
     12        * Shared/WebPageCreationParameters.h:
     13        * UIProcess/Cocoa/WebViewImpl.h:
     14        * UIProcess/Cocoa/WebViewImpl.mm:
     15        (WebKit::WebViewImpl::effectiveAppearanceIsInactive):
     16        * UIProcess/PageClient.h:
     17        (WebKit::PageClient::effectiveAppearanceIsInactive const):
     18        * UIProcess/WebPageProxy.cpp:
     19        (WebKit::WebPageProxy::creationParameters):
     20        (WebKit::WebPageProxy::useInactiveAppearance const):
     21        (WebKit::WebPageProxy::effectiveAppearanceDidChange):
     22        * UIProcess/WebPageProxy.h:
     23        * UIProcess/mac/PageClientImplMac.h:
     24        * UIProcess/mac/PageClientImplMac.mm:
     25        (WebKit::PageClientImpl::effectiveAppearanceIsInactive const):
     26        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
     27        (WKBundlePageSetUseDarkAppearance):
     28        * WebProcess/WebPage/WebPage.cpp:
     29        (WebKit::m_shrinkToFitContentTimer):
     30        (WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.
     31        * WebProcess/WebPage/WebPage.h:
     32        * WebProcess/WebPage/WebPage.messages.in:
     33        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
     34        (WebKit::WebPage::effectiveAppearanceDidChange): Renamed from setUseDarkAppearance.
     35
    1362019-05-08  Chris Dumez  <cdumez@apple.com>
    237
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r244151 r245072  
    7878    encoder << isProcessSwap;
    7979    encoder << useDarkAppearance;
     80    encoder << useInactiveAppearance;
    8081
    8182#if PLATFORM(MAC)
     
    248249    if (!decoder.decode(parameters.useDarkAppearance))
    249250        return WTF::nullopt;
     251    if (!decoder.decode(parameters.useInactiveAppearance))
     252        return WTF::nullopt;
    250253
    251254#if PLATFORM(MAC)
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

    r244151 r245072  
    137137
    138138    bool useDarkAppearance { false };
     139    bool useInactiveAppearance { false };
    139140
    140141#if PLATFORM(MAC)
  • trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h

    r242840 r245072  
    599599    void effectiveAppearanceDidChange();
    600600    bool effectiveAppearanceIsDark();
     601    bool effectiveAppearanceIsInactive();
    601602
    602603    void takeFocus(WebCore::FocusDirection);
  • trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm

    r244920 r245072  
    53175317}
    53185318
     5319bool WebViewImpl::effectiveAppearanceIsInactive()
     5320{
     5321    // FIXME: Use the window isKeyWindow state or view first responder status?
     5322    return false;
     5323}
     5324
    53195325} // namespace WebKit
    53205326
  • trunk/Source/WebKit/UIProcess/PageClient.h

    r244559 r245072  
    328328
    329329    virtual bool effectiveAppearanceIsDark() const { return false; }
     330    virtual bool effectiveAppearanceIsInactive() const { return false; }
    330331
    331332    virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) = 0;
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r245062 r245072  
    71067106    parameters.controlledByAutomation = m_controlledByAutomation;
    71077107    parameters.useDarkAppearance = useDarkAppearance();
     7108    parameters.useInactiveAppearance = useInactiveAppearance();
    71087109#if PLATFORM(MAC)
    71097110    parameters.colorSpace = pageClient().colorSpace();
     
    85938594}
    85948595
     8596bool WebPageProxy::useInactiveAppearance() const
     8597{
     8598    return pageClient().effectiveAppearanceIsInactive();
     8599}
     8600
    85958601void WebPageProxy::effectiveAppearanceDidChange()
    85968602{
     
    85988604        return;
    85998605
    8600     m_process->send(Messages::WebPage::SetUseDarkAppearance(useDarkAppearance()), m_pageID);
     8606    m_process->send(Messages::WebPage::EffectiveAppearanceDidChange(useDarkAppearance(), useInactiveAppearance()), m_pageID);
    86018607}
    86028608
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r245062 r245072  
    944944    void effectiveAppearanceDidChange();
    945945    bool useDarkAppearance() const;
     946    bool useInactiveAppearance() const;
    946947
    947948#if PLATFORM(COCOA)
  • trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.h

    r243847 r245072  
    242242    WebCore::UserInterfaceLayoutDirection userInterfaceLayoutDirection() override;
    243243    bool effectiveAppearanceIsDark() const override;
     244    bool effectiveAppearanceIsInactive() const override;
    244245
    245246#if ENABLE(DRAG_SUPPORT)
  • trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm

    r243847 r245072  
    945945}
    946946
     947bool PageClientImpl::effectiveAppearanceIsInactive() const
     948{
     949    return m_impl->effectiveAppearanceIsInactive();
     950}
     951
    947952void PageClientImpl::takeFocus(WebCore::FocusDirection direction)
    948953{
  • trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp

    r244675 r245072  
    594594    WebKit::WebPage* webPage = WebKit::toImpl(pageRef);
    595595    if (WebCore::Page* page = webPage ? webPage->corePage() : nullptr)
    596         page->setUseDarkAppearance(useDarkAppearance);
     596        page->effectiveAppearanceDidChange(useDarkAppearance, page->useInactiveAppearance());
    597597}
    598598
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r245062 r245072  
    558558    setPaginationLineGridEnabled(parameters.paginationLineGridEnabled);
    559559
    560     setUseDarkAppearance(parameters.useDarkAppearance);
     560    effectiveAppearanceDidChange(parameters.useDarkAppearance, parameters.useInactiveAppearance);
    561561
    562562    if (parameters.isEditable)
     
    46224622
    46234623#if !PLATFORM(GTK)
    4624 void WebPage::setUseDarkAppearance(bool useDarkAppearance)
    4625 {
    4626     corePage()->setUseDarkAppearance(useDarkAppearance);
     4624void WebPage::effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance)
     4625{
     4626    corePage()->effectiveAppearanceDidChange(useDarkAppearance, useInactiveAppearance);
    46274627}
    46284628#endif
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r245067 r245072  
    548548#endif
    549549
    550     void setUseDarkAppearance(bool);
     550    void effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance);
    551551
    552552    bool windowIsFocused() const;
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r245062 r245072  
    489489#endif
    490490
    491     SetUseDarkAppearance(bool useDarkAppearance);
     491    EffectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance);
    492492
    493493#if PLATFORM(COCOA)
  • trunk/Source/WebKit/WebProcess/WebPage/gtk/WebPageGtk.cpp

    r244635 r245072  
    196196}
    197197
    198 void WebPage::setUseDarkAppearance(bool useDarkAppearance)
     198void WebPage::effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance)
    199199{
    200200    if (auto* settings = gtk_settings_get_default())
    201201        g_object_set(settings, "gtk-application-prefer-dark-theme", useDarkAppearance, nullptr);
    202     corePage()->setUseDarkAppearance(useDarkAppearance);
     202    corePage()->effectiveAppearanceDidChange(useDarkAppearance, useInactiveAppearance);
    203203}
    204204
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r244932 r245072  
     12019-05-08  Timothy Hatcher  <timothy@apple.com>
     2
     3        Add plumbing for inactive system colors in RenderTheme cache.
     4        https://bugs.webkit.org/show_bug.cgi?id=197699
     5        rdar://problem/49406936
     6
     7        Reviewed by Tim Horton.
     8
     9        * WebView/WebView.mm:
     10        (-[WebView _commonInitializationWithFrameName:groupName:]):
     11        (-[WebView _setUseDarkAppearance:]):
     12        (-[WebView _useInactiveAppearance]):
     13        (-[WebView _setUseInactiveAppearance:]):
     14        (-[WebView _setUseDarkAppearance:useInactiveAppearance:]):
     15        (-[WebView _effectiveAppearanceIsInactive]):
     16        (-[WebView viewDidChangeEffectiveAppearance]):
     17        * WebView/WebViewPrivate.h:
     18
    1192019-05-03  Daniel Bates  <dabates@apple.com>
    220
  • trunk/Source/WebKitLegacy/mac/WebView/WebView.mm

    r244869 r245072  
    15901590
    15911591#if HAVE(OS_DARK_MODE_SUPPORT) && PLATFORM(MAC)
    1592     _private->page->setUseDarkAppearance(self._effectiveAppearanceIsDark);
     1592    _private->page->effectiveAppearanceDidChange(self._effectiveAppearanceIsDark, self._effectiveAppearanceIsInactive);
    15931593#endif
    15941594
     
    25012501    if (!_private || !_private->page)
    25022502        return;
    2503     _private->page->setUseDarkAppearance(useDarkAppearance);
     2503    [self _setUseDarkAppearance:useDarkAppearance useInactiveAppearance:_private->page->useInactiveAppearance()];
     2504}
     2505
     2506- (BOOL)_useInactiveAppearance
     2507{
     2508    if (!_private || !_private->page)
     2509        return NO;
     2510    return _private->page->useInactiveAppearance();
     2511}
     2512
     2513- (void)_setUseInactiveAppearance:(BOOL)useInactiveAppearance
     2514{
     2515    if (!_private || !_private->page)
     2516        return;
     2517    [self _setUseDarkAppearance:_private->page->useDarkAppearance() useInactiveAppearance:useInactiveAppearance];
     2518}
     2519
     2520- (void)_setUseDarkAppearance:(BOOL)useDarkAppearance useInactiveAppearance:(BOOL)useInactiveAppearance
     2521{
     2522    if (!_private || !_private->page)
     2523        return;
     2524    _private->page->effectiveAppearanceDidChange(useDarkAppearance, useInactiveAppearance);
    25042525}
    25052526
     
    53315352    return [appearance isEqualToString:NSAppearanceNameDarkAqua];
    53325353}
     5354
     5355- (bool)_effectiveAppearanceIsInactive
     5356{
     5357    // FIXME: Use the window isKeyWindow state or view first responder status?
     5358    return false;
     5359}
    53335360#endif
    53345361
     
    53555382        return;
    53565383
    5357     _private->page->setUseDarkAppearance(self._effectiveAppearanceIsDark);
     5384    _private->page->effectiveAppearanceDidChange(self._effectiveAppearanceIsDark, self._effectiveAppearanceIsInactive);
    53585385}
    53595386#endif
  • trunk/Source/WebKitLegacy/mac/WebView/WebViewPrivate.h

    r240948 r245072  
    324324
    325325@property (nonatomic, assign, setter=_setUseDarkAppearance:) BOOL _useDarkAppearance;
     326@property (nonatomic, assign, setter=_setUseInactiveAppearance:) BOOL _useInactiveAppearance;
     327
     328- (void)_setUseDarkAppearance:(BOOL)useDarkAppearance useInactiveAppearance:(BOOL)useInactiveAppearance;
    326329
    327330- (WebInspector *)inspector;
Note: See TracChangeset for help on using the changeset viewer.