vcl/skia/gdiimpl.cxx | 14 +++++++++++++- vcl/skia/x11/gdiimpl.cxx | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-)
New commits: commit dfeaecc7860e896c93d917c01d0af47ab65acb6f Author: Luboš Luňák <[email protected]> AuthorDate: Tue Oct 29 16:30:42 2019 +0100 Commit: Luboš Luňák <[email protected]> CommitDate: Tue Oct 29 16:30:42 2019 +0100 add a TODO note about Skia Vulkan surface getting recreated too often Change-Id: I558c5c161224e5ba5835fb5ec994e585c90ec14c diff --git a/vcl/skia/x11/gdiimpl.cxx b/vcl/skia/x11/gdiimpl.cxx index 29119f092ac9..f4575d8af867 100644 --- a/vcl/skia/x11/gdiimpl.cxx +++ b/vcl/skia/x11/gdiimpl.cxx @@ -53,6 +53,10 @@ void X11SkiaSalGraphicsImpl::createSurface() assert(winInfo.fDisplay && winInfo.fWindow != None); winInfo.fFBConfig = nullptr; // not used winInfo.fVisualInfo = const_cast<SalVisual*>(&mX11Parent.GetVisual()); + // TODO Vulkan does not use these dimensions, instead it uses dimensions of the actual + // drawable, which may lead to repeated createSurface() calls from checkSurface() + // if the window is being resized and VCL already knows the new size but Vulkan doesn't. + // Avoid this somehow. winInfo.fWidth = GetWidth(); winInfo.fHeight = GetHeight(); destroySurface(); commit 56a0dbf13f9914852c2be363909aa6ae7ec008d0 Author: Luboš Luňák <[email protected]> AuthorDate: Tue Oct 29 16:30:19 2019 +0100 Commit: Luboš Luňák <[email protected]> CommitDate: Tue Oct 29 16:30:19 2019 +0100 work around for Skia SkCanvas::clipRegion() bug https://bugs.chromium.org/p/skia/issues/detail?id=9580 Change-Id: I37b7f5bd8c9b6a4a4d96a4c694dd3ad238b29f69 diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index 8712893f9554..6c07436ddfa3 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -283,7 +283,19 @@ bool SkiaSalGraphicsImpl::setClipRegion(const vcl::Region& region) assert(canvas->getSaveCount() == 2); // = there is just one save() canvas->restore(); canvas->save(); - canvas->clipRegion(toSkRegion(region)); +#if 1 + // TODO + // SkCanvas::clipRegion() is buggy with Vulkan, use SkCanvas::clipPath(). + // https://bugs.chromium.org/p/skia/issues/detail?id=9580 + if (!region.IsEmpty() && !region.IsRectangle()) + { + SkPath path; + lclPolyPolygonToPath(region.GetAsB2DPolyPolygon(), path); + canvas->clipPath(path); + } + else +#endif + canvas->clipRegion(toSkRegion(region)); return true; } _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
