mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-27 02:47:27 +00:00
Currently, if we want to add a new e.g. WebContent command line option, we have to add it to all of Qt, AppKit, and headless-browser. (Or worse, we only add it to one of these, and we have feature disparity). To prevent this, this moves command line flags to WebView::Application. The flags are assigned to ChromeOptions and WebContentOptions structs. Each chrome can still add its platform-specific options; for example, the Qt chrome has a flag to enable Qt networking. There should be no behavior change here, other than that AppKit will now support command line flags that were previously only supported by Qt.
75 lines
2.7 KiB
C++
75 lines
2.7 KiB
C++
/*
|
|
* Copyright (c) 2023-2024, Tim Flynn <trflynn89@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Vector.h>
|
|
#include <LibGfx/Point.h>
|
|
#include <LibGfx/Rect.h>
|
|
#include <LibGfx/Size.h>
|
|
#include <LibGfx/StandardCursor.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>
|
|
|
|
namespace Ladybird {
|
|
|
|
class WebViewBridge final : public WebView::ViewImplementation {
|
|
public:
|
|
static ErrorOr<NonnullOwnPtr<WebViewBridge>> create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
|
|
virtual ~WebViewBridge() override;
|
|
|
|
virtual void initialize_client(CreateNewClient = CreateNewClient::Yes) override;
|
|
|
|
float device_pixel_ratio() const { return m_device_pixel_ratio; }
|
|
void set_device_pixel_ratio(float device_pixel_ratio);
|
|
float inverse_device_pixel_ratio() const { return 1.0f / m_device_pixel_ratio; }
|
|
|
|
void set_system_visibility_state(bool is_visible);
|
|
|
|
enum class ForResize {
|
|
Yes,
|
|
No,
|
|
};
|
|
void set_viewport_rect(Gfx::IntRect, ForResize = ForResize::No);
|
|
|
|
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::KeyEvent);
|
|
|
|
struct Paintable {
|
|
Gfx::Bitmap& bitmap;
|
|
Gfx::IntSize bitmap_size;
|
|
};
|
|
Optional<Paintable> paintable();
|
|
|
|
Function<NonnullRefPtr<WebView::WebContentClient>()> on_request_web_content;
|
|
Function<void()> on_zoom_level_changed;
|
|
|
|
private:
|
|
WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme, Web::CSS::PreferredContrast, Web::CSS::PreferredMotion);
|
|
|
|
virtual void update_zoom() override;
|
|
virtual Web::DevicePixelSize viewport_size() const override;
|
|
virtual Gfx::IntPoint to_content_position(Gfx::IntPoint widget_position) const override;
|
|
virtual Gfx::IntPoint to_widget_position(Gfx::IntPoint content_position) const override;
|
|
|
|
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 };
|
|
};
|
|
|
|
}
|