/* * Copyright (c) 2022-2023, Andreas Kling * Copyright (c) 2023, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include "Types.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include class QTextEdit; class QLineEdit; namespace WebView { class WebContentClient; } using WebView::WebContentClient; namespace Ladybird { class Tab; class WebContentView final : public QAbstractScrollArea , public WebView::ViewImplementation { Q_OBJECT public: explicit WebContentView(StringView webdriver_content_ipc_path, WebView::EnableCallgrindProfiling, WebView::UseJavaScriptBytecode, UseLagomNetworking); virtual ~WebContentView() override; Function on_tab_open_request; virtual void paintEvent(QPaintEvent*) override; virtual void resizeEvent(QResizeEvent*) override; virtual void wheelEvent(QWheelEvent*) override; virtual void mouseMoveEvent(QMouseEvent*) override; virtual void mousePressEvent(QMouseEvent*) override; virtual void mouseReleaseEvent(QMouseEvent*) override; virtual void mouseDoubleClickEvent(QMouseEvent*) override; virtual void dragEnterEvent(QDragEnterEvent*) override; virtual void dropEvent(QDropEvent*) override; virtual void keyPressEvent(QKeyEvent* event) override; virtual void keyReleaseEvent(QKeyEvent* event) override; virtual void showEvent(QShowEvent*) override; virtual void hideEvent(QHideEvent*) override; virtual void focusInEvent(QFocusEvent*) override; virtual void focusOutEvent(QFocusEvent*) override; virtual bool event(QEvent*) override; ErrorOr dump_layout_tree(); void set_viewport_rect(Gfx::IntRect); void set_window_size(Gfx::IntSize); void set_window_position(Gfx::IntPoint); enum class PaletteMode { Default, Dark, }; void update_palette(PaletteMode = PaletteMode::Default); virtual void notify_server_did_layout(Badge, Gfx::IntSize content_size) override; virtual void notify_server_did_paint(Badge, i32 bitmap_id, Gfx::IntSize) override; virtual void notify_server_did_invalidate_content_rect(Badge, Gfx::IntRect const&) override; virtual void notify_server_did_change_selection(Badge) override; virtual void notify_server_did_request_cursor_change(Badge, Gfx::StandardCursor cursor) override; virtual void notify_server_did_request_scroll(Badge, i32, i32) override; virtual void notify_server_did_request_scroll_to(Badge, Gfx::IntPoint) override; virtual void notify_server_did_request_scroll_into_view(Badge, Gfx::IntRect const&) override; virtual void notify_server_did_enter_tooltip_area(Badge, Gfx::IntPoint, DeprecatedString const&) override; virtual void notify_server_did_leave_tooltip_area(Badge) override; virtual void notify_server_did_request_alert(Badge, String const& message) override; virtual void notify_server_did_request_confirm(Badge, String const& message) override; virtual void notify_server_did_request_prompt(Badge, String const& message, String const& default_) override; virtual void notify_server_did_request_set_prompt_text(Badge, String const& message) override; virtual void notify_server_did_request_accept_dialog(Badge) override; virtual void notify_server_did_request_dismiss_dialog(Badge) override; virtual void notify_server_did_request_file(Badge, DeprecatedString const& path, i32) override; virtual void notify_server_did_finish_handling_input_event(bool event_was_accepted) override; signals: void urls_dropped(QList const&); private: // ^WebView::ViewImplementation virtual void create_client(WebView::EnableCallgrindProfiling = WebView::EnableCallgrindProfiling::No) override; virtual void update_zoom() override; virtual Gfx::IntRect viewport_rect() 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; void update_viewport_rect(); qreal m_inverse_pixel_scaling_ratio { 1.0 }; bool m_should_show_line_box_borders { false }; UseLagomNetworking m_use_lagom_networking {}; QPointer m_dialog; Gfx::IntRect m_viewport_rect; StringView m_webdriver_content_ipc_path; }; }