vcl/inc/unx/salgdi.h | 4 ++-- vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx | 14 +++++++------- vcl/unx/generic/gdi/gdiimpl.hxx | 3 ++- vcl/unx/generic/gdi/salgdi.cxx | 11 +++++++---- vcl/unx/generic/gdi/x11cairotextrender.cxx | 2 +- 5 files changed, 19 insertions(+), 15 deletions(-)
New commits: commit 1fd19c798243ee46606331ad96b9803b96581a2e Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Jan 5 16:40:27 2023 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Jan 6 08:47:00 2023 +0000 use current known geometry for surface size instead of SAL_MAX_INT16 which appears to be why getPixel failed Change-Id: I088ed0c01bdd0e9971ff52a1f70a030f0921e497 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145108 Tested-by: Caolán McNamara <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h index 1e1a5971a7b6..ca4456a1c720 100644 --- a/vcl/inc/unx/salgdi.h +++ b/vcl/inc/unx/salgdi.h @@ -71,7 +71,7 @@ public: X11Common(); - cairo_t* getCairoContext(); + cairo_t* getCairoContext(const SalGeometryProvider* pGeom); static void releaseCairoContext(cairo_t* cr); @@ -145,7 +145,7 @@ public: */ void YieldGraphicsExpose(); - cairo_t* getCairoContext(); + cairo_t* getCairoContext(const SalGeometryProvider* pGeom); static void releaseCairoContext(cairo_t* cr); diff --git a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx index f1b7f172150b..c45990b35263 100644 --- a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx +++ b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx @@ -61,7 +61,7 @@ bool X11CairoSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObje aPolyPolygon = basegfx::utils::snapPointsOfHorizontalOrVerticalEdges(aPolyPolygon); } - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); for (auto const& rPolygon : std::as_const(aPolyPolygon)) @@ -132,7 +132,7 @@ void X11CairoSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY) void X11CairoSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nColor) { - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); CairoCommon::drawPixel(cr, nullptr, nColor, nX, nY); @@ -143,7 +143,7 @@ void X11CairoSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nC void X11CairoSalGraphicsImpl::drawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2) { - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); CairoCommon::drawLine(cr, nullptr, mnPenColor, getAntiAlias(), nX1, nY1, nX2, nY2); @@ -163,7 +163,7 @@ bool X11CairoSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectT if (0 == rPolyLine.count() || fTransparency < 0.0 || fTransparency >= 1.0) return true; - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); // Use the now available static drawPolyLine from the Cairo-Headless-Fallback @@ -180,7 +180,7 @@ bool X11CairoSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectT bool X11CairoSalGraphicsImpl::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, sal_uInt8 nTransparency) { - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); const bool bRetval(CairoCommon::drawAlphaRect(cr, nullptr, mnPenColor, mnFillColor, nX, nY, @@ -194,7 +194,7 @@ bool X11CairoSalGraphicsImpl::drawAlphaRect(tools::Long nX, tools::Long nY, tool bool X11CairoSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygon, const Gradient& rGradient) { - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); const bool bRetval( @@ -208,7 +208,7 @@ bool X11CairoSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolyPolygo bool X11CairoSalGraphicsImpl::implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon, SalGradient const& rGradient) { - cairo_t* cr = mrX11Common.getCairoContext(); + cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider()); clipRegion(cr); const bool bRetval( diff --git a/vcl/unx/generic/gdi/gdiimpl.hxx b/vcl/unx/generic/gdi/gdiimpl.hxx index 0963a85892cd..bec45a01dd31 100644 --- a/vcl/unx/generic/gdi/gdiimpl.hxx +++ b/vcl/unx/generic/gdi/gdiimpl.hxx @@ -40,9 +40,10 @@ class Gradient; class X11SalGraphicsImpl : public SalGraphicsImpl, public X11GraphicsImpl { -private: +protected: X11SalGraphics& mrParent; +private: Color mnBrushColor; GC mpBrushGC; // Brush attributes Pixel mnBrushPixel; diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx index 7ee133d2c87f..c4919e49229b 100644 --- a/vcl/unx/generic/gdi/salgdi.cxx +++ b/vcl/unx/generic/gdi/salgdi.cxx @@ -68,12 +68,15 @@ X11Common::X11Common() , m_pExternalSurface(nullptr) {} -cairo_t* X11Common::getCairoContext() +cairo_t* X11Common::getCairoContext(const SalGeometryProvider* pGeom) { if (m_pExternalSurface) return cairo_create(m_pExternalSurface); - cairo_surface_t* surface = cairo_xlib_surface_create(GetXDisplay(), m_hDrawable, GetVisual().visual, SAL_MAX_INT16, SAL_MAX_INT16); + SAL_WARN_IF(!pGeom, "vcl", "No geometry available"); + int nWidth = pGeom ? pGeom->GetWidth() : SAL_MAX_INT16; + int nHeight = pGeom ? pGeom->GetHeight() : SAL_MAX_INT16; + cairo_surface_t* surface = cairo_xlib_surface_create(GetXDisplay(), m_hDrawable, GetVisual().visual, nWidth, nHeight); cairo_t *cr = cairo_create(surface); cairo_surface_destroy(surface); @@ -463,9 +466,9 @@ SalGeometryProvider *X11SalGraphics::GetGeometryProvider() const return static_cast< SalGeometryProvider * >(m_pVDev); } -cairo_t* X11SalGraphics::getCairoContext() +cairo_t* X11SalGraphics::getCairoContext(const SalGeometryProvider* pGeom) { - return maX11Common.getCairoContext(); + return maX11Common.getCairoContext(pGeom); } void X11SalGraphics::releaseCairoContext(cairo_t* cr) diff --git a/vcl/unx/generic/gdi/x11cairotextrender.cxx b/vcl/unx/generic/gdi/x11cairotextrender.cxx index 6bbbbc1bff87..7a1d4b9fcbf7 100644 --- a/vcl/unx/generic/gdi/x11cairotextrender.cxx +++ b/vcl/unx/generic/gdi/x11cairotextrender.cxx @@ -32,7 +32,7 @@ X11CairoTextRender::X11CairoTextRender(X11SalGraphics& rParent) cairo_t* X11CairoTextRender::getCairoContext() { - return mrParent.getCairoContext(); + return mrParent.getCairoContext(mrParent.GetGeometryProvider()); } void X11CairoTextRender::getSurfaceOffset( double& nDX, double& nDY )