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 )

Reply via email to