vcl/headless/CairoCommon.cxx                    |   20 ++
 vcl/headless/SvpGraphicsBackend.cxx             |   13 -
 vcl/inc/headless/CairoCommon.hxx                |    5 
 vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx |   11 +
 vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx |    5 
 vcl/unx/generic/gdi/gdiimpl.cxx                 |  195 ------------------------
 vcl/unx/generic/gdi/gdiimpl.hxx                 |   20 --
 7 files changed, 44 insertions(+), 225 deletions(-)

New commits:
commit cb4cdde132839a232d152b701a147188de8ffc76
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Jan 10 09:27:26 2023 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Tue Jan 10 19:56:43 2023 +0000

    move invert into CairoCommon and reuse from X11CairoSalGraphicsImpl
    
    Change-Id: I4fb52ed1a9d6d9405a76f5d06ca0770bf9b750e6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145256
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 513d94fc4735..fe5f60021aa6 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -1557,6 +1557,26 @@ void CairoCommon::invert(const basegfx::B2DPolygon& 
rPoly, SalInvert nFlags, boo
     releaseCairoContext(cr, false, extents);
 }
 
+void CairoCommon::invert(tools::Long nX, tools::Long nY, tools::Long nWidth, 
tools::Long nHeight,
+                         SalInvert nFlags, bool bAntiAlias)
+{
+    basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(
+        basegfx::B2DRectangle(nX, nY, nX + nWidth, nY + nHeight));
+
+    invert(aRect, nFlags, bAntiAlias);
+}
+
+void CairoCommon::invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert 
nFlags, bool bAntiAlias)
+{
+    basegfx::B2DPolygon aPoly;
+    aPoly.append(basegfx::B2DPoint(pPtAry->getX(), pPtAry->getY()), nPoints);
+    for (sal_uInt32 i = 1; i < nPoints; ++i)
+        aPoly.setB2DPoint(i, basegfx::B2DPoint(pPtAry[i].getX(), 
pPtAry[i].getY()));
+    aPoly.setClosed(true);
+
+    invert(aPoly, nFlags, bAntiAlias);
+}
+
 cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer)
 {
     cairo_format_t nFormat;
diff --git a/vcl/headless/SvpGraphicsBackend.cxx 
b/vcl/headless/SvpGraphicsBackend.cxx
index 6b63f2509eda..9a4ef1fc734d 100644
--- a/vcl/headless/SvpGraphicsBackend.cxx
+++ b/vcl/headless/SvpGraphicsBackend.cxx
@@ -348,21 +348,12 @@ Color SvpGraphicsBackend::getPixel(tools::Long nX, 
tools::Long nY)
 void SvpGraphicsBackend::invert(tools::Long nX, tools::Long nY, tools::Long 
nWidth,
                                 tools::Long nHeight, SalInvert nFlags)
 {
-    basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(
-        basegfx::B2DRectangle(nX, nY, nX + nWidth, nY + nHeight));
-
-    m_rCairoCommon.invert(aRect, nFlags, getAntiAlias());
+    m_rCairoCommon.invert(nX, nY, nWidth, nHeight, nFlags, getAntiAlias());
 }
 
 void SvpGraphicsBackend::invert(sal_uInt32 nPoints, const Point* pPtAry, 
SalInvert nFlags)
 {
-    basegfx::B2DPolygon aPoly;
-    aPoly.append(basegfx::B2DPoint(pPtAry->getX(), pPtAry->getY()), nPoints);
-    for (sal_uInt32 i = 1; i < nPoints; ++i)
-        aPoly.setB2DPoint(i, basegfx::B2DPoint(pPtAry[i].getX(), 
pPtAry[i].getY()));
-    aPoly.setClosed(true);
-
-    m_rCairoCommon.invert(aPoly, nFlags, getAntiAlias());
+    m_rCairoCommon.invert(nPoints, pPtAry, nFlags, getAntiAlias());
 }
 
 bool SvpGraphicsBackend::drawEPS(tools::Long /*nX*/, tools::Long /*nY*/, 
tools::Long /*nWidth*/,
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index df270b217f3a..ea041a91187c 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -204,6 +204,11 @@ struct VCL_DLLPUBLIC CairoCommon
 
     void invert(const basegfx::B2DPolygon& rPoly, SalInvert nFlags, bool 
bAntiAlias);
 
+    void invert(tools::Long nX, tools::Long nY, tools::Long nWidth, 
tools::Long nHeight,
+                SalInvert nFlags, bool bAntiAlias);
+
+    void invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert nFlags, 
bool bAntiAlias);
+
     static cairo_surface_t* createCairoSurface(const BitmapBuffer* pBuffer);
 
     static bool supportsOperation(OutDevSupportType eType);
diff --git a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx 
b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
index da6845c84eea..c6c4af83039b 100644
--- a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
+++ b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
@@ -110,6 +110,17 @@ bool 
X11CairoSalGraphicsImpl::implDrawGradient(basegfx::B2DPolyPolygon const& rP
     return mrCairoCommon.implDrawGradient(rPolyPolygon, rGradient, 
getAntiAlias());
 }
 
+void X11CairoSalGraphicsImpl::invert(tools::Long nX, tools::Long nY, 
tools::Long nWidth,
+                                     tools::Long nHeight, SalInvert nFlags)
+{
+    mrCairoCommon.invert(nX, nY, nWidth, nHeight, nFlags, getAntiAlias());
+}
+
+void X11CairoSalGraphicsImpl::invert(sal_uInt32 nPoints, const Point* pPtAry, 
SalInvert nFlags)
+{
+    mrCairoCommon.invert(nPoints, pPtAry, nFlags, getAntiAlias());
+}
+
 bool X11CairoSalGraphicsImpl::hasFastDrawTransformedBitmap() const
 {
     return CairoCommon::hasFastDrawTransformedBitmap();
diff --git a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx 
b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
index 779e4d7eb796..08704a642659 100644
--- a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
+++ b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
@@ -127,6 +127,11 @@ public:
     bool implDrawGradient(basegfx::B2DPolyPolygon const& rPolyPolygon,
                           SalGradient const& rGradient) override;
 
+    void invert(tools::Long nX, tools::Long nY, tools::Long nWidth, 
tools::Long nHeight,
+                SalInvert nFlags) override;
+
+    void invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert nFlags) 
override;
+
     virtual bool hasFastDrawTransformedBitmap() const override;
 
     virtual bool supportsOperation(OutDevSupportType eType) const override;
diff --git a/vcl/unx/generic/gdi/gdiimpl.cxx b/vcl/unx/generic/gdi/gdiimpl.cxx
index 7f8672f07735..3e2b520bd904 100644
--- a/vcl/unx/generic/gdi/gdiimpl.cxx
+++ b/vcl/unx/generic/gdi/gdiimpl.cxx
@@ -66,32 +66,6 @@
 /* From <X11/Intrinsic.h> */
 typedef unsigned long Pixel;
 
-class SalPolyLine
-{
-    std::vector<XPoint> Points_;
-public:
-    SalPolyLine(sal_uLong nPoints, const Point *p)
-        : Points_(nPoints+1)
-    {
-        for (sal_uLong i = 0; i < nPoints; ++i)
-        {
-            Points_[i].x = static_cast<short>(p[i].getX());
-            Points_[i].y = static_cast<short>(p[i].getY());
-        }
-        Points_[nPoints] = Points_[0]; // close polyline
-    }
-
-    const XPoint &operator[](sal_uLong n) const
-    {
-        return Points_[n];
-    }
-
-    XPoint &operator[](sal_uLong n)
-    {
-        return Points_[n];
-    }
-};
-
 namespace
 {
     void setForeBack(XGCValues& rValues, const SalColormap& rColMap, const 
SalBitmap& rSalBitmap)
@@ -140,9 +114,7 @@ X11SalGraphicsImpl::X11SalGraphicsImpl(X11SalGraphics& 
rParent):
     mpCopyGC(nullptr),
     mpMaskGC(nullptr),
     mpInvertGC(nullptr),
-    mpInvert50GC(nullptr),
-    mpStippleGC(nullptr),
-    mpTrackingGC(nullptr)
+    mpStippleGC(nullptr)
 {
 }
 
@@ -197,11 +169,9 @@ void X11SalGraphicsImpl::freeResources()
     freeGC( pDisplay, mpPenGC );
     freeGC( pDisplay, mpBrushGC );
     freeGC( pDisplay, mpMonoGC );
-    freeGC( pDisplay, mpTrackingGC );
     freeGC( pDisplay, mpCopyGC );
     freeGC( pDisplay, mpMaskGC );
     freeGC( pDisplay, mpInvertGC );
-    freeGC( pDisplay, mpInvert50GC );
     freeGC( pDisplay, mpStippleGC );
     mbTrackingGC = mbPenGC = mbBrushGC = mbCopyGC = mbInvertGC = mbInvert50GC 
= mbStippleGC = false;
 }
@@ -237,36 +207,6 @@ inline GC X11SalGraphicsImpl::GetCopyGC()
     return mpCopyGC;
 }
 
-GC X11SalGraphicsImpl::GetTrackingGC()
-{
-    if( !mpTrackingGC )
-    {
-        XGCValues     values;
-
-        values.graphics_exposures   = False;
-        values.foreground           = mrParent.GetColormap().GetBlackPixel()
-                                      ^ mrParent.GetColormap().GetWhitePixel();
-        values.function             = GXxor;
-        values.line_width           = 1;
-        values.line_style           = LineOnOffDash;
-
-        mpTrackingGC = XCreateGC( mrParent.GetXDisplay(), 
mrParent.GetDrawable(),
-                                  GCGraphicsExposures | GCForeground | 
GCFunction
-                                  | GCLineWidth | GCLineStyle,
-                                  &values );
-        const char dash_list[2] = {2, 2};
-        XSetDashes( mrParent.GetXDisplay(), mpTrackingGC, 0, dash_list, 2 );
-    }
-
-    if( !mbTrackingGC )
-    {
-        mrParent.SetClipRegion( mpTrackingGC );
-        mbTrackingGC = true;
-    }
-
-    return mpTrackingGC;
-}
-
 GC X11SalGraphicsImpl::GetInvertGC()
 {
     if( !mpInvertGC )
@@ -284,44 +224,6 @@ GC X11SalGraphicsImpl::GetInvertGC()
     return mpInvertGC;
 }
 
-GC X11SalGraphicsImpl::GetInvert50GC()
-{
-    if( !mpInvert50GC )
-    {
-        XGCValues values;
-
-        values.graphics_exposures   = False;
-        values.foreground           = mrParent.GetColormap().GetWhitePixel();
-        values.background           = mrParent.GetColormap().GetBlackPixel();
-        values.function             = GXinvert;
-        values.line_width           = 1;
-        values.line_style           = LineSolid;
-        unsigned long const nValueMask =
-                                  GCGraphicsExposures
-                                  | GCForeground
-                                  | GCBackground
-                                  | GCFunction
-                                  | GCLineWidth
-                                  | GCLineStyle
-                                  | GCFillStyle
-                                  | GCStipple;
-
-        values.fill_style           = FillStippled;
-        values.stipple              = mrParent.GetDisplay()->GetInvert50( 
mrParent.m_nXScreen );
-
-        mpInvert50GC = XCreateGC( mrParent.GetXDisplay(), 
mrParent.GetDrawable(),
-                                  nValueMask,
-                                  &values );
-    }
-
-    if( !mbInvert50GC )
-    {
-        mrParent.SetClipRegion( mpInvert50GC );
-        mbInvert50GC = true;
-    }
-    return mpInvert50GC;
-}
-
 inline GC X11SalGraphicsImpl::GetStippleGC()
 {
     if( !mpStippleGC )
@@ -407,40 +309,6 @@ GC X11SalGraphicsImpl::SelectPen()
     return mpPenGC;
 }
 
-void X11SalGraphicsImpl::DrawLines(sal_uInt32              nPoints,
-                                   const SalPolyLine &rPoints,
-                                   GC                 pGC,
-                                   bool               bClose)
-{
-    // calculate how many lines XWindow can draw in one go
-    sal_uLong nMaxLines = (mrParent.GetDisplay()->GetMaxRequestSize() - 
sizeof(xPolyPointReq))
-                      / sizeof(xPoint);
-    if( nMaxLines > nPoints ) nMaxLines = nPoints;
-
-    // print all lines that XWindows can draw
-    sal_uLong n;
-    for( n = 0; nPoints - n > nMaxLines; n += nMaxLines - 1 )
-        XDrawLines( mrParent.GetXDisplay(),
-                    mrParent.GetDrawable(),
-                    pGC,
-                    const_cast<XPoint*>(&rPoints[n]),
-                    nMaxLines,
-                    CoordModeOrigin );
-
-    if( n < nPoints )
-        XDrawLines( mrParent.GetXDisplay(),
-                    mrParent.GetDrawable(),
-                    pGC,
-                    const_cast<XPoint*>(&rPoints[n]),
-                    nPoints - n,
-                    CoordModeOrigin );
-    if( bClose )
-    {
-        if( rPoints[nPoints-1].x != rPoints[0].x || rPoints[nPoints-1].y != 
rPoints[0].y )
-            internalDrawLine( rPoints[nPoints-1].x, rPoints[nPoints-1].y, 
rPoints[0].x, rPoints[0].y );
-    }
-}
-
 void X11SalGraphicsImpl::copyBits( const SalTwoRect& rPosAry,
                                   SalGraphics      *pSSrcGraphics )
 {
@@ -1087,15 +955,6 @@ void X11SalGraphicsImpl::SetXORMode( bool bSet, bool )
     }
 }
 
-void X11SalGraphicsImpl::internalDrawLine( tools::Long nX1, tools::Long nY1, 
tools::Long nX2, tools::Long nY2 )
-{
-    if( moPenColor )
-    {
-        XDrawLine( mrParent.GetXDisplay(), mrParent.GetDrawable(),SelectPen(),
-                   nX1, nY1, nX2, nY2 );
-    }
-}
-
 bool X11SalGraphicsImpl::drawPolyLineBezier( sal_uInt32, const Point*, const 
PolyFlags* )
 {
     return false;
@@ -1112,58 +971,6 @@ bool X11SalGraphicsImpl::drawPolyPolygonBezier( 
sal_uInt32, const sal_uInt32*,
     return false;
 }
 
-void X11SalGraphicsImpl::invert( tools::Long       nX,
-                                tools::Long        nY,
-                                tools::Long        nDX,
-                                tools::Long        nDY,
-                                SalInvert   nFlags )
-{
-    GC pGC;
-    if( SalInvert::N50 & nFlags )
-    {
-        pGC = GetInvert50GC();
-        XFillRectangle( mrParent.GetXDisplay(), mrParent.GetDrawable(), pGC, 
nX, nY, nDX, nDY );
-    }
-    else
-    {
-        if ( SalInvert::TrackFrame & nFlags )
-        {
-            pGC = GetTrackingGC();
-            XDrawRectangle( mrParent.GetXDisplay(), mrParent.GetDrawable(),  
pGC, nX, nY, nDX, nDY );
-        }
-        else
-        {
-            pGC = GetInvertGC();
-            XFillRectangle( mrParent.GetXDisplay(), mrParent.GetDrawable(),  
pGC, nX, nY, nDX, nDY );
-        }
-    }
-}
-
-void X11SalGraphicsImpl::invert( sal_uInt32 nPoints,
-                             const Point* pPtAry,
-                             SalInvert nFlags )
-{
-    SalPolyLine Points ( nPoints, pPtAry );
-
-    GC pGC;
-    if( SalInvert::N50 & nFlags )
-        pGC = GetInvert50GC();
-    else
-        if ( SalInvert::TrackFrame & nFlags )
-            pGC = GetTrackingGC();
-        else
-            pGC = GetInvertGC();
-
-    if( SalInvert::TrackFrame & nFlags )
-        DrawLines ( nPoints, Points, pGC, true );
-    else
-        XFillPolygon( mrParent.GetXDisplay(),
-                      mrParent.GetDrawable(),
-                      pGC,
-                      &Points[0], nPoints,
-                      Complex, CoordModeOrigin );
-}
-
 bool X11SalGraphicsImpl::drawEPS( 
tools::Long,tools::Long,tools::Long,tools::Long,void*,sal_uInt32 )
 {
     return false;
diff --git a/vcl/unx/generic/gdi/gdiimpl.hxx b/vcl/unx/generic/gdi/gdiimpl.hxx
index 91564bfccc23..1c7689b641f0 100644
--- a/vcl/unx/generic/gdi/gdiimpl.hxx
+++ b/vcl/unx/generic/gdi/gdiimpl.hxx
@@ -68,9 +68,7 @@ private:
     GC mpCopyGC;
     GC mpMaskGC;
     GC mpInvertGC;
-    GC mpInvert50GC;
     GC mpStippleGC;
-    GC mpTrackingGC;
 
     GC CreateGC( Drawable      hDrawable,
             unsigned long nMask = GCGraphicsExposures );
@@ -79,15 +77,7 @@ private:
     GC SelectPen();
     inline GC GetCopyGC();
     inline GC GetStippleGC();
-    GC GetTrackingGC();
     GC GetInvertGC();
-    GC GetInvert50GC();
-
-    void DrawLines( sal_uInt32              nPoints,
-                               const SalPolyLine &rPoints,
-                               GC                 pGC,
-                               bool bClose
-                               );
 
     XID GetXRenderPicture();
 
@@ -97,8 +87,6 @@ private:
                                               const SalBitmap& rSalBitmap,
                                               const SalBitmap& 
rTransparentBitmap );
 
-    void internalDrawLine( tools::Long nX1, tools::Long nY1, tools::Long nX2, 
tools::Long nY2 );
-
 public:
 
     explicit X11SalGraphicsImpl(X11SalGraphics& rParent);
@@ -184,14 +172,6 @@ public:
 
     virtual std::shared_ptr<SalBitmap> getBitmap( tools::Long nX, tools::Long 
nY, tools::Long nWidth, tools::Long nHeight ) override;
 
-    // invert --> ClipRegion (only Windows or VirDevs)
-    virtual void invert(
-                tools::Long nX, tools::Long nY,
-                tools::Long nWidth, tools::Long nHeight,
-                SalInvert nFlags) override;
-
-    virtual void invert( sal_uInt32 nPoints, const Point* pPtAry, SalInvert 
nFlags ) override;
-
     virtual bool drawEPS(
                 tools::Long nX, tools::Long nY,
                 tools::Long nWidth, tools::Long nHeight,

Reply via email to