mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-22 17:29:01 +00:00
LibWebView+UI: Generate the preferred color, contrast, and motion menus
This commit is contained in:
parent
9c99c48f47
commit
7d6ea99d0d
Notes:
github-actions[bot]
2025-09-11 18:25:01 +00:00
Author: https://github.com/trflynn89
Commit: 7d6ea99d0d
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6062
12 changed files with 95 additions and 408 deletions
|
@ -668,6 +668,58 @@ void Application::initialize_actions()
|
|||
view->get_source();
|
||||
});
|
||||
|
||||
auto set_color_scheme = [this](auto color_scheme) {
|
||||
return [this, color_scheme]() {
|
||||
m_color_scheme = color_scheme;
|
||||
|
||||
ViewImplementation::for_each_view([&](ViewImplementation& view) {
|
||||
view.set_preferred_color_scheme(m_color_scheme);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
m_color_scheme_menu = Menu::create_group("Color Scheme"sv);
|
||||
m_color_scheme_menu->add_action(Action::create_checkable("Auto"sv, ActionID::PreferredColorScheme, set_color_scheme(Web::CSS::PreferredColorScheme::Auto)));
|
||||
m_color_scheme_menu->add_action(Action::create_checkable("Dark"sv, ActionID::PreferredColorScheme, set_color_scheme(Web::CSS::PreferredColorScheme::Dark)));
|
||||
m_color_scheme_menu->add_action(Action::create_checkable("Light"sv, ActionID::PreferredColorScheme, set_color_scheme(Web::CSS::PreferredColorScheme::Light)));
|
||||
m_color_scheme_menu->items().first().get<NonnullRefPtr<Action>>()->set_checked(true);
|
||||
|
||||
auto set_contrast = [this](auto contrast) {
|
||||
return [this, contrast]() {
|
||||
m_contrast = contrast;
|
||||
|
||||
ViewImplementation::for_each_view([&](ViewImplementation& view) {
|
||||
view.set_preferred_contrast(m_contrast);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
m_contrast_menu = Menu::create_group("Contrast"sv);
|
||||
m_contrast_menu->add_action(Action::create_checkable("Auto"sv, ActionID::PreferredContrast, set_contrast(Web::CSS::PreferredContrast::Auto)));
|
||||
m_contrast_menu->add_action(Action::create_checkable("Less"sv, ActionID::PreferredContrast, set_contrast(Web::CSS::PreferredContrast::Less)));
|
||||
m_contrast_menu->add_action(Action::create_checkable("More"sv, ActionID::PreferredContrast, set_contrast(Web::CSS::PreferredContrast::More)));
|
||||
m_contrast_menu->add_action(Action::create_checkable("No Preference"sv, ActionID::PreferredContrast, set_contrast(Web::CSS::PreferredContrast::NoPreference)));
|
||||
m_contrast_menu->items().first().get<NonnullRefPtr<Action>>()->set_checked(true);
|
||||
|
||||
auto set_motion = [this](auto motion) {
|
||||
return [this, motion]() {
|
||||
m_motion = motion;
|
||||
|
||||
ViewImplementation::for_each_view([&](ViewImplementation& view) {
|
||||
view.set_preferred_motion(m_motion);
|
||||
return IterationDecision::Continue;
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
m_motion_menu = Menu::create_group("Motion"sv);
|
||||
m_motion_menu->add_action(Action::create_checkable("Auto"sv, ActionID::PreferredMotion, set_motion(Web::CSS::PreferredMotion::Auto)));
|
||||
m_motion_menu->add_action(Action::create_checkable("Reduce"sv, ActionID::PreferredMotion, set_motion(Web::CSS::PreferredMotion::Reduce)));
|
||||
m_motion_menu->add_action(Action::create_checkable("No Preference"sv, ActionID::PreferredMotion, set_motion(Web::CSS::PreferredMotion::NoPreference)));
|
||||
m_motion_menu->items().first().get<NonnullRefPtr<Action>>()->set_checked(true);
|
||||
|
||||
m_debug_menu = Menu::create("Debug"sv);
|
||||
|
||||
m_debug_menu->add_action(Action::create("Dump Session History Tree"sv, ActionID::DumpSessionHistoryTree, debug_request("dump-session-history"sv)));
|
||||
|
@ -733,6 +785,10 @@ void Application::initialize_actions()
|
|||
|
||||
void Application::apply_view_options(Badge<ViewImplementation>, ViewImplementation& view)
|
||||
{
|
||||
view.set_preferred_color_scheme(m_color_scheme);
|
||||
view.set_preferred_contrast(m_contrast);
|
||||
view.set_preferred_motion(m_motion);
|
||||
|
||||
view.debug_request("set-line-box-borders"sv, m_show_line_box_borders_action->checked() ? "on"sv : "off"sv);
|
||||
view.debug_request("scripting"sv, m_enable_scripting_action->checked() ? "on"sv : "off"sv);
|
||||
view.debug_request("content-filtering"sv, m_enable_content_filtering_action->checked() ? "on"sv : "off"sv);
|
||||
|
|
|
@ -18,6 +18,9 @@
|
|||
#include <LibMain/Main.h>
|
||||
#include <LibRequests/RequestClient.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/PreferredMotion.h>
|
||||
#include <LibWebView/Forward.h>
|
||||
#include <LibWebView/Options.h>
|
||||
#include <LibWebView/Process.h>
|
||||
|
@ -74,6 +77,9 @@ public:
|
|||
Action& select_all_action() { return *m_select_all_action; }
|
||||
Action& view_source_action() { return *m_view_source_action; }
|
||||
|
||||
Menu& color_scheme_menu() { return *m_color_scheme_menu; }
|
||||
Menu& contrast_menu() { return *m_contrast_menu; }
|
||||
Menu& motion_menu() { return *m_motion_menu; }
|
||||
Menu& debug_menu() { return *m_debug_menu; }
|
||||
|
||||
void apply_view_options(Badge<ViewImplementation>, ViewImplementation&);
|
||||
|
@ -170,6 +176,15 @@ private:
|
|||
RefPtr<Action> m_select_all_action;
|
||||
RefPtr<Action> m_view_source_action;
|
||||
|
||||
RefPtr<Menu> m_color_scheme_menu;
|
||||
Web::CSS::PreferredColorScheme m_color_scheme { Web::CSS::PreferredColorScheme::Auto };
|
||||
|
||||
RefPtr<Menu> m_contrast_menu;
|
||||
Web::CSS::PreferredContrast m_contrast { Web::CSS::PreferredContrast::Auto };
|
||||
|
||||
RefPtr<Menu> m_motion_menu;
|
||||
Web::CSS::PreferredMotion m_motion { Web::CSS::PreferredMotion::Auto };
|
||||
|
||||
RefPtr<Menu> m_debug_menu;
|
||||
RefPtr<Action> m_show_line_box_borders_action;
|
||||
RefPtr<Action> m_enable_scripting_action;
|
||||
|
|
|
@ -53,6 +53,10 @@ enum class ActionID {
|
|||
ToggleMediaControlsState,
|
||||
ToggleMediaLoopState,
|
||||
|
||||
PreferredColorScheme,
|
||||
PreferredContrast,
|
||||
PreferredMotion,
|
||||
|
||||
DumpSessionHistoryTree,
|
||||
DumpDOMTree,
|
||||
DumpLayoutTree,
|
||||
|
|
|
@ -9,9 +9,6 @@
|
|||
#include <AK/Optional.h>
|
||||
#include <AK/StringView.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/PreferredMotion.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
@ -42,8 +39,4 @@
|
|||
|
||||
- (void)removeTab:(nonnull TabController*)controller;
|
||||
|
||||
- (Web::CSS::PreferredColorScheme)preferredColorScheme;
|
||||
- (Web::CSS::PreferredContrast)preferredContrast;
|
||||
- (Web::CSS::PreferredMotion)preferredMotion;
|
||||
|
||||
@end
|
||||
|
|
|
@ -19,11 +19,6 @@
|
|||
#endif
|
||||
|
||||
@interface ApplicationDelegate ()
|
||||
{
|
||||
Web::CSS::PreferredColorScheme m_preferred_color_scheme;
|
||||
Web::CSS::PreferredContrast m_preferred_contrast;
|
||||
Web::CSS::PreferredMotion m_preferred_motion;
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray<TabController*>* managed_tabs;
|
||||
@property (nonatomic, weak) Tab* active_tab;
|
||||
|
@ -63,10 +58,6 @@
|
|||
|
||||
self.managed_tabs = [[NSMutableArray alloc] init];
|
||||
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Auto;
|
||||
m_preferred_contrast = Web::CSS::PreferredContrast::Auto;
|
||||
m_preferred_motion = Web::CSS::PreferredMotion::Auto;
|
||||
|
||||
// Reduce the tooltip delay, as the default delay feels quite long.
|
||||
[[NSUserDefaults standardUserDefaults] setObject:@100 forKey:@"NSInitialToolTipDelay"];
|
||||
}
|
||||
|
@ -133,21 +124,6 @@
|
|||
[self.managed_tabs removeObject:controller];
|
||||
}
|
||||
|
||||
- (Web::CSS::PreferredColorScheme)preferredColorScheme
|
||||
{
|
||||
return m_preferred_color_scheme;
|
||||
}
|
||||
|
||||
- (Web::CSS::PreferredContrast)preferredContrast
|
||||
{
|
||||
return m_preferred_contrast;
|
||||
}
|
||||
|
||||
- (Web::CSS::PreferredMotion)preferredMotion
|
||||
{
|
||||
return m_preferred_motion;
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
- (void)openAboutVersionPage:(id)sender
|
||||
|
@ -290,98 +266,6 @@
|
|||
activeTab:self.active_tab];
|
||||
}
|
||||
|
||||
- (void)setAutoPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Auto;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)setDarkPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Dark;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)setLightPreferredColorScheme:(id)sender
|
||||
{
|
||||
m_preferred_color_scheme = Web::CSS::PreferredColorScheme::Light;
|
||||
[self broadcastPreferredColorSchemeUpdate];
|
||||
}
|
||||
|
||||
- (void)broadcastPreferredColorSchemeUpdate
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] setPreferredColorScheme:m_preferred_color_scheme];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setAutoPreferredContrast:(id)sender
|
||||
{
|
||||
m_preferred_contrast = Web::CSS::PreferredContrast::Auto;
|
||||
[self broadcastPreferredContrastUpdate];
|
||||
}
|
||||
|
||||
- (void)setLessPreferredContrast:(id)sender
|
||||
{
|
||||
m_preferred_contrast = Web::CSS::PreferredContrast::Less;
|
||||
[self broadcastPreferredContrastUpdate];
|
||||
}
|
||||
|
||||
- (void)setMorePreferredContrast:(id)sender
|
||||
{
|
||||
m_preferred_contrast = Web::CSS::PreferredContrast::More;
|
||||
[self broadcastPreferredContrastUpdate];
|
||||
}
|
||||
|
||||
- (void)setNoPreferencePreferredContrast:(id)sender
|
||||
{
|
||||
m_preferred_contrast = Web::CSS::PreferredContrast::NoPreference;
|
||||
[self broadcastPreferredContrastUpdate];
|
||||
}
|
||||
|
||||
- (void)broadcastPreferredContrastUpdate
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] setPreferredContrast:m_preferred_contrast];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setAutoPreferredMotion:(id)sender
|
||||
{
|
||||
m_preferred_motion = Web::CSS::PreferredMotion::Auto;
|
||||
[self broadcastPreferredMotionUpdate];
|
||||
}
|
||||
|
||||
- (void)setNoPreferencePreferredMotion:(id)sender
|
||||
{
|
||||
m_preferred_motion = Web::CSS::PreferredMotion::NoPreference;
|
||||
[self broadcastPreferredMotionUpdate];
|
||||
}
|
||||
|
||||
- (void)setReducePreferredMotion:(id)sender
|
||||
{
|
||||
m_preferred_motion = Web::CSS::PreferredMotion::Reduce;
|
||||
[self broadcastPreferredMotionUpdate];
|
||||
}
|
||||
|
||||
- (void)broadcastPreferredMotionUpdate
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] setPreferredMotion:m_preferred_motion];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)broadcastDisplayRefreshRateChange
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] handleDisplayRefreshRateChange];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)clearHistory:(id)sender
|
||||
{
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
|
@ -486,53 +370,20 @@
|
|||
auto* menu = [[NSMenuItem alloc] init];
|
||||
auto* submenu = [[NSMenu alloc] initWithTitle:@"View"];
|
||||
|
||||
auto* color_scheme_menu = [[NSMenu alloc] init];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Auto"
|
||||
action:@selector(setAutoPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Dark"
|
||||
action:@selector(setDarkPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
[color_scheme_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Light"
|
||||
action:@selector(setLightPreferredColorScheme:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
auto* color_scheme_menu_item = [[NSMenuItem alloc] initWithTitle:@"Color Scheme"
|
||||
auto* color_scheme_menu = Ladybird::create_application_menu(WebView::Application::the().color_scheme_menu());
|
||||
auto* color_scheme_menu_item = [[NSMenuItem alloc] initWithTitle:[color_scheme_menu title]
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[color_scheme_menu_item setSubmenu:color_scheme_menu];
|
||||
|
||||
auto* contrast_menu = [[NSMenu alloc] init];
|
||||
[contrast_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Auto"
|
||||
action:@selector(setAutoPreferredContrast:)
|
||||
keyEquivalent:@""]];
|
||||
[contrast_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Less"
|
||||
action:@selector(setLessPreferredContrast:)
|
||||
keyEquivalent:@""]];
|
||||
[contrast_menu addItem:[[NSMenuItem alloc] initWithTitle:@"More"
|
||||
action:@selector(setMorePreferredContrast:)
|
||||
keyEquivalent:@""]];
|
||||
[contrast_menu addItem:[[NSMenuItem alloc] initWithTitle:@"No Preference"
|
||||
action:@selector(setNoPreferencePreferredContrast:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
auto* contrast_menu_item = [[NSMenuItem alloc] initWithTitle:@"Contrast"
|
||||
auto* contrast_menu = Ladybird::create_application_menu(WebView::Application::the().contrast_menu());
|
||||
auto* contrast_menu_item = [[NSMenuItem alloc] initWithTitle:[contrast_menu title]
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[contrast_menu_item setSubmenu:contrast_menu];
|
||||
|
||||
auto* motion_menu = [[NSMenu alloc] init];
|
||||
[motion_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Auto"
|
||||
action:@selector(setAutoPreferredMotion:)
|
||||
keyEquivalent:@""]];
|
||||
[motion_menu addItem:[[NSMenuItem alloc] initWithTitle:@"No Preference"
|
||||
action:@selector(setNoPreferencePreferredMotion:)
|
||||
keyEquivalent:@""]];
|
||||
[motion_menu addItem:[[NSMenuItem alloc] initWithTitle:@"Reduce"
|
||||
action:@selector(setReducePreferredMotion:)
|
||||
keyEquivalent:@""]];
|
||||
|
||||
auto* motion_menu_item = [[NSMenuItem alloc] initWithTitle:@"Motion"
|
||||
auto* motion_menu = Ladybird::create_application_menu(WebView::Application::the().motion_menu());
|
||||
auto* motion_menu_item = [[NSMenuItem alloc] initWithTitle:[motion_menu title]
|
||||
action:nil
|
||||
keyEquivalent:@""];
|
||||
[motion_menu_item setSubmenu:motion_menu];
|
||||
|
@ -666,34 +517,10 @@
|
|||
|
||||
- (void)applicationDidChangeScreenParameters:(NSNotification*)notification
|
||||
{
|
||||
[self broadcastDisplayRefreshRateChange];
|
||||
}
|
||||
|
||||
- (BOOL)validateMenuItem:(NSMenuItem*)item
|
||||
{
|
||||
if ([item action] == @selector(setAutoPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Web::CSS::PreferredColorScheme::Auto) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setDarkPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Web::CSS::PreferredColorScheme::Dark) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setLightPreferredColorScheme:)) {
|
||||
[item setState:(m_preferred_color_scheme == Web::CSS::PreferredColorScheme::Light) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setAutoPreferredContrast:)) {
|
||||
[item setState:(m_preferred_contrast == Web::CSS::PreferredContrast::Auto) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setLessPreferredContrast:)) {
|
||||
[item setState:(m_preferred_contrast == Web::CSS::PreferredContrast::Less) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setMorePreferredContrast:)) {
|
||||
[item setState:(m_preferred_contrast == Web::CSS::PreferredContrast::More) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setNoPreferencePreferredContrast:)) {
|
||||
[item setState:(m_preferred_contrast == Web::CSS::PreferredContrast::NoPreference) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setAutoPreferredMotion:)) {
|
||||
[item setState:(m_preferred_motion == Web::CSS::PreferredMotion::Auto) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setNoPreferencePreferredMotion:)) {
|
||||
[item setState:(m_preferred_motion == Web::CSS::PreferredMotion::NoPreference) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
} else if ([item action] == @selector(setReducePreferredMotion:)) {
|
||||
[item setState:(m_preferred_motion == Web::CSS::PreferredMotion::Reduce) ? NSControlStateValueOn : NSControlStateValueOff];
|
||||
for (TabController* controller in self.managed_tabs) {
|
||||
auto* tab = (Tab*)[controller window];
|
||||
[[tab web_view] handleDisplayRefreshRateChange];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -7,11 +7,9 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Forward.h>
|
||||
#include <AK/StringUtils.h>
|
||||
#include <LibGfx/Forward.h>
|
||||
#include <LibURL/Forward.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/PreferredMotion.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
#include <LibWeb/HTML/AudioPlayState.h>
|
||||
#include <LibWebView/Forward.h>
|
||||
|
@ -66,10 +64,6 @@
|
|||
- (void)handleDisplayRefreshRateChange;
|
||||
- (void)handleVisibility:(BOOL)is_visible;
|
||||
|
||||
- (void)setPreferredColorScheme:(Web::CSS::PreferredColorScheme)color_scheme;
|
||||
- (void)setPreferredContrast:(Web::CSS::PreferredContrast)contrast;
|
||||
- (void)setPreferredMotion:(Web::CSS::PreferredMotion)motion;
|
||||
|
||||
- (void)findInPage:(NSString*)query
|
||||
caseSensitivity:(CaseSensitivity)case_sensitivity;
|
||||
- (void)findInPageNextMatch;
|
||||
|
|
|
@ -93,7 +93,6 @@ struct HideCursor {
|
|||
if (self = [super init]) {
|
||||
self.observer = observer;
|
||||
|
||||
auto* delegate = (ApplicationDelegate*)[NSApp delegate];
|
||||
auto* screens = [NSScreen screens];
|
||||
|
||||
Vector<Web::DevicePixelRect> screen_rects;
|
||||
|
@ -108,7 +107,7 @@ struct HideCursor {
|
|||
auto device_pixel_ratio = [[NSScreen mainScreen] backingScaleFactor];
|
||||
auto maximum_frames_per_second = [[NSScreen mainScreen] maximumFramesPerSecond];
|
||||
|
||||
m_web_view_bridge = MUST(Ladybird::WebViewBridge::create(move(screen_rects), device_pixel_ratio, maximum_frames_per_second, [delegate preferredColorScheme], [delegate preferredContrast], [delegate preferredMotion]));
|
||||
m_web_view_bridge = MUST(Ladybird::WebViewBridge::create(move(screen_rects), device_pixel_ratio, maximum_frames_per_second));
|
||||
[self setWebViewCallbacks];
|
||||
|
||||
self.page_context_menu = Ladybird::create_context_menu(self, [self view].page_context_menu());
|
||||
|
@ -226,21 +225,6 @@ struct HideCursor {
|
|||
return m_web_view_bridge->zoom_level();
|
||||
}
|
||||
|
||||
- (void)setPreferredColorScheme:(Web::CSS::PreferredColorScheme)color_scheme
|
||||
{
|
||||
m_web_view_bridge->set_preferred_color_scheme(color_scheme);
|
||||
}
|
||||
|
||||
- (void)setPreferredContrast:(Web::CSS::PreferredContrast)contrast
|
||||
{
|
||||
m_web_view_bridge->set_preferred_contrast(contrast);
|
||||
}
|
||||
|
||||
- (void)setPreferredMotion:(Web::CSS::PreferredMotion)motion
|
||||
{
|
||||
m_web_view_bridge->set_preferred_motion(motion);
|
||||
}
|
||||
|
||||
#pragma mark - Private methods
|
||||
|
||||
static void copy_data_to_clipboard(StringView data, NSPasteboardType pasteboard_type)
|
||||
|
|
|
@ -20,16 +20,13 @@ static T scale_for_device(T size, float device_pixel_ratio)
|
|||
return size.template to_type<float>().scaled(device_pixel_ratio).template to_type<int>();
|
||||
}
|
||||
|
||||
ErrorOr<NonnullOwnPtr<WebViewBridge>> WebViewBridge::create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
|
||||
ErrorOr<NonnullOwnPtr<WebViewBridge>> WebViewBridge::create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second)
|
||||
{
|
||||
return adopt_nonnull_own_or_enomem(new (nothrow) WebViewBridge(move(screen_rects), device_pixel_ratio, maximum_frames_per_second, preferred_color_scheme, preferred_contrast, preferred_motion));
|
||||
return adopt_nonnull_own_or_enomem(new (nothrow) WebViewBridge(move(screen_rects), device_pixel_ratio, maximum_frames_per_second));
|
||||
}
|
||||
|
||||
WebViewBridge::WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
|
||||
WebViewBridge::WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second)
|
||||
: m_screen_rects(move(screen_rects))
|
||||
, m_preferred_color_scheme(preferred_color_scheme)
|
||||
, m_preferred_contrast(preferred_contrast)
|
||||
, m_preferred_motion(preferred_motion)
|
||||
{
|
||||
m_device_pixel_ratio = device_pixel_ratio;
|
||||
m_maximum_frames_per_second = static_cast<double>(maximum_frames_per_second);
|
||||
|
@ -63,24 +60,6 @@ void WebViewBridge::update_palette()
|
|||
client().async_update_system_theme(m_client_state.page_index, move(theme));
|
||||
}
|
||||
|
||||
void WebViewBridge::set_preferred_color_scheme(Web::CSS::PreferredColorScheme color_scheme)
|
||||
{
|
||||
m_preferred_color_scheme = color_scheme;
|
||||
client().async_set_preferred_color_scheme(m_client_state.page_index, color_scheme);
|
||||
}
|
||||
|
||||
void WebViewBridge::set_preferred_contrast(Web::CSS::PreferredContrast contrast)
|
||||
{
|
||||
m_preferred_contrast = contrast;
|
||||
client().async_set_preferred_contrast(m_client_state.page_index, contrast);
|
||||
}
|
||||
|
||||
void WebViewBridge::set_preferred_motion(Web::CSS::PreferredMotion motion)
|
||||
{
|
||||
m_preferred_motion = motion;
|
||||
client().async_set_preferred_motion(m_client_state.page_index, motion);
|
||||
}
|
||||
|
||||
void WebViewBridge::enqueue_input_event(Web::MouseEvent event)
|
||||
{
|
||||
event.position = to_content_position(event.position.to_type<int>()).to_type<Web::DevicePixels>();
|
||||
|
@ -144,8 +123,6 @@ Gfx::IntPoint WebViewBridge::to_widget_position(Gfx::IntPoint content_position)
|
|||
void WebViewBridge::initialize_client(CreateNewClient create_new_client)
|
||||
{
|
||||
ViewImplementation::initialize_client(create_new_client);
|
||||
|
||||
client().async_set_preferred_color_scheme(m_client_state.page_index, m_preferred_color_scheme);
|
||||
update_palette();
|
||||
|
||||
if (!m_screen_rects.is_empty()) {
|
||||
|
|
|
@ -10,9 +10,6 @@
|
|||
#include <LibGfx/Point.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibGfx/Size.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/PreferredMotion.h>
|
||||
#include <LibWeb/Page/InputEvent.h>
|
||||
#include <LibWebView/ViewImplementation.h>
|
||||
|
||||
|
@ -20,7 +17,7 @@ namespace Ladybird {
|
|||
|
||||
class WebViewBridge final : public WebView::ViewImplementation {
|
||||
public:
|
||||
static ErrorOr<NonnullOwnPtr<WebViewBridge>> create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
|
||||
static ErrorOr<NonnullOwnPtr<WebViewBridge>> create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second);
|
||||
virtual ~WebViewBridge() override;
|
||||
|
||||
virtual void initialize_client(CreateNewClient = CreateNewClient::Yes) override;
|
||||
|
@ -35,9 +32,6 @@ public:
|
|||
void set_maximum_frames_per_second(u64 maximum_frames_per_second);
|
||||
|
||||
void update_palette();
|
||||
void set_preferred_color_scheme(Web::CSS::PreferredColorScheme);
|
||||
void set_preferred_contrast(Web::CSS::PreferredContrast);
|
||||
void set_preferred_motion(Web::CSS::PreferredMotion);
|
||||
|
||||
void enqueue_input_event(Web::MouseEvent);
|
||||
void enqueue_input_event(Web::DragEvent);
|
||||
|
@ -52,7 +46,7 @@ public:
|
|||
Function<void()> on_zoom_level_changed;
|
||||
|
||||
private:
|
||||
WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
|
||||
WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second);
|
||||
|
||||
virtual void update_zoom() override;
|
||||
virtual Web::DevicePixelSize viewport_size() const override;
|
||||
|
@ -61,10 +55,6 @@ private:
|
|||
|
||||
Vector<Web::DevicePixelRect> m_screen_rects;
|
||||
Gfx::IntSize m_viewport_size;
|
||||
|
||||
Web::CSS::PreferredColorScheme m_preferred_color_scheme { Web::CSS::PreferredColorScheme::Auto };
|
||||
Web::CSS::PreferredContrast m_preferred_contrast { Web::CSS::PreferredContrast::Auto };
|
||||
Web::CSS::PreferredMotion m_preferred_motion { Web::CSS::PreferredMotion::Auto };
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -9,9 +9,6 @@
|
|||
*/
|
||||
|
||||
#include <AK/TypeCasts.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/PreferredMotion.h>
|
||||
#include <LibWebView/Application.h>
|
||||
#include <UI/Qt/Application.h>
|
||||
#include <UI/Qt/BrowserWindow.h>
|
||||
|
@ -220,88 +217,10 @@ BrowserWindow::BrowserWindow(Vector<URL::URL> const& initial_urls, IsPopupWindow
|
|||
|
||||
view_menu->addSeparator();
|
||||
|
||||
auto* color_scheme_menu = view_menu->addMenu("&Color Scheme");
|
||||
|
||||
auto* color_scheme_group = new QActionGroup(this);
|
||||
|
||||
auto* auto_color_scheme = new QAction("&Auto", this);
|
||||
auto_color_scheme->setCheckable(true);
|
||||
color_scheme_group->addAction(auto_color_scheme);
|
||||
color_scheme_menu->addAction(auto_color_scheme);
|
||||
QObject::connect(auto_color_scheme, &QAction::triggered, this, [this] {
|
||||
set_preferred_color_scheme(Web::CSS::PreferredColorScheme::Auto);
|
||||
});
|
||||
auto* light_color_scheme = new QAction("&Light", this);
|
||||
light_color_scheme->setCheckable(true);
|
||||
color_scheme_group->addAction(light_color_scheme);
|
||||
color_scheme_menu->addAction(light_color_scheme);
|
||||
QObject::connect(light_color_scheme, &QAction::triggered, this, [this] {
|
||||
set_preferred_color_scheme(Web::CSS::PreferredColorScheme::Light);
|
||||
});
|
||||
|
||||
auto* dark_color_scheme = new QAction("&Dark", this);
|
||||
dark_color_scheme->setCheckable(true);
|
||||
color_scheme_group->addAction(dark_color_scheme);
|
||||
color_scheme_menu->addAction(dark_color_scheme);
|
||||
QObject::connect(dark_color_scheme, &QAction::triggered, this, [this] {
|
||||
set_preferred_color_scheme(Web::CSS::PreferredColorScheme::Dark);
|
||||
});
|
||||
|
||||
auto_color_scheme->setChecked(true);
|
||||
|
||||
auto* contrast_menu = view_menu->addMenu("&Contrast");
|
||||
|
||||
auto* contrast_group = new QActionGroup(this);
|
||||
|
||||
auto* auto_contrast = new QAction("&Auto", this);
|
||||
auto_contrast->setCheckable(true);
|
||||
contrast_group->addAction(auto_contrast);
|
||||
contrast_menu->addAction(auto_contrast);
|
||||
QObject::connect(auto_contrast, &QAction::triggered, this, &BrowserWindow::enable_auto_contrast);
|
||||
|
||||
auto* less_contrast = new QAction("&Less", this);
|
||||
less_contrast->setCheckable(true);
|
||||
contrast_group->addAction(less_contrast);
|
||||
contrast_menu->addAction(less_contrast);
|
||||
QObject::connect(less_contrast, &QAction::triggered, this, &BrowserWindow::enable_less_contrast);
|
||||
|
||||
auto* more_contrast = new QAction("&More", this);
|
||||
more_contrast->setCheckable(true);
|
||||
contrast_group->addAction(more_contrast);
|
||||
contrast_menu->addAction(more_contrast);
|
||||
QObject::connect(more_contrast, &QAction::triggered, this, &BrowserWindow::enable_more_contrast);
|
||||
|
||||
auto* no_preference_contrast = new QAction("&No Preference", this);
|
||||
no_preference_contrast->setCheckable(true);
|
||||
contrast_group->addAction(no_preference_contrast);
|
||||
contrast_menu->addAction(no_preference_contrast);
|
||||
QObject::connect(no_preference_contrast, &QAction::triggered, this, &BrowserWindow::enable_no_preference_contrast);
|
||||
|
||||
auto_contrast->setChecked(true);
|
||||
|
||||
auto* motion_menu = view_menu->addMenu("&Motion");
|
||||
|
||||
auto* motion_group = new QActionGroup(this);
|
||||
|
||||
auto* auto_motion = new QAction("&Auto", this);
|
||||
auto_motion->setCheckable(true);
|
||||
motion_group->addAction(auto_motion);
|
||||
motion_menu->addAction(auto_motion);
|
||||
QObject::connect(auto_motion, &QAction::triggered, this, &BrowserWindow::enable_auto_motion);
|
||||
|
||||
auto* reduce_motion = new QAction("&Reduce", this);
|
||||
reduce_motion->setCheckable(true);
|
||||
motion_group->addAction(reduce_motion);
|
||||
motion_menu->addAction(reduce_motion);
|
||||
QObject::connect(reduce_motion, &QAction::triggered, this, &BrowserWindow::enable_reduce_motion);
|
||||
|
||||
auto* no_preference_motion = new QAction("&No Preference", this);
|
||||
no_preference_motion->setCheckable(true);
|
||||
motion_group->addAction(no_preference_motion);
|
||||
motion_menu->addAction(no_preference_motion);
|
||||
QObject::connect(no_preference_motion, &QAction::triggered, this, &BrowserWindow::enable_no_preference_motion);
|
||||
|
||||
auto_motion->setChecked(true);
|
||||
view_menu->addMenu(create_application_menu(*view_menu, Application::the().color_scheme_menu()));
|
||||
view_menu->addMenu(create_application_menu(*view_menu, Application::the().contrast_menu()));
|
||||
view_menu->addMenu(create_application_menu(*view_menu, Application::the().motion_menu()));
|
||||
view_menu->addSeparator();
|
||||
|
||||
auto* show_menubar = new QAction("Show &Menubar", this);
|
||||
show_menubar->setCheckable(true);
|
||||
|
@ -558,8 +477,6 @@ void BrowserWindow::initialize_tab(Tab* tab)
|
|||
|
||||
m_tabs_container->setTabIcon(m_tabs_container->indexOf(tab), tab->favicon());
|
||||
create_close_button_for_tab(tab);
|
||||
|
||||
tab->view().set_preferred_color_scheme(m_preferred_color_scheme);
|
||||
}
|
||||
|
||||
void BrowserWindow::activate_tab(int index)
|
||||
|
@ -740,55 +657,6 @@ void BrowserWindow::open_previous_tab()
|
|||
m_tabs_container->setCurrentIndex(next_index);
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_auto_contrast()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_contrast(Web::CSS::PreferredContrast::Auto);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_less_contrast()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_contrast(Web::CSS::PreferredContrast::Less);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_more_contrast()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_contrast(Web::CSS::PreferredContrast::More);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_no_preference_contrast()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_contrast(Web::CSS::PreferredContrast::NoPreference);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_auto_motion()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_motion(Web::CSS::PreferredMotion::Auto);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_no_preference_motion()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_motion(Web::CSS::PreferredMotion::NoPreference);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::enable_reduce_motion()
|
||||
{
|
||||
for_each_tab([](auto& tab) {
|
||||
tab.view().set_preferred_motion(Web::CSS::PreferredMotion::Reduce);
|
||||
});
|
||||
}
|
||||
|
||||
void BrowserWindow::zoom_in()
|
||||
{
|
||||
if (!m_current_tab)
|
||||
|
@ -847,14 +715,6 @@ void BrowserWindow::set_window_rect(Optional<Web::DevicePixels> x, Optional<Web:
|
|||
setGeometry(x.value().value(), y.value().value(), width.value().value(), height.value().value());
|
||||
}
|
||||
|
||||
void BrowserWindow::set_preferred_color_scheme(Web::CSS::PreferredColorScheme color_scheme)
|
||||
{
|
||||
m_preferred_color_scheme = color_scheme;
|
||||
for_each_tab([color_scheme](auto& tab) {
|
||||
tab.view().set_preferred_color_scheme(color_scheme);
|
||||
});
|
||||
}
|
||||
|
||||
bool BrowserWindow::event(QEvent* event)
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 0)
|
||||
|
|
|
@ -67,13 +67,6 @@ public slots:
|
|||
void open_next_tab();
|
||||
void open_previous_tab();
|
||||
void open_file();
|
||||
void enable_auto_contrast();
|
||||
void enable_less_contrast();
|
||||
void enable_more_contrast();
|
||||
void enable_no_preference_contrast();
|
||||
void enable_auto_motion();
|
||||
void enable_no_preference_motion();
|
||||
void enable_reduce_motion();
|
||||
void zoom_in();
|
||||
void zoom_out();
|
||||
void reset_zoom();
|
||||
|
@ -117,9 +110,6 @@ private:
|
|||
double m_device_pixel_ratio { 0 };
|
||||
double m_refresh_rate { 60.0 };
|
||||
|
||||
Web::CSS::PreferredColorScheme m_preferred_color_scheme { Web::CSS::PreferredColorScheme::Auto };
|
||||
void set_preferred_color_scheme(Web::CSS::PreferredColorScheme color_scheme);
|
||||
|
||||
void devtools_disabled();
|
||||
void devtools_enabled();
|
||||
|
||||
|
|
|
@ -14,9 +14,6 @@
|
|||
#include <LibGfx/Forward.h>
|
||||
#include <LibGfx/Rect.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/CSS/PreferredColorScheme.h>
|
||||
#include <LibWeb/CSS/PreferredContrast.h>
|
||||
#include <LibWeb/CSS/Selector.h>
|
||||
#include <LibWeb/Forward.h>
|
||||
#include <LibWeb/HTML/ActivateTab.h>
|
||||
#include <LibWebView/ViewImplementation.h>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue