1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 19:37:36 +00:00

LibWeb+WebContent: Keep track of screen rect

It is now possible to get the up-to-date screen rect from a Web::Page.
This commit is contained in:
Linus Groh 2021-04-04 00:12:37 +02:00 committed by Andreas Kling
parent 96b26ec125
commit e8739ddab7
9 changed files with 29 additions and 1 deletions

View file

@ -27,6 +27,7 @@
#pragma once #pragma once
#include <AK/URL.h> #include <AK/URL.h>
#include <LibGUI/Desktop.h>
#include <LibGUI/ScrollableWidget.h> #include <LibGUI/ScrollableWidget.h>
#include <LibWeb/DOM/Document.h> #include <LibWeb/DOM/Document.h>
#include <LibWeb/Page/Page.h> #include <LibWeb/Page/Page.h>
@ -85,8 +86,9 @@ private:
virtual void did_scroll() override; virtual void did_scroll() override;
// ^Web::PageClient // ^Web::PageClient
virtual Gfx::Palette palette() const override { return GUI::ScrollableWidget::palette(); }
virtual bool is_multi_process() const override { return false; } virtual bool is_multi_process() const override { return false; }
virtual Gfx::Palette palette() const override { return GUI::ScrollableWidget::palette(); }
virtual Gfx::IntRect screen_rect() const override { return GUI::Desktop::the().rect(); }
virtual void page_did_change_title(const String&) override; virtual void page_did_change_title(const String&) override;
virtual void page_did_set_document_in_main_frame(DOM::Document*) override; virtual void page_did_set_document_in_main_frame(DOM::Document*) override;
virtual void page_did_start_loading(const URL&) override; virtual void page_did_start_loading(const URL&) override;

View file

@ -29,6 +29,7 @@
#include <AK/String.h> #include <AK/String.h>
#include <AK/URLParser.h> #include <AK/URLParser.h>
#include <LibGUI/Application.h> #include <LibGUI/Application.h>
#include <LibGUI/Desktop.h>
#include <LibGUI/InputBox.h> #include <LibGUI/InputBox.h>
#include <LibGUI/MessageBox.h> #include <LibGUI/MessageBox.h>
#include <LibGUI/Painter.h> #include <LibGUI/Painter.h>
@ -88,6 +89,7 @@ void OutOfProcessWebView::create_client()
}; };
client().post_message(Messages::WebContentServer::UpdateSystemTheme(Gfx::current_system_theme_buffer())); client().post_message(Messages::WebContentServer::UpdateSystemTheme(Gfx::current_system_theme_buffer()));
client().post_message(Messages::WebContentServer::UpdateScreenRect(GUI::Desktop::the().rect()));
} }
void OutOfProcessWebView::load(const URL& url) void OutOfProcessWebView::load(const URL& url)
@ -208,6 +210,11 @@ void OutOfProcessWebView::theme_change_event(GUI::ThemeChangeEvent& event)
request_repaint(); request_repaint();
} }
void OutOfProcessWebView::screen_rect_change_event(GUI::ScreenRectChangeEvent& event)
{
client().post_message(Messages::WebContentServer::UpdateScreenRect(event.rect()));
}
void OutOfProcessWebView::notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id) void OutOfProcessWebView::notify_server_did_paint(Badge<WebContentClient>, i32 bitmap_id)
{ {
if (m_client_state.back_bitmap_id == bitmap_id) { if (m_client_state.back_bitmap_id == bitmap_id) {

View file

@ -91,6 +91,7 @@ private:
virtual void mousewheel_event(GUI::MouseEvent&) override; virtual void mousewheel_event(GUI::MouseEvent&) override;
virtual void keydown_event(GUI::KeyEvent&) override; virtual void keydown_event(GUI::KeyEvent&) override;
virtual void theme_change_event(GUI::ThemeChangeEvent&) override; virtual void theme_change_event(GUI::ThemeChangeEvent&) override;
virtual void screen_rect_change_event(GUI::ScreenRectChangeEvent&) override;
// ^ScrollableWidget // ^ScrollableWidget
virtual void did_scroll() override; virtual void did_scroll() override;

View file

@ -72,6 +72,11 @@ Gfx::Palette Page::palette() const
return m_client.palette(); return m_client.palette();
} }
Gfx::IntRect Page::screen_rect() const
{
return m_client.screen_rect();
}
bool Page::handle_mousewheel(const Gfx::IntPoint& position, unsigned button, unsigned modifiers, int wheel_delta) bool Page::handle_mousewheel(const Gfx::IntPoint& position, unsigned button, unsigned modifiers, int wheel_delta)
{ {
return main_frame().event_handler().handle_mousewheel(position, button, modifiers, wheel_delta); return main_frame().event_handler().handle_mousewheel(position, button, modifiers, wheel_delta);

View file

@ -74,6 +74,7 @@ public:
bool handle_keydown(KeyCode, unsigned modifiers, u32 code_point); bool handle_keydown(KeyCode, unsigned modifiers, u32 code_point);
Gfx::Palette palette() const; Gfx::Palette palette() const;
Gfx::IntRect screen_rect() const;
private: private:
PageClient& m_client; PageClient& m_client;
@ -86,6 +87,7 @@ class PageClient {
public: public:
virtual bool is_multi_process() const = 0; virtual bool is_multi_process() const = 0;
virtual Gfx::Palette palette() const = 0; virtual Gfx::Palette palette() const = 0;
virtual Gfx::IntRect screen_rect() const = 0;
virtual void page_did_set_document_in_main_frame(DOM::Document*) { } virtual void page_did_set_document_in_main_frame(DOM::Document*) { }
virtual void page_did_change_title(const String&) { } virtual void page_did_change_title(const String&) { }
virtual void page_did_start_loading(const URL&) { } virtual void page_did_start_loading(const URL&) { }

View file

@ -89,6 +89,11 @@ void ClientConnection::handle(const Messages::WebContentServer::UpdateSystemThem
m_page_host->set_palette_impl(*impl); m_page_host->set_palette_impl(*impl);
} }
void ClientConnection::handle(const Messages::WebContentServer::UpdateScreenRect& message)
{
m_page_host->set_screen_rect(message.rect());
}
void ClientConnection::handle(const Messages::WebContentServer::LoadURL& message) void ClientConnection::handle(const Messages::WebContentServer::LoadURL& message)
{ {
dbgln_if(SPAM_DEBUG, "handle: WebContentServer::LoadURL: url={}", message.url()); dbgln_if(SPAM_DEBUG, "handle: WebContentServer::LoadURL: url={}", message.url());

View file

@ -54,6 +54,7 @@ private:
virtual OwnPtr<Messages::WebContentServer::GreetResponse> handle(const Messages::WebContentServer::Greet&) override; virtual OwnPtr<Messages::WebContentServer::GreetResponse> handle(const Messages::WebContentServer::Greet&) override;
virtual void handle(const Messages::WebContentServer::UpdateSystemTheme&) override; virtual void handle(const Messages::WebContentServer::UpdateSystemTheme&) override;
virtual void handle(const Messages::WebContentServer::UpdateScreenRect&) override;
virtual void handle(const Messages::WebContentServer::LoadURL&) override; virtual void handle(const Messages::WebContentServer::LoadURL&) override;
virtual void handle(const Messages::WebContentServer::LoadHTML&) override; virtual void handle(const Messages::WebContentServer::LoadHTML&) override;
virtual void handle(const Messages::WebContentServer::Paint&) override; virtual void handle(const Messages::WebContentServer::Paint&) override;

View file

@ -26,6 +26,7 @@
#pragma once #pragma once
#include <LibGfx/Rect.h>
#include <LibWeb/Page/Page.h> #include <LibWeb/Page/Page.h>
namespace WebContent { namespace WebContent {
@ -47,6 +48,7 @@ public:
void set_palette_impl(const Gfx::PaletteImpl&); void set_palette_impl(const Gfx::PaletteImpl&);
void set_viewport_rect(const Gfx::IntRect&); void set_viewport_rect(const Gfx::IntRect&);
void set_screen_rect(const Gfx::IntRect& rect) { m_screen_rect = rect; };
void set_should_show_line_box_borders(bool b) { m_should_show_line_box_borders = b; } void set_should_show_line_box_borders(bool b) { m_should_show_line_box_borders = b; }
@ -54,6 +56,7 @@ private:
// ^PageClient // ^PageClient
virtual bool is_multi_process() const override { return true; } virtual bool is_multi_process() const override { return true; }
virtual Gfx::Palette palette() const override; virtual Gfx::Palette palette() const override;
virtual Gfx::IntRect screen_rect() const override { return m_screen_rect; }
virtual void page_did_invalidate(const Gfx::IntRect&) override; virtual void page_did_invalidate(const Gfx::IntRect&) override;
virtual void page_did_change_selection() override; virtual void page_did_change_selection() override;
virtual void page_did_request_cursor_change(Gfx::StandardCursor) override; virtual void page_did_request_cursor_change(Gfx::StandardCursor) override;
@ -84,6 +87,7 @@ private:
ClientConnection& m_client; ClientConnection& m_client;
NonnullOwnPtr<Web::Page> m_page; NonnullOwnPtr<Web::Page> m_page;
RefPtr<Gfx::PaletteImpl> m_palette_impl; RefPtr<Gfx::PaletteImpl> m_palette_impl;
Gfx::IntRect m_screen_rect;
bool m_should_show_line_box_borders { false }; bool m_should_show_line_box_borders { false };
}; };

View file

@ -3,6 +3,7 @@ endpoint WebContentServer = 89
Greet() => () Greet() => ()
UpdateSystemTheme(Core::AnonymousBuffer theme_buffer) =| UpdateSystemTheme(Core::AnonymousBuffer theme_buffer) =|
UpdateScreenRect(Gfx::IntRect rect) =|
LoadURL(URL url) =| LoadURL(URL url) =|
LoadHTML(String html, URL url) =| LoadHTML(String html, URL url) =|