summaryrefslogtreecommitdiff
path: root/mozilla-1508378.patch
diff options
context:
space:
mode:
authorMartin Stransky <stransky@redhat.com>2019-04-11 13:22:12 +0200
committerMartin Stransky <stransky@redhat.com>2019-04-11 13:22:12 +0200
commitf232c3cf8d7c403d05a02c6ba695d34208f0901a (patch)
tree78027855b374eb9a7df388c08fff18e0b5a0b80f /mozilla-1508378.patch
parentFixed Bug 1694377 - remove the double leading underscores, by Evan Klitzke (diff)
downloadlibrewolf-fedora-ff-f232c3cf8d7c403d05a02c6ba695d34208f0901a.tar.gz
librewolf-fedora-ff-f232c3cf8d7c403d05a02c6ba695d34208f0901a.tar.bz2
librewolf-fedora-ff-f232c3cf8d7c403d05a02c6ba695d34208f0901a.zip
Updated to 66.0.3 (Build 1)
Diffstat (limited to 'mozilla-1508378.patch')
-rw-r--r--mozilla-1508378.patch92
1 files changed, 92 insertions, 0 deletions
diff --git a/mozilla-1508378.patch b/mozilla-1508378.patch
new file mode 100644
index 0000000..bbbce4b
--- /dev/null
+++ b/mozilla-1508378.patch
@@ -0,0 +1,92 @@
+changeset: 468935:3b964face103
+tag: tip
+user: Martin Stransky <stransky@redhat.com>
+date: Wed Apr 10 15:14:32 2019 +0200
+summary: Bug 1508378 - Fix round error when damage rect size/position is odd number and scale factor is used, r=lsalzman
+
+diff --git a/widget/gtk/WindowSurfaceWayland.cpp b/widget/gtk/WindowSurfaceWayland.cpp
+--- a/widget/gtk/WindowSurfaceWayland.cpp
++++ b/widget/gtk/WindowSurfaceWayland.cpp
+@@ -624,16 +624,33 @@ static void WaylandBufferDelayCommitHand
+ } else {
+ // Referenced WindowSurfaceWayland is already deleted.
+ // Do nothing but just release the mDelayedCommitHandle allocated at
+ // WindowSurfaceWayland::CommitWaylandBuffer().
+ free(aSurface);
+ }
+ }
+
++void WindowSurfaceWayland::CalcRectScale(LayoutDeviceIntRect& aRect, int aScale) {
++ if (aRect.x & 0x1) {
++ aRect.width += 1;
++ }
++ aRect.x = aRect.x / aScale;
++
++ if (aRect.y & 0x1) {
++ aRect.height += 1;
++ }
++ aRect.y = aRect.y / aScale;
++
++ aRect.width = (aRect.width & 0x1) ? aRect.width / aScale + 1 :
++ aRect.width / aScale;
++ aRect.height = (aRect.height & 0x1) ? aRect.height / aScale + 1 :
++ aRect.height / aScale;
++}
++
+ void WindowSurfaceWayland::CommitWaylandBuffer() {
+ MOZ_ASSERT(mPendingCommit, "Committing empty surface!");
+
+ if (mWaitToFullScreenUpdate) {
+ return;
+ }
+
+ wl_surface* waylandSurface = mWindow->GetWaylandSurface();
+@@ -679,21 +696,23 @@ void WindowSurfaceWayland::CommitWayland
+ LayoutDeviceIntRect rect = mWindow->GetBounds();
+ wl_surface_damage(waylandSurface, 0, 0, rect.width, rect.height);
+ mWaylandBufferFullScreenDamage = false;
+ mNeedScaleFactorUpdate = true;
+ } else {
+ gint scaleFactor = mWindow->GdkScaleFactor();
+ for (auto iter = mWaylandBufferDamage.RectIter(); !iter.Done();
+ iter.Next()) {
+- const mozilla::LayoutDeviceIntRect& r = iter.Get();
++ mozilla::LayoutDeviceIntRect r = iter.Get();
+ // We need to remove the scale factor because the wl_surface_damage
+ // also multiplies by current scale factor.
+- wl_surface_damage(waylandSurface, r.x / scaleFactor, r.y / scaleFactor,
+- r.width / scaleFactor, r.height / scaleFactor);
++ if (scaleFactor > 1) {
++ CalcRectScale(r, scaleFactor);
++ }
++ wl_surface_damage(waylandSurface, r.x, r.y, r.width, r.height);
+ }
+ }
+
+ // Clear all back buffer damage as we're committing
+ // all requested regions.
+ mWaylandBufferDamage.SetEmpty();
+
+ mFrameCallback = wl_surface_frame(waylandSurface);
+diff --git a/widget/gtk/WindowSurfaceWayland.h b/widget/gtk/WindowSurfaceWayland.h
+--- a/widget/gtk/WindowSurfaceWayland.h
++++ b/widget/gtk/WindowSurfaceWayland.h
+@@ -96,16 +96,17 @@ class WindowSurfaceWayland : public Wind
+ WindowBackBuffer* GetWaylandBufferToDraw(int aWidth, int aHeight);
+
+ already_AddRefed<gfx::DrawTarget> LockWaylandBuffer(int aWidth, int aHeight,
+ bool aClearBuffer);
+ already_AddRefed<gfx::DrawTarget> LockImageSurface(
+ const gfx::IntSize& aLockSize);
+ bool CommitImageSurfaceToWaylandBuffer(const LayoutDeviceIntRegion& aRegion);
+ void CommitWaylandBuffer();
++ void CalcRectScale(LayoutDeviceIntRect& aRect, int scale);
+
+ // TODO: Do we need to hold a reference to nsWindow object?
+ nsWindow* mWindow;
+ nsWaylandDisplay* mWaylandDisplay;
+ WindowBackBuffer* mWaylandBuffer;
+ LayoutDeviceIntRegion mWaylandBufferDamage;
+ WindowBackBuffer* mBackupBuffer[BACK_BUFFER_NUM];
+ RefPtr<gfxImageSurface> mImageSurface;
+
bgstack15