diff --git a/view/nsView.cpp b/view/nsView.cpp index 3f17afc92c4c4..8acedb73d7313 100644 --- a/view/nsView.cpp +++ b/view/nsView.cpp @@ -320,6 +320,7 @@ void nsView::DoResetWidgetBounds(bool aMoveOnly, // Stash a copy of these and use them so we can handle this being deleted (say // from sync painting/flushing from Show/Move/Resize on the widget). LayoutDeviceIntRect newBounds; + RefPtr dx = mViewManager->GetDeviceContext(); nsWindowType type = widget->WindowType(); @@ -359,8 +360,7 @@ void nsView::DoResetWidgetBounds(bool aMoveOnly, // because of the potential for device-pixel coordinate spaces for mixed // hidpi/lodpi screens to overlap each other and result in bad placement // (bug 814434). - - DesktopToLayoutDeviceScale scale = widget->GetDesktopToDeviceScaleByScreen(); + DesktopToLayoutDeviceScale scale = dx->GetDesktopToDeviceScale(); DesktopRect deskRect = newBounds / scale; if (changedPos) { diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp index c2604fbfaaf04..f3d4676baa871 100644 --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -57,7 +57,6 @@ #if defined(MOZ_WAYLAND) #include -#include "nsView.h" #endif #include "nsGkAtoms.h" @@ -842,37 +841,6 @@ nsWindow::GetDesktopToDeviceScale() return DesktopToLayoutDeviceScale(1.0); } -DesktopToLayoutDeviceScale -nsWindow::GetDesktopToDeviceScaleByScreen() -{ -#ifdef MOZ_WAYLAND - GdkDisplay* gdkDisplay = gdk_display_get_default(); - // In Wayland there's no way to get absolute position of the window and use it to - // determine the screen factor of the monitor on which the window is placed. - // The window is notified of the current scale factor but not at this point, - // so the GdkScaleFactor can return wrong value which can lead to wrong popup - // placement. - // We need to use parent's window scale factor for the new one. - if (GDK_IS_WAYLAND_DISPLAY(gdkDisplay)) { - nsView* view = nsView::GetViewFor(this); - if (view) { - nsView* parentView = view->GetParent(); - if (parentView) { - nsIWidget* parentWidget = parentView->GetNearestWidget(nullptr); - if (parentWidget) { - return DesktopToLayoutDeviceScale(parentWidget->RoundsWidgetCoordinatesTo()); - } else { - NS_WARNING("Widget has no parent"); - } - } - } else { - NS_WARNING("Cannot find widget view"); - } - } -#endif - return nsBaseWidget::GetDesktopToDeviceScale(); -} - void nsWindow::SetParent(nsIWidget *aNewParent) { diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h index f0ad1ebaf83b7..d3f0182745d59 100644 --- a/widget/gtk/nsWindow.h +++ b/widget/gtk/nsWindow.h @@ -125,7 +125,6 @@ class nsWindow final : public nsBaseWidget virtual float GetDPI() override; virtual double GetDefaultScaleInternal() override; mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() override; - mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() override; virtual void SetParent(nsIWidget* aNewParent) override; virtual void SetModal(bool aModal) override; virtual bool IsVisible() const override; diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h index 481186045359b..947424ca2390d 100644 --- a/widget/nsBaseWidget.h +++ b/widget/nsBaseWidget.h @@ -24,8 +24,6 @@ #include "nsIWidgetListener.h" #include "nsPIDOMWindow.h" #include "nsWeakReference.h" -#include "nsView.h" -#include "nsViewManager.h" #include #if defined(XP_WIN) @@ -240,10 +238,6 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() override { return mozilla::DesktopToLayoutDeviceScale(1.0); } - mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() override { - return (nsView::GetViewFor(this)->GetViewManager()->GetDeviceContext())->GetDesktopToDeviceScale(); - } - virtual void ConstrainPosition(bool aAllowSlop, int32_t *aX, int32_t *aY) override {} diff --git a/widget/nsIWidget.h b/widget/nsIWidget.h index e8fa4ec883008..2ae2361248834 100644 --- a/widget/nsIWidget.h +++ b/widget/nsIWidget.h @@ -577,13 +577,6 @@ class nsIWidget : public nsISupports */ virtual mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScale() = 0; - /** - * Return the scaling factor between device pixels and the platform- - * dependent "desktop pixels" by looking up the screen by the position - * of the widget. - */ - virtual mozilla::DesktopToLayoutDeviceScale GetDesktopToDeviceScaleByScreen() = 0; - /** * Return the default scale factor for the window. This is the * default number of device pixels per CSS pixel to use. This should