mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:47: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];
|
||||
}
|
||||
|
||||
- (void)viewDidChangeEffectiveAppearance
|
||||
{
|
||||
m_web_view_bridge->update_palette();
|
||||
}
|
||||
|
||||
- (BOOL)isFlipped
|
||||
{
|
||||
// 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 <UI/LadybirdWebViewBridge.h>
|
||||
|
||||
#import <UI/Palette.h>
|
||||
|
||||
namespace Ladybird {
|
||||
|
||||
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)
|
||||
{
|
||||
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 update_palette();
|
||||
|
||||
void mouse_down_event(Gfx::IntPoint, GUI::MouseButton, KeyModifier);
|
||||
void mouse_up_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;
|
||||
|
||||
void update_palette();
|
||||
|
||||
Vector<Gfx::IntRect> m_screen_rects;
|
||||
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/LadybirdWebView.mm
|
||||
AppKit/UI/LadybirdWebViewBridge.cpp
|
||||
AppKit/UI/Palette.mm
|
||||
AppKit/UI/Tab.mm
|
||||
AppKit/UI/TabController.mm
|
||||
AppKit/Utilities/Conversions.mm
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue