From 7410736b0fe0432d3179f673bf8b495b40980e3e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 27 Sep 2021 16:34:06 +0200 Subject: [PATCH] LibWeb: Support window.devicePixelRatio This always returns 1 for now. I've added a FIXME about returning 2 in HiDPI mode. --- Userland/Libraries/LibWeb/Bindings/WindowObject.cpp | 9 +++++++++ Userland/Libraries/LibWeb/Bindings/WindowObject.h | 2 ++ Userland/Libraries/LibWeb/DOM/Window.cpp | 6 ++++++ Userland/Libraries/LibWeb/DOM/Window.h | 2 ++ 4 files changed, 19 insertions(+) diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp index 4ee9eea972..74ca7db523 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.cpp @@ -67,6 +67,7 @@ void WindowObject::initialize_global_object() define_native_accessor("screen", screen_getter, {}, JS::Attribute::Enumerable); define_native_accessor("innerWidth", inner_width_getter, {}, JS::Attribute::Enumerable); define_native_accessor("innerHeight", inner_height_getter, {}, JS::Attribute::Enumerable); + define_native_accessor("devicePixelRatio", device_pixel_ratio_getter, {}, JS::Attribute::Enumerable | JS::Attribute::Configurable); u8 attr = JS::Attribute::Writable | JS::Attribute::Enumerable | JS::Attribute::Configurable; define_native_function("alert", alert, 0, attr); define_native_function("confirm", confirm, 0, attr); @@ -506,6 +507,14 @@ JS_DEFINE_NATIVE_FUNCTION(WindowObject::inner_height_getter) return JS::Value(impl->inner_height()); } +JS_DEFINE_NATIVE_FUNCTION(WindowObject::device_pixel_ratio_getter) +{ + auto* impl = impl_from(vm, global_object); + if (!impl) + return {}; + return JS::Value(impl->device_pixel_ratio()); +} + JS_DEFINE_NATIVE_FUNCTION(WindowObject::get_computed_style) { auto* impl = impl_from(vm, global_object); diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObject.h b/Userland/Libraries/LibWeb/Bindings/WindowObject.h index eda6c5d72a..ffb21a6d50 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObject.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObject.h @@ -81,6 +81,8 @@ private: JS_DECLARE_NATIVE_FUNCTION(parent_getter); + JS_DECLARE_NATIVE_FUNCTION(device_pixel_ratio_getter); + JS_DECLARE_NATIVE_GETTER(scroll_x_getter); JS_DECLARE_NATIVE_GETTER(scroll_y_getter); JS_DECLARE_NATIVE_FUNCTION(scroll); diff --git a/Userland/Libraries/LibWeb/DOM/Window.cpp b/Userland/Libraries/LibWeb/DOM/Window.cpp index 217eb213e5..a93eb58885 100644 --- a/Userland/Libraries/LibWeb/DOM/Window.cpp +++ b/Userland/Libraries/LibWeb/DOM/Window.cpp @@ -309,4 +309,10 @@ void Window::queue_microtask(JS::FunctionObject& callback) }); } +float Window::device_pixel_ratio() const +{ + // FIXME: Return 2.0f if we're in HiDPI mode! + return 1.0f; +} + } diff --git a/Userland/Libraries/LibWeb/DOM/Window.h b/Userland/Libraries/LibWeb/DOM/Window.h index 9cd6f952a0..7c4152ac64 100644 --- a/Userland/Libraries/LibWeb/DOM/Window.h +++ b/Userland/Libraries/LibWeb/DOM/Window.h @@ -87,6 +87,8 @@ public: void fire_a_page_transition_event(FlyString event_name, bool persisted); + float device_pixel_ratio() const; + private: explicit Window(Document&);