mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:57:34 +00:00
Ladybird: Inform WebContent whether the AppKit chrome is in dark mode
This commit is contained in:
parent
6e64bf5464
commit
3fc0c21b6c
6 changed files with 77 additions and 11 deletions
|
@ -872,6 +872,11 @@ static void copy_text_to_clipboard(StringView text)
|
||||||
[self handleResize];
|
[self handleResize];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewDidChangeEffectiveAppearance
|
||||||
|
{
|
||||||
|
m_web_view_bridge->update_palette();
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)isFlipped
|
- (BOOL)isFlipped
|
||||||
{
|
{
|
||||||
// The origin of a NSScrollView is the lower-left corner, with the y-axis extending upwards. Instead,
|
// The origin of a NSScrollView is the lower-left corner, with the y-axis extending upwards. Instead,
|
||||||
|
|
|
@ -13,6 +13,8 @@
|
||||||
#include <LibWeb/Crypto/Crypto.h>
|
#include <LibWeb/Crypto/Crypto.h>
|
||||||
#include <UI/LadybirdWebViewBridge.h>
|
#include <UI/LadybirdWebViewBridge.h>
|
||||||
|
|
||||||
|
#import <UI/Palette.h>
|
||||||
|
|
||||||
namespace Ladybird {
|
namespace Ladybird {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -85,6 +87,12 @@ void WebViewBridge::set_viewport_rect(Gfx::IntRect viewport_rect, ForResize for_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebViewBridge::update_palette()
|
||||||
|
{
|
||||||
|
auto theme = create_system_palette();
|
||||||
|
client().async_update_system_theme(move(theme));
|
||||||
|
}
|
||||||
|
|
||||||
void WebViewBridge::mouse_down_event(Gfx::IntPoint position, GUI::MouseButton button, KeyModifier modifiers)
|
void WebViewBridge::mouse_down_event(Gfx::IntPoint position, GUI::MouseButton button, KeyModifier modifiers)
|
||||||
{
|
{
|
||||||
client().async_mouse_down(to_content_position(position), to_underlying(button), to_underlying(button), modifiers);
|
client().async_mouse_down(to_content_position(position), to_underlying(button), to_underlying(button), modifiers);
|
||||||
|
@ -183,13 +191,4 @@ void WebViewBridge::create_client(WebView::EnableCallgrindProfiling enable_callg
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebViewBridge::update_palette()
|
|
||||||
{
|
|
||||||
auto theme = MUST(Gfx::load_system_theme(DeprecatedString::formatted("{}/res/themes/Default.ini", s_serenity_resource_root)));
|
|
||||||
auto palette_impl = Gfx::PaletteImpl::create_with_anonymous_buffer(theme);
|
|
||||||
auto palette = Gfx::Palette(move(palette_impl));
|
|
||||||
|
|
||||||
client().async_update_system_theme(move(theme));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ public:
|
||||||
};
|
};
|
||||||
void set_viewport_rect(Gfx::IntRect, ForResize = ForResize::No);
|
void set_viewport_rect(Gfx::IntRect, ForResize = ForResize::No);
|
||||||
|
|
||||||
|
void update_palette();
|
||||||
|
|
||||||
void mouse_down_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
void mouse_down_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
||||||
void mouse_up_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
void mouse_up_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
||||||
void mouse_move_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
void mouse_move_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
||||||
|
@ -59,8 +61,6 @@ private:
|
||||||
|
|
||||||
virtual void create_client(WebView::EnableCallgrindProfiling) override;
|
virtual void create_client(WebView::EnableCallgrindProfiling) override;
|
||||||
|
|
||||||
void update_palette();
|
|
||||||
|
|
||||||
Vector<Gfx::IntRect> m_screen_rects;
|
Vector<Gfx::IntRect> m_screen_rects;
|
||||||
Gfx::IntRect m_viewport_rect;
|
Gfx::IntRect m_viewport_rect;
|
||||||
|
|
||||||
|
|
16
Ladybird/AppKit/UI/Palette.h
Normal file
16
Ladybird/AppKit/UI/Palette.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <LibCore/AnonymousBuffer.h>
|
||||||
|
|
||||||
|
namespace Ladybird {
|
||||||
|
|
||||||
|
bool is_using_dark_system_theme();
|
||||||
|
Core::AnonymousBuffer create_system_palette();
|
||||||
|
|
||||||
|
}
|
45
Ladybird/AppKit/UI/Palette.mm
Normal file
45
Ladybird/AppKit/UI/Palette.mm
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <AK/DeprecatedString.h>
|
||||||
|
#include <Ladybird/Utilities.h>
|
||||||
|
#include <LibGfx/Palette.h>
|
||||||
|
#include <LibGfx/SystemTheme.h>
|
||||||
|
|
||||||
|
#import <System/Cocoa.h>
|
||||||
|
#import <UI/Palette.h>
|
||||||
|
|
||||||
|
namespace Ladybird {
|
||||||
|
|
||||||
|
bool is_using_dark_system_theme()
|
||||||
|
{
|
||||||
|
auto* appearance = [NSApp effectiveAppearance];
|
||||||
|
|
||||||
|
auto* matched_appearance = [appearance bestMatchFromAppearancesWithNames:@[
|
||||||
|
NSAppearanceNameAqua,
|
||||||
|
NSAppearanceNameDarkAqua,
|
||||||
|
]];
|
||||||
|
|
||||||
|
return [matched_appearance isEqualToString:NSAppearanceNameDarkAqua];
|
||||||
|
}
|
||||||
|
|
||||||
|
Core::AnonymousBuffer create_system_palette()
|
||||||
|
{
|
||||||
|
auto is_dark = is_using_dark_system_theme();
|
||||||
|
|
||||||
|
auto theme_file = is_dark ? "Default"sv : "Dark"sv;
|
||||||
|
auto theme_path = DeprecatedString::formatted("{}/res/themes/{}.ini", s_serenity_resource_root, theme_file);
|
||||||
|
|
||||||
|
auto theme = MUST(Gfx::load_system_theme(theme_path));
|
||||||
|
auto palette_impl = Gfx::PaletteImpl::create_with_anonymous_buffer(theme);
|
||||||
|
auto palette = Gfx::Palette(move(palette_impl));
|
||||||
|
|
||||||
|
palette.set_flag(Gfx::FlagRole::IsDark, is_dark);
|
||||||
|
|
||||||
|
return theme;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -136,6 +136,7 @@ elseif (APPLE)
|
||||||
AppKit/UI/Event.mm
|
AppKit/UI/Event.mm
|
||||||
AppKit/UI/LadybirdWebView.mm
|
AppKit/UI/LadybirdWebView.mm
|
||||||
AppKit/UI/LadybirdWebViewBridge.cpp
|
AppKit/UI/LadybirdWebViewBridge.cpp
|
||||||
|
AppKit/UI/Palette.mm
|
||||||
AppKit/UI/Tab.mm
|
AppKit/UI/Tab.mm
|
||||||
AppKit/UI/TabController.mm
|
AppKit/UI/TabController.mm
|
||||||
AppKit/Utilities/Conversions.mm
|
AppKit/Utilities/Conversions.mm
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue