فهرست منبع

LibWeb: Dispatch "resize" events on the Window object

It's a little awkward that we do this in two places, but IPWV and OOPWV
currently implement resizing a little differently from each other so we
need to cover both paths.
Andreas Kling 4 سال پیش
والد
کامیت
efc6060df0
2فایلهای تغییر یافته به همراه13 افزوده شده و 4 حذف شده
  1. 10 3
      Userland/Libraries/LibWeb/Page/Frame.cpp
  2. 3 1
      Userland/Libraries/LibWeb/UIEvents/EventNames.h

+ 10 - 3
Userland/Libraries/LibWeb/Page/Frame.cpp

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -25,12 +25,15 @@
  */
 
 #include <LibWeb/DOM/Document.h>
+#include <LibWeb/DOM/Event.h>
+#include <LibWeb/DOM/Window.h>
 #include <LibWeb/HTML/HTMLAnchorElement.h>
 #include <LibWeb/InProcessWebView.h>
 #include <LibWeb/Layout/BreakNode.h>
 #include <LibWeb/Layout/InitialContainingBlockBox.h>
 #include <LibWeb/Layout/TextNode.h>
 #include <LibWeb/Page/Frame.h>
+#include <LibWeb/UIEvents/EventNames.h>
 
 namespace Web {
 
@@ -113,8 +116,10 @@ void Frame::set_viewport_rect(const Gfx::IntRect& rect)
 
     if (m_size != rect.size()) {
         m_size = rect.size();
-        if (m_document)
+        if (m_document) {
+            m_document->window().dispatch_event(DOM::Event::create(UIEvents::EventNames::resize));
             m_document->update_layout();
+        }
         did_change = true;
     }
 
@@ -134,8 +139,10 @@ void Frame::set_size(const Gfx::IntSize& size)
     if (m_size == size)
         return;
     m_size = size;
-    if (m_document)
+    if (m_document) {
+        m_document->window().dispatch_event(DOM::Event::create(UIEvents::EventNames::resize));
         m_document->update_layout();
+    }
 
     for (auto* client : m_viewport_clients)
         client->frame_did_set_viewport_rect(viewport_rect());

+ 3 - 1
Userland/Libraries/LibWeb/UIEvents/EventNames.h

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2020, the SerenityOS developers.
+ * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -40,7 +41,8 @@ namespace Web::UIEvents::EventNames {
     __ENUMERATE_UI_EVENT(mousemove)  \
     __ENUMERATE_UI_EVENT(mouseout)   \
     __ENUMERATE_UI_EVENT(mouseover)  \
-    __ENUMERATE_UI_EVENT(mouseup)
+    __ENUMERATE_UI_EVENT(mouseup)    \
+    __ENUMERATE_UI_EVENT(resize)
 
 #define __ENUMERATE_UI_EVENT(name) extern FlyString name;
 ENUMERATE_UI_EVENTS