mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 22:35:43 +00:00
Bug 1252262 - Don't combine the client offset into the outer rect for the child process. r=jimm
MozReview-Commit-ID: BslkWk7ndkx
This commit is contained in:
parent
89e67972f0
commit
0f4af98816
@ -531,6 +531,7 @@ child:
|
||||
|
||||
async UpdateDimensions(CSSRect rect, CSSSize size,
|
||||
ScreenOrientationInternal orientation,
|
||||
LayoutDeviceIntPoint clientOffset,
|
||||
LayoutDeviceIntPoint chromeDisp) compressall;
|
||||
|
||||
async SizeModeChanged(nsSizeMode sizeMode);
|
||||
|
@ -1637,6 +1637,7 @@ TabChild::RecvShow(const ScreenIntSize& aSize,
|
||||
bool
|
||||
TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
|
||||
const ScreenOrientationInternal& orientation,
|
||||
const LayoutDeviceIntPoint& clientOffset,
|
||||
const LayoutDeviceIntPoint& chromeDisp)
|
||||
{
|
||||
if (!mRemoteFrame) {
|
||||
@ -1644,6 +1645,7 @@ TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
|
||||
}
|
||||
|
||||
mUnscaledOuterRect = rect;
|
||||
mClientOffset = clientOffset;
|
||||
mChromeDisp = chromeDisp;
|
||||
|
||||
mOrientation = orientation;
|
||||
@ -1662,8 +1664,8 @@ TabChild::RecvUpdateDimensions(const CSSRect& rect, const CSSSize& size,
|
||||
baseWin->SetPositionAndSize(0, 0, screenSize.width, screenSize.height,
|
||||
true);
|
||||
|
||||
mPuppetWidget->Resize(screenRect.x + chromeDisp.x,
|
||||
screenRect.y + chromeDisp.y,
|
||||
mPuppetWidget->Resize(screenRect.x + clientOffset.x + chromeDisp.x,
|
||||
screenRect.y + clientOffset.y + chromeDisp.y,
|
||||
screenSize.width, screenSize.height, true);
|
||||
|
||||
return true;
|
||||
@ -2940,8 +2942,8 @@ TabChild::RecvUIResolutionChanged(const float& aDpi, const double& aScale)
|
||||
ScreenIntSize screenSize = GetInnerSize();
|
||||
if (mHasValidInnerSize && oldScreenSize != screenSize) {
|
||||
ScreenIntRect screenRect = GetOuterRect();
|
||||
mPuppetWidget->Resize(screenRect.x + mChromeDisp.x,
|
||||
screenRect.y + mChromeDisp.y,
|
||||
mPuppetWidget->Resize(screenRect.x + mClientOffset.x + mChromeDisp.x,
|
||||
screenRect.y + mClientOffset.y + mChromeDisp.y,
|
||||
screenSize.width, screenSize.height, true);
|
||||
|
||||
nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());
|
||||
|
@ -333,6 +333,7 @@ public:
|
||||
RecvUpdateDimensions(const CSSRect& aRect,
|
||||
const CSSSize& aSize,
|
||||
const ScreenOrientationInternal& aOrientation,
|
||||
const LayoutDeviceIntPoint& aClientOffset,
|
||||
const LayoutDeviceIntPoint& aChromeDisp) override;
|
||||
virtual bool
|
||||
RecvSizeModeChanged(const nsSizeMode& aSizeMode) override;
|
||||
@ -578,6 +579,7 @@ public:
|
||||
|
||||
nsresult CreatePluginWidget(nsIWidget* aParent, nsIWidget** aOut);
|
||||
|
||||
LayoutDeviceIntPoint GetClientOffset() const { return mClientOffset; }
|
||||
LayoutDeviceIntPoint GetChromeDisplacement() const { return mChromeDisp; };
|
||||
|
||||
bool IPCOpen() const { return mIPCOpen; }
|
||||
@ -729,6 +731,8 @@ private:
|
||||
SetAllowedTouchBehaviorCallback mSetAllowedTouchBehaviorCallback;
|
||||
bool mHasValidInnerSize;
|
||||
bool mDestroyed;
|
||||
// Position of client area relative to the outer window
|
||||
LayoutDeviceIntPoint mClientOffset;
|
||||
// Position of tab, relative to parent widget (typically the window)
|
||||
LayoutDeviceIntPoint mChromeDisp;
|
||||
TabId mUniqueId;
|
||||
|
@ -962,28 +962,28 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const ScreenIntSize& size)
|
||||
if (mIsDestroyed) {
|
||||
return;
|
||||
}
|
||||
hal::ScreenConfiguration config;
|
||||
hal::GetCurrentScreenConfiguration(&config);
|
||||
ScreenOrientationInternal orientation = config.orientation();
|
||||
LayoutDeviceIntPoint chromeOffset = -GetChildProcessOffset();
|
||||
|
||||
nsCOMPtr<nsIWidget> widget = GetWidget();
|
||||
if (!widget) {
|
||||
NS_WARNING("No widget found in TabParent::UpdateDimensions");
|
||||
return;
|
||||
}
|
||||
nsIntRect contentRect = rect;
|
||||
contentRect.x += widget->GetClientOffset().x;
|
||||
contentRect.y += widget->GetClientOffset().y;
|
||||
|
||||
hal::ScreenConfiguration config;
|
||||
hal::GetCurrentScreenConfiguration(&config);
|
||||
ScreenOrientationInternal orientation = config.orientation();
|
||||
LayoutDeviceIntPoint clientOffset = widget->GetClientOffset();
|
||||
LayoutDeviceIntPoint chromeOffset = -GetChildProcessOffset();
|
||||
|
||||
if (!mUpdatedDimensions || mOrientation != orientation ||
|
||||
mDimensions != size || !mRect.IsEqualEdges(contentRect) ||
|
||||
mDimensions != size || !mRect.IsEqualEdges(rect) ||
|
||||
clientOffset != mClientOffset ||
|
||||
chromeOffset != mChromeOffset) {
|
||||
|
||||
mUpdatedDimensions = true;
|
||||
mRect = contentRect;
|
||||
mRect = rect;
|
||||
mDimensions = size;
|
||||
mOrientation = orientation;
|
||||
mClientOffset = clientOffset;
|
||||
mChromeOffset = chromeOffset;
|
||||
|
||||
CSSToLayoutDeviceScale widgetScale = widget->GetDefaultScale();
|
||||
@ -998,7 +998,7 @@ TabParent::UpdateDimensions(const nsIntRect& rect, const ScreenIntSize& size)
|
||||
CSSRect unscaledRect = devicePixelRect / widgetScale;
|
||||
CSSSize unscaledSize = devicePixelSize / widgetScale;
|
||||
Unused << SendUpdateDimensions(unscaledRect, unscaledSize,
|
||||
orientation, chromeOffset);
|
||||
orientation, clientOffset, chromeOffset);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -603,6 +603,7 @@ protected:
|
||||
CSSToLayoutDeviceScale mDefaultScale;
|
||||
bool mUpdatedDimensions;
|
||||
nsSizeMode mSizeMode;
|
||||
LayoutDeviceIntPoint mClientOffset;
|
||||
LayoutDeviceIntPoint mChromeOffset;
|
||||
|
||||
private:
|
||||
|
@ -1234,7 +1234,7 @@ PuppetWidget::GetWindowPosition()
|
||||
|
||||
int32_t winX, winY, winW, winH;
|
||||
NS_ENSURE_SUCCESS(GetOwningTabChild()->GetDimensions(0, &winX, &winY, &winW, &winH), nsIntPoint());
|
||||
return nsIntPoint(winX, winY);
|
||||
return nsIntPoint(winX, winY) + GetOwningTabChild()->GetClientOffset().ToUnknownPoint();
|
||||
}
|
||||
|
||||
NS_METHOD
|
||||
|
Loading…
Reference in New Issue
Block a user