summaryrefslogtreecommitdiff
path: root/Userland/Libraries
diff options
context:
space:
mode:
authorLinus Groh <mail@linusgroh.de>2021-04-04 00:12:37 +0200
committerAndreas Kling <kling@serenityos.org>2021-04-04 00:37:54 +0200
commite8739ddab76478b245b6c5c604988364a9191bd0 (patch)
tree5d9af0ab2b59df88fddd5b742e5475e0a78148f9 /Userland/Libraries
parent96b26ec125340b7a0b29754215dc24f372b6d737 (diff)
downloadserenity-e8739ddab76478b245b6c5c604988364a9191bd0.zip
LibWeb+WebContent: Keep track of screen rect
It is now possible to get the up-to-date screen rect from a Web::Page.
Diffstat (limited to 'Userland/Libraries')
-rw-r--r--Userland/Libraries/LibWeb/InProcessWebView.h4
-rw-r--r--Userland/Libraries/LibWeb/OutOfProcessWebView.cpp7
-rw-r--r--Userland/Libraries/LibWeb/OutOfProcessWebView.h1
-rw-r--r--Userland/Libraries/LibWeb/Page/Page.cpp5
-rw-r--r--Userland/Libraries/LibWeb/Page/Page.h2
5 files changed, 18 insertions, 1 deletions
diff --git a/Userland/Libraries/LibWeb/InProcessWebView.h b/Userland/Libraries/LibWeb/InProcessWebView.h
index 81538df551..7b20928bbf 100644
--- a/Userland/Libraries/LibWeb/InProcessWebView.h
+++ b/Userland/Libraries/LibWeb/InProcessWebView.h
@@ -27,6 +27,7 @@
#pragma once
#include <AK/URL.h>
+#include <LibGUI/Desktop.h>
#include <LibGUI/ScrollableWidget.h>
#include <LibWeb/DOM/Document.h>
#include <LibWeb/Page/Page.h>
@@ -85,8 +86,9 @@ private:
virtual void did_scroll() override;
// ^Web::PageClient
- virtual Gfx::Palette palette() const override { return GUI::ScrollableWidget::palette(); }
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_set_document_in_main_frame(DOM::Document*) override;
virtual void page_did_start_loading(const URL&) override;
diff --git a/Userland/Libraries/LibWeb/OutOfProcessWebView.cpp b/Userland/Libraries/LibWeb/OutOfProcessWebView.cpp
index 637dc76c38..c2c36024de 100644
--- a/Userland/Libraries/LibWeb/OutOfProcessWebView.cpp
+++ b/Userland/Libraries/LibWeb/OutOfProcessWebView.cpp
@@ -29,6 +29,7 @@
#include <AK/String.h>
#include <AK/URLParser.h>
#include <LibGUI/Application.h>
+#include <LibGUI/Desktop.h>
#include <LibGUI/InputBox.h>
#include <LibGUI/MessageBox.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::UpdateScreenRect(GUI::Desktop::the().rect()));
}
void OutOfProcessWebView::load(const URL& url)
@@ -208,6 +210,11 @@ void OutOfProcessWebView::theme_change_event(GUI::ThemeChangeEvent& event)
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)
{
if (m_client_state.back_bitmap_id == bitmap_id) {
diff --git a/Userland/Libraries/LibWeb/OutOfProcessWebView.h b/Userland/Libraries/LibWeb/OutOfProcessWebView.h
index e0fccc6ae7..b634bc1077 100644
--- a/Userland/Libraries/LibWeb/OutOfProcessWebView.h
+++ b/Userland/Libraries/LibWeb/OutOfProcessWebView.h
@@ -91,6 +91,7 @@ private:
virtual void mousewheel_event(GUI::MouseEvent&) override;
virtual void keydown_event(GUI::KeyEvent&) override;
virtual void theme_change_event(GUI::ThemeChangeEvent&) override;
+ virtual void screen_rect_change_event(GUI::ScreenRectChangeEvent&) override;
// ^ScrollableWidget
virtual void did_scroll() override;
diff --git a/Userland/Libraries/LibWeb/Page/Page.cpp b/Userland/Libraries/LibWeb/Page/Page.cpp
index 1ec5d15666..96b726189f 100644
--- a/Userland/Libraries/LibWeb/Page/Page.cpp
+++ b/Userland/Libraries/LibWeb/Page/Page.cpp
@@ -72,6 +72,11 @@ Gfx::Palette Page::palette() const
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)
{
return main_frame().event_handler().handle_mousewheel(position, button, modifiers, wheel_delta);
diff --git a/Userland/Libraries/LibWeb/Page/Page.h b/Userland/Libraries/LibWeb/Page/Page.h
index a45072edab..6dfe853013 100644
--- a/Userland/Libraries/LibWeb/Page/Page.h
+++ b/Userland/Libraries/LibWeb/Page/Page.h
@@ -74,6 +74,7 @@ public:
bool handle_keydown(KeyCode, unsigned modifiers, u32 code_point);
Gfx::Palette palette() const;
+ Gfx::IntRect screen_rect() const;
private:
PageClient& m_client;
@@ -86,6 +87,7 @@ class PageClient {
public:
virtual bool is_multi_process() 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_change_title(const String&) { }
virtual void page_did_start_loading(const URL&) { }