diff --git a/Libraries/LibWebView/Application.cpp b/Libraries/LibWebView/Application.cpp index c2fa3903dbc..20b32163c7a 100644 --- a/Libraries/LibWebView/Application.cpp +++ b/Libraries/LibWebView/Application.cpp @@ -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>()->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>()->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>()->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& 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); diff --git a/Libraries/LibWebView/Application.h b/Libraries/LibWebView/Application.h index 1a9506af719..d5f4eaa4326 100644 --- a/Libraries/LibWebView/Application.h +++ b/Libraries/LibWebView/Application.h @@ -18,6 +18,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -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&); @@ -170,6 +176,15 @@ private: RefPtr m_select_all_action; RefPtr m_view_source_action; + RefPtr m_color_scheme_menu; + Web::CSS::PreferredColorScheme m_color_scheme { Web::CSS::PreferredColorScheme::Auto }; + + RefPtr m_contrast_menu; + Web::CSS::PreferredContrast m_contrast { Web::CSS::PreferredContrast::Auto }; + + RefPtr m_motion_menu; + Web::CSS::PreferredMotion m_motion { Web::CSS::PreferredMotion::Auto }; + RefPtr m_debug_menu; RefPtr m_show_line_box_borders_action; RefPtr m_enable_scripting_action; diff --git a/Libraries/LibWebView/Menu.h b/Libraries/LibWebView/Menu.h index 72cfadb9144..2f600a4241e 100644 --- a/Libraries/LibWebView/Menu.h +++ b/Libraries/LibWebView/Menu.h @@ -53,6 +53,10 @@ enum class ActionID { ToggleMediaControlsState, ToggleMediaLoopState, + PreferredColorScheme, + PreferredContrast, + PreferredMotion, + DumpSessionHistoryTree, DumpDOMTree, DumpLayoutTree, diff --git a/UI/AppKit/Application/ApplicationDelegate.h b/UI/AppKit/Application/ApplicationDelegate.h index 1365efc01f5..7ff9bc66386 100644 --- a/UI/AppKit/Application/ApplicationDelegate.h +++ b/UI/AppKit/Application/ApplicationDelegate.h @@ -9,9 +9,6 @@ #include #include #include -#include -#include -#include #include #import @@ -42,8 +39,4 @@ - (void)removeTab:(nonnull TabController*)controller; -- (Web::CSS::PreferredColorScheme)preferredColorScheme; -- (Web::CSS::PreferredContrast)preferredContrast; -- (Web::CSS::PreferredMotion)preferredMotion; - @end diff --git a/UI/AppKit/Application/ApplicationDelegate.mm b/UI/AppKit/Application/ApplicationDelegate.mm index 78299ba2c71..9be44a49223 100644 --- a/UI/AppKit/Application/ApplicationDelegate.mm +++ b/UI/AppKit/Application/ApplicationDelegate.mm @@ -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* 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 diff --git a/UI/AppKit/Interface/LadybirdWebView.h b/UI/AppKit/Interface/LadybirdWebView.h index dfdd9336654..d5fb7f93aa5 100644 --- a/UI/AppKit/Interface/LadybirdWebView.h +++ b/UI/AppKit/Interface/LadybirdWebView.h @@ -7,11 +7,9 @@ #pragma once #include +#include #include #include -#include -#include -#include #include #include #include @@ -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; diff --git a/UI/AppKit/Interface/LadybirdWebView.mm b/UI/AppKit/Interface/LadybirdWebView.mm index 0fb237c1ca0..d2a06eabcd9 100644 --- a/UI/AppKit/Interface/LadybirdWebView.mm +++ b/UI/AppKit/Interface/LadybirdWebView.mm @@ -93,7 +93,6 @@ struct HideCursor { if (self = [super init]) { self.observer = observer; - auto* delegate = (ApplicationDelegate*)[NSApp delegate]; auto* screens = [NSScreen screens]; Vector 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) diff --git a/UI/AppKit/Interface/LadybirdWebViewBridge.cpp b/UI/AppKit/Interface/LadybirdWebViewBridge.cpp index 9bbdfb32182..7929916a58d 100644 --- a/UI/AppKit/Interface/LadybirdWebViewBridge.cpp +++ b/UI/AppKit/Interface/LadybirdWebViewBridge.cpp @@ -20,16 +20,13 @@ static T scale_for_device(T size, float device_pixel_ratio) return size.template to_type().scaled(device_pixel_ratio).template to_type(); } -ErrorOr> WebViewBridge::create(Vector 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> WebViewBridge::create(Vector 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 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 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(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()).to_type(); @@ -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()) { diff --git a/UI/AppKit/Interface/LadybirdWebViewBridge.h b/UI/AppKit/Interface/LadybirdWebViewBridge.h index e8623ac2a1e..629e3cf94e0 100644 --- a/UI/AppKit/Interface/LadybirdWebViewBridge.h +++ b/UI/AppKit/Interface/LadybirdWebViewBridge.h @@ -10,9 +10,6 @@ #include #include #include -#include -#include -#include #include #include @@ -20,7 +17,7 @@ namespace Ladybird { class WebViewBridge final : public WebView::ViewImplementation { public: - static ErrorOr> create(Vector screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion); + static ErrorOr> create(Vector 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 on_zoom_level_changed; private: - WebViewBridge(Vector screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion); + WebViewBridge(Vector 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 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 }; }; } diff --git a/UI/Qt/BrowserWindow.cpp b/UI/Qt/BrowserWindow.cpp index d11d01cd661..b0ad3901657 100644 --- a/UI/Qt/BrowserWindow.cpp +++ b/UI/Qt/BrowserWindow.cpp @@ -9,9 +9,6 @@ */ #include -#include -#include -#include #include #include #include @@ -220,88 +217,10 @@ BrowserWindow::BrowserWindow(Vector 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 x, Optional= QT_VERSION_CHECK(6, 6, 0) diff --git a/UI/Qt/BrowserWindow.h b/UI/Qt/BrowserWindow.h index 258086fa1e8..2da8737ba7f 100644 --- a/UI/Qt/BrowserWindow.h +++ b/UI/Qt/BrowserWindow.h @@ -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(); diff --git a/UI/Qt/WebContentView.h b/UI/Qt/WebContentView.h index 389857b317d..8cd71500329 100644 --- a/UI/Qt/WebContentView.h +++ b/UI/Qt/WebContentView.h @@ -14,9 +14,6 @@ #include #include #include -#include -#include -#include #include #include #include