mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-11 05:25:32 +03:00
Ladybird: Inform WebContent whether the AppKit chrome is in dark mode
This commit is contained in:
parent
6e64bf5464
commit
3fc0c21b6c
Notes:
sideshowbarker
2024-07-17 06:00:02 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/3fc0c21b6c Pull-request: https://github.com/SerenityOS/serenity/pull/20798 Reviewed-by: https://github.com/ADKaster
@ -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…
Reference in New Issue
Block a user