Loading layout/generic/nsContainerFrame.cpp +10 −13 Original line number Diff line number Diff line Loading @@ -869,19 +869,16 @@ void nsContainerFrame::SetSizeConstraints(nsPresContext* aPresContext, // The sizes are in inner window sizes, so convert them into outer window // sizes. Use a size of (200, 200) as only the difference between the inner // and outer size is needed. const LayoutDeviceIntSize sizeDiff = aWidget->ClientToWindowSizeDifference(); if (constraints.mMinSize.width) { constraints.mMinSize.width += sizeDiff.width; } if (constraints.mMinSize.height) { constraints.mMinSize.height += sizeDiff.height; } if (constraints.mMaxSize.width != NS_MAXSIZE) { constraints.mMaxSize.width += sizeDiff.width; } if (constraints.mMaxSize.height != NS_MAXSIZE) { constraints.mMaxSize.height += sizeDiff.height; } LayoutDeviceIntSize windowSize = aWidget->ClientToWindowSize(LayoutDeviceIntSize(200, 200)); if (constraints.mMinSize.width) constraints.mMinSize.width += windowSize.width - 200; if (constraints.mMinSize.height) constraints.mMinSize.height += windowSize.height - 200; if (constraints.mMaxSize.width != NS_MAXSIZE) constraints.mMaxSize.width += windowSize.width - 200; if (constraints.mMaxSize.height != NS_MAXSIZE) constraints.mMaxSize.height += windowSize.height - 200; aWidget->SetSizeConstraints(constraints); } Loading widget/cocoa/nsCocoaWindow.h +1 −1 Original line number Diff line number Diff line Loading @@ -249,7 +249,7 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { virtual void SetFocus(Raise, mozilla::dom::CallerType aCallerType) override; virtual LayoutDeviceIntPoint WidgetToScreenOffset() override; virtual LayoutDeviceIntPoint GetClientOffset() override; virtual LayoutDeviceIntMargin ClientToWindowMargin() override; virtual LayoutDeviceIntSize ClientToWindowSize(const LayoutDeviceIntSize& aClientSize) override; virtual void* GetNativeData(uint32_t aDataType) override; Loading widget/cocoa/nsCocoaWindow.mm +8 −9 Original line number Diff line number Diff line Loading @@ -2224,23 +2224,22 @@ LayoutDeviceIntPoint nsCocoaWindow::GetClientOffset() { NS_OBJC_END_TRY_BLOCK_RETURN(LayoutDeviceIntPoint(0, 0)); } LayoutDeviceIntMargin nsCocoaWindow::ClientToWindowMargin() { LayoutDeviceIntSize nsCocoaWindow::ClientToWindowSize(const LayoutDeviceIntSize& aClientSize) { NS_OBJC_BEGIN_TRY_BLOCK_RETURN; if (!mWindow) { return {}; return LayoutDeviceIntSize(0, 0); } NSRect clientNSRect = [mWindow contentLayoutRect]; NSRect frameNSRect = [mWindow frameRectForContentRect:clientNSRect]; CGFloat backingScale = BackingScaleFactor(); const auto clientRect = nsCocoaUtils::CocoaRectToGeckoRectDevPix(clientNSRect, backingScale); const auto frameRect = nsCocoaUtils::CocoaRectToGeckoRectDevPix(frameNSRect, backingScale); LayoutDeviceIntRect r(0, 0, aClientSize.width, aClientSize.height); NSRect rect = nsCocoaUtils::DevPixelsToCocoaPoints(r, backingScale); return frameRect - clientRect; NSRect maybeInflatedRect = [mWindow frameRectForContentRect:rect]; r = nsCocoaUtils::CocoaRectToGeckoRectDevPix(maybeInflatedRect, backingScale); return r.Size(); NS_OBJC_END_TRY_BLOCK_RETURN({}); NS_OBJC_END_TRY_BLOCK_RETURN(LayoutDeviceIntSize(0, 0)); } nsMenuBarX* nsCocoaWindow::GetMenuBar() { return mMenuBar; } Loading widget/nsBaseWidget.cpp +0 −9 Original line number Diff line number Diff line Loading @@ -567,15 +567,6 @@ nsIntSize nsIWidget::CustomCursorSize(const Cursor& aCursor) { return {width, height}; } LayoutDeviceIntSize nsIWidget::ClientToWindowSizeDifference() { auto margin = ClientToWindowMargin(); MOZ_ASSERT(margin.top >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.left >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.right >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.bottom >= 0, "Window should be bigger than client area"); return {margin.LeftRight(), margin.TopBottom()}; } RefPtr<mozilla::VsyncDispatcher> nsIWidget::GetVsyncDispatcher() { return nullptr; } Loading widget/nsBaseWidget.h +5 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,11 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference { nsPopupLevel PopupLevel() { return mPopupLevel; } LayoutDeviceIntSize ClientToWindowSize( const LayoutDeviceIntSize& aClientSize) override { return aClientSize; } // return true if this is a popup widget with a native titlebar bool IsPopupWithTitleBar() const { return (mWindowType == eWindowType_popup && Loading Loading
layout/generic/nsContainerFrame.cpp +10 −13 Original line number Diff line number Diff line Loading @@ -869,19 +869,16 @@ void nsContainerFrame::SetSizeConstraints(nsPresContext* aPresContext, // The sizes are in inner window sizes, so convert them into outer window // sizes. Use a size of (200, 200) as only the difference between the inner // and outer size is needed. const LayoutDeviceIntSize sizeDiff = aWidget->ClientToWindowSizeDifference(); if (constraints.mMinSize.width) { constraints.mMinSize.width += sizeDiff.width; } if (constraints.mMinSize.height) { constraints.mMinSize.height += sizeDiff.height; } if (constraints.mMaxSize.width != NS_MAXSIZE) { constraints.mMaxSize.width += sizeDiff.width; } if (constraints.mMaxSize.height != NS_MAXSIZE) { constraints.mMaxSize.height += sizeDiff.height; } LayoutDeviceIntSize windowSize = aWidget->ClientToWindowSize(LayoutDeviceIntSize(200, 200)); if (constraints.mMinSize.width) constraints.mMinSize.width += windowSize.width - 200; if (constraints.mMinSize.height) constraints.mMinSize.height += windowSize.height - 200; if (constraints.mMaxSize.width != NS_MAXSIZE) constraints.mMaxSize.width += windowSize.width - 200; if (constraints.mMaxSize.height != NS_MAXSIZE) constraints.mMaxSize.height += windowSize.height - 200; aWidget->SetSizeConstraints(constraints); } Loading
widget/cocoa/nsCocoaWindow.h +1 −1 Original line number Diff line number Diff line Loading @@ -249,7 +249,7 @@ class nsCocoaWindow final : public nsBaseWidget, public nsPIWidgetCocoa { virtual void SetFocus(Raise, mozilla::dom::CallerType aCallerType) override; virtual LayoutDeviceIntPoint WidgetToScreenOffset() override; virtual LayoutDeviceIntPoint GetClientOffset() override; virtual LayoutDeviceIntMargin ClientToWindowMargin() override; virtual LayoutDeviceIntSize ClientToWindowSize(const LayoutDeviceIntSize& aClientSize) override; virtual void* GetNativeData(uint32_t aDataType) override; Loading
widget/cocoa/nsCocoaWindow.mm +8 −9 Original line number Diff line number Diff line Loading @@ -2224,23 +2224,22 @@ LayoutDeviceIntPoint nsCocoaWindow::GetClientOffset() { NS_OBJC_END_TRY_BLOCK_RETURN(LayoutDeviceIntPoint(0, 0)); } LayoutDeviceIntMargin nsCocoaWindow::ClientToWindowMargin() { LayoutDeviceIntSize nsCocoaWindow::ClientToWindowSize(const LayoutDeviceIntSize& aClientSize) { NS_OBJC_BEGIN_TRY_BLOCK_RETURN; if (!mWindow) { return {}; return LayoutDeviceIntSize(0, 0); } NSRect clientNSRect = [mWindow contentLayoutRect]; NSRect frameNSRect = [mWindow frameRectForContentRect:clientNSRect]; CGFloat backingScale = BackingScaleFactor(); const auto clientRect = nsCocoaUtils::CocoaRectToGeckoRectDevPix(clientNSRect, backingScale); const auto frameRect = nsCocoaUtils::CocoaRectToGeckoRectDevPix(frameNSRect, backingScale); LayoutDeviceIntRect r(0, 0, aClientSize.width, aClientSize.height); NSRect rect = nsCocoaUtils::DevPixelsToCocoaPoints(r, backingScale); return frameRect - clientRect; NSRect maybeInflatedRect = [mWindow frameRectForContentRect:rect]; r = nsCocoaUtils::CocoaRectToGeckoRectDevPix(maybeInflatedRect, backingScale); return r.Size(); NS_OBJC_END_TRY_BLOCK_RETURN({}); NS_OBJC_END_TRY_BLOCK_RETURN(LayoutDeviceIntSize(0, 0)); } nsMenuBarX* nsCocoaWindow::GetMenuBar() { return mMenuBar; } Loading
widget/nsBaseWidget.cpp +0 −9 Original line number Diff line number Diff line Loading @@ -567,15 +567,6 @@ nsIntSize nsIWidget::CustomCursorSize(const Cursor& aCursor) { return {width, height}; } LayoutDeviceIntSize nsIWidget::ClientToWindowSizeDifference() { auto margin = ClientToWindowMargin(); MOZ_ASSERT(margin.top >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.left >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.right >= 0, "Window should be bigger than client area"); MOZ_ASSERT(margin.bottom >= 0, "Window should be bigger than client area"); return {margin.LeftRight(), margin.TopBottom()}; } RefPtr<mozilla::VsyncDispatcher> nsIWidget::GetVsyncDispatcher() { return nullptr; } Loading
widget/nsBaseWidget.h +5 −0 Original line number Diff line number Diff line Loading @@ -365,6 +365,11 @@ class nsBaseWidget : public nsIWidget, public nsSupportsWeakReference { nsPopupLevel PopupLevel() { return mPopupLevel; } LayoutDeviceIntSize ClientToWindowSize( const LayoutDeviceIntSize& aClientSize) override { return aClientSize; } // return true if this is a popup widget with a native titlebar bool IsPopupWithTitleBar() const { return (mWindowType == eWindowType_popup && Loading