commit ecb3a4ee22be3258fc8bec32c81ea37b299bdbce
parent 963def82ec765769d893a03d9c55ba26753c9dad
Author: stransky <stransky@redhat.com>
Date: Mon, 15 Dec 2025 09:45:48 +0000
Bug 2004199 [Wayland] Use DesktopIntRect for viewporter source rect r=emilio
Differential Revision: https://phabricator.services.mozilla.com/D276200
Diffstat:
2 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/widget/gtk/WaylandSurface.cpp b/widget/gtk/WaylandSurface.cpp
@@ -544,7 +544,7 @@ void WaylandSurface::UnmapLocked(WaylandSurfaceLock& aSurfaceLock) {
MozClearPointer(mViewport, wp_viewport_destroy);
mViewportDestinationSize = DesktopIntSize(-1, -1);
- mViewportSourceRect = gfx::Rect(-1, -1, -1, -1);
+ mViewportSourceRect = DesktopIntRect(-1, -1, -1, -1);
MozClearPointer(mFractionalScaleListener, wp_fractional_scale_v1_destroy);
MozClearPointer(mSubsurface, wl_subsurface_destroy);
@@ -793,7 +793,7 @@ void WaylandSurface::SetCeiledScaleLocked(
}
void WaylandSurface::SetViewPortDestLocked(
- const WaylandSurfaceLock& aProofOfLock, DesktopIntSize aDestSize) {
+ const WaylandSurfaceLock& aProofOfLock, const DesktopIntSize& aDestSize) {
MOZ_DIAGNOSTIC_ASSERT(&aProofOfLock == mSurfaceLock);
if (!mViewport) {
return;
@@ -801,47 +801,51 @@ void WaylandSurface::SetViewPortDestLocked(
if (mViewportDestinationSize == aDestSize) {
return;
}
+ mViewportDestinationSize = aDestSize;
LOGWAYLAND("WaylandSurface::SetViewPortDestLocked(): Size [%d x %d]",
- aDestSize.width, aDestSize.height);
- if (aDestSize.width < 1 || aDestSize.height < 1) {
+ mViewportDestinationSize.width, mViewportDestinationSize.height);
+ if (mViewportDestinationSize.width < 1 ||
+ mViewportDestinationSize.height < 1) {
NS_WARNING(
nsPrintfCString(
"WaylandSurface::SetViewPortDestLocked(%s): Wrong coordinates!",
- ToString(aDestSize).c_str())
+ ToString(mViewportDestinationSize).c_str())
.get());
- aDestSize.width = aDestSize.height = -1;
+ mViewportDestinationSize.width = mViewportDestinationSize.height = -1;
}
- mViewportDestinationSize = aDestSize;
wp_viewport_set_destination(mViewport, mViewportDestinationSize.width,
mViewportDestinationSize.height);
mSurfaceNeedsCommit = true;
}
void WaylandSurface::SetViewPortSourceRectLocked(
- const WaylandSurfaceLock& aProofOfLock, gfx::Rect aRect) {
+ const WaylandSurfaceLock& aProofOfLock, const DesktopIntRect& aRect) {
MOZ_DIAGNOSTIC_ASSERT(&aProofOfLock == mSurfaceLock);
if (!mViewport || mViewportSourceRect == aRect) {
return;
}
+ mViewportSourceRect = aRect;
LOGWAYLAND(
- "WaylandSurface::SetViewPortSourceRectLocked(): [%f, %f] -> [%f x %f]",
- aRect.x, aRect.y, aRect.width, aRect.height);
+ "WaylandSurface::SetViewPortSourceRectLocked(): [%d, %d] -> [%d x %d]",
+ mViewportSourceRect.x, mViewportSourceRect.y, mViewportSourceRect.width,
+ mViewportSourceRect.height);
// Don't throw protocol error with bad coords
- if (aRect.x < 0 || aRect.y < 0 || aRect.width < 1 || aRect.height < 1) {
+ if (mViewportSourceRect.x < 0 || mViewportSourceRect.y < 0 ||
+ mViewportSourceRect.width < 1 || mViewportSourceRect.height < 1) {
NS_WARNING(nsPrintfCString("WaylandSurface::SetViewPortSourceRectLocked(%s)"
": Wrong coordinates!",
ToString(aRect).c_str())
.get());
- aRect.x = aRect.y = aRect.width = aRect.height = -1;
+ mViewportSourceRect = DesktopIntRect(-1, -1, -1, -1);
}
- mViewportSourceRect = aRect;
- wp_viewport_set_source(
- mViewport, wl_fixed_from_double(aRect.x), wl_fixed_from_double(aRect.y),
- wl_fixed_from_double(aRect.width), wl_fixed_from_double(aRect.height));
+ wp_viewport_set_source(mViewport, wl_fixed_from_int(mViewportSourceRect.x),
+ wl_fixed_from_int(mViewportSourceRect.y),
+ wl_fixed_from_int(mViewportSourceRect.width),
+ wl_fixed_from_int(mViewportSourceRect.height));
mSurfaceNeedsCommit = true;
}
diff --git a/widget/gtk/WaylandSurface.h b/widget/gtk/WaylandSurface.h
@@ -170,9 +170,9 @@ class WaylandSurface final {
void MoveLocked(const WaylandSurfaceLock& aProofOfLock,
DesktopIntPoint aPosition);
void SetViewPortSourceRectLocked(const WaylandSurfaceLock& aProofOfLock,
- gfx::Rect aRect);
+ const DesktopIntRect& aRect);
void SetViewPortDestLocked(const WaylandSurfaceLock& aProofOfLock,
- DesktopIntSize aDestSize);
+ const DesktopIntSize& aDestSize);
void SetTransformFlippedLocked(const WaylandSurfaceLock& aProofOfLock,
bool aFlippedX, bool aFlippedY);
@@ -378,7 +378,7 @@ class WaylandSurface final {
bool mViewportFollowsSizeChanges = true;
wp_viewport* mViewport = nullptr;
- gfx::Rect mViewportSourceRect{-1, -1, -1, -1};
+ DesktopIntRect mViewportSourceRect{-1, -1, -1, -1};
DesktopIntSize mViewportDestinationSize{-1, -1};
// Surface flip state on X/Y asix