LibWebView+UI: Generate the preferred color, contrast, and motion menus

This commit is contained in:
Timothy Flynn 2025-09-03 11:23:09 -04:00 committed by Tim Flynn
commit 7d6ea99d0d
Notes: github-actions[bot] 2025-09-11 18:25:01 +00:00
12 changed files with 95 additions and 408 deletions

View file

@ -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);

View file

@ -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;

View file

@ -53,6 +53,10 @@ enum class ActionID {
ToggleMediaControlsState,
ToggleMediaLoopState,
PreferredColorScheme,
PreferredContrast,
PreferredMotion,
DumpSessionHistoryTree,
DumpDOMTree,
DumpLayoutTree,

View file

@ -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

View file

@ -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];
for (TabController* controller in self.managed_tabs) {
auto* tab = (Tab*)[controller window];
[[tab web_view] handleDisplayRefreshRateChange];
}
- (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];
}
return YES;
}
@end

View file

@ -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;

View file

@ -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)

View file

@ -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()) {

View file

@ -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 };
};
}

View file

@ -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)

View file

@ -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();

View file

@ -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>