Move the active macOS web selection color into LibWebView so AppKit and Qt use the same value when building the WebContent system palette. Qt now also asks AppKit for inactive selection colors on macOS, matching the AppKit frontend while leaving other Qt platforms on QPalette.
51 lines
1.9 KiB
Text
51 lines
1.9 KiB
Text
/*
|
|
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#include <AK/ByteString.h>
|
|
#include <LibCore/Resource.h>
|
|
#include <LibGfx/Palette.h>
|
|
#include <LibGfx/SystemTheme.h>
|
|
#include <LibWebView/PlatformColors.h>
|
|
|
|
#import <Cocoa/Cocoa.h>
|
|
#import <Interface/Palette.h>
|
|
#import <Utilities/Conversions.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 ? "Dark"sv : "Default"sv;
|
|
auto theme_ini = MUST(Core::Resource::load_from_uri(MUST(String::formatted("resource://themes/{}.ini", theme_file))));
|
|
auto theme = Gfx::load_system_theme(theme_ini->filesystem_path().to_byte_string()).release_value_but_fixme_should_propagate_errors();
|
|
|
|
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);
|
|
palette.set_color(Gfx::ColorRole::Accent, ns_color_to_gfx_color([NSColor controlAccentColor]));
|
|
palette.set_color(Gfx::ColorRole::Selection, WebView::macos_web_selection_color());
|
|
palette.set_color(Gfx::ColorRole::InactiveSelection, ns_color_to_gfx_color([NSColor unemphasizedSelectedTextBackgroundColor]));
|
|
palette.set_color(Gfx::ColorRole::InactiveSelectionText, ns_color_to_gfx_color([NSColor unemphasizedSelectedTextColor]));
|
|
// FIXME: There are more system colors we currently don't use (https://developer.apple.com/documentation/appkit/nscolor/3000782-controlaccentcolor?language=objc)
|
|
|
|
return theme;
|
|
}
|
|
|
|
}
|