Browse Source

LibWeb: Move window.scroll{X,Y} from wrapper into DOM::Window

The less we do in WindowObject, the easier it will be to eventually
auto-generate the entire thing.
Andreas Kling 3 năm trước cách đây
mục cha
commit
2c0987c93b

+ 2 - 6
Userland/Libraries/LibWeb/Bindings/WindowObject.cpp

@@ -510,9 +510,7 @@ JS_DEFINE_NATIVE_GETTER(WindowObject::scroll_x_getter)
     auto* impl = impl_from(vm, global_object);
     if (!impl)
         return {};
-    if (!impl->page())
-        return JS::Value(0);
-    return JS::Value(impl->page()->top_level_browsing_context().viewport_scroll_offset().x());
+    return JS::Value(impl->scroll_x());
 }
 
 // https://www.w3.org/TR/cssom-view/#dom-window-scrolly
@@ -521,9 +519,7 @@ JS_DEFINE_NATIVE_GETTER(WindowObject::scroll_y_getter)
     auto* impl = impl_from(vm, global_object);
     if (!impl)
         return {};
-    if (!impl->page())
-        return JS::Value(0);
-    return JS::Value(impl->page()->top_level_browsing_context().viewport_scroll_offset().y());
+    return JS::Value(impl->scroll_y());
 }
 
 enum class ScrollBehavior {

+ 16 - 0
Userland/Libraries/LibWeb/DOM/Window.cpp

@@ -260,4 +260,20 @@ NonnullRefPtr<CSS::MediaQueryList> Window::match_media(String media)
     return CSS::MediaQueryList::create(associated_document(), move(media));
 }
 
+// https://www.w3.org/TR/cssom-view/#dom-window-scrollx
+float Window::scroll_x() const
+{
+    if (auto* page = this->page())
+        return page->top_level_browsing_context().viewport_scroll_offset().x();
+    return 0;
+}
+
+// https://www.w3.org/TR/cssom-view/#dom-window-scrolly
+float Window::scroll_y() const
+{
+    if (auto* page = this->page())
+        return page->top_level_browsing_context().viewport_scroll_offset().y();
+    return 0;
+}
+
 }

+ 3 - 0
Userland/Libraries/LibWeb/DOM/Window.h

@@ -80,6 +80,9 @@ public:
     NonnullRefPtr<CSS::CSSStyleDeclaration> get_computed_style(DOM::Element&) const;
     NonnullRefPtr<CSS::MediaQueryList> match_media(String);
 
+    float scroll_x() const;
+    float scroll_y() const;
+
 private:
     explicit Window(Document&);