summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2023-01-05 12:32:32 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2023-01-06 11:34:20 +0000
commit89b1d41e0d2cd16a4088e095de0f673807c4adac (patch)
tree0f5902636b16a48e976d07290df6f182fbff1c76
parent337416dafb66ed8f930d2d69e83fae438fc85f3c (diff)
use std::optional for SALCOLOR_NONE
instead of re-using an actual real color value, because it will totally not work when I convert vcl to use alpha instead of transparency Change-Id: I01f043e0b65ffd852989dfe28f2b9d5a43c9c3d7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145075 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r--include/vcl/salgtype.hxx2
-rw-r--r--vcl/headless/CairoCommon.cxx45
-rw-r--r--vcl/headless/SvpGraphicsBackend.cxx69
-rw-r--r--vcl/inc/headless/CairoCommon.hxx33
-rw-r--r--vcl/inc/qt5/QtGraphics.hxx5
-rw-r--r--vcl/inc/skia/gdiimpl.hxx35
-rw-r--r--vcl/inc/unx/saldisp.hxx2
-rw-r--r--vcl/qt5/QtGraphics_GDI.cxx32
-rw-r--r--vcl/qt5/QtPainter.cxx8
-rw-r--r--vcl/skia/gdiimpl.cxx65
-rw-r--r--vcl/skia/osx/gdiimpl.cxx4
-rw-r--r--vcl/unx/generic/app/saldisp.cxx10
-rw-r--r--vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx16
-rw-r--r--vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx12
-rw-r--r--vcl/unx/generic/gdi/gdiimpl.cxx56
-rw-r--r--vcl/unx/generic/gdi/gdiimpl.hxx5
16 files changed, 205 insertions, 194 deletions
diff --git a/include/vcl/salgtype.hxx b/include/vcl/salgtype.hxx
index a6559d68da23..efd5cc8060d3 100644
--- a/include/vcl/salgtype.hxx
+++ b/include/vcl/salgtype.hxx
@@ -33,8 +33,6 @@ enum class DeviceFormat {
#endif
};
-constexpr ::Color SALCOLOR_NONE ( ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF );
-
struct SalTwoRect
{
tools::Long mnSrcX;
diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 291bc7e36380..0779cb65c564 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -609,14 +609,14 @@ void CairoCommon::clipRegion(cairo_t* cr, const vcl::Region& rClipRegion)
void CairoCommon::clipRegion(cairo_t* cr) { CairoCommon::clipRegion(cr, m_aClipRegion); }
-void CairoCommon::drawPixel(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- tools::Long nX, tools::Long nY)
+void CairoCommon::drawPixel(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor, tools::Long nX, tools::Long nY)
{
- if (rLineColor == SALCOLOR_NONE)
+ if (!rLineColor)
return;
cairo_rectangle(cr, nX, nY, 1, 1);
- CairoCommon::applyColor(cr, rLineColor, 0.0);
+ CairoCommon::applyColor(cr, *rLineColor, 0.0);
cairo_fill(cr);
if (pExtents)
@@ -687,9 +687,11 @@ void CairoCommon::drawLine(cairo_t* cr, basegfx::B2DRange* pExtents, const Color
cairo_stroke(cr);
}
-void CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, bool bAntiAlias, sal_uInt32 nPoly,
- const sal_uInt32* pPointCounts, const Point** pPtAry)
+void CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, bool bAntiAlias,
+ sal_uInt32 nPoly, const sal_uInt32* pPointCounts,
+ const Point** pPtAry)
{
basegfx::B2DPolyPolygon aPolyPoly;
for (sal_uInt32 nPolygon = 0; nPolygon < nPoly; ++nPolygon)
@@ -711,13 +713,14 @@ void CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, cons
aPolyPoly, 0.0);
}
-bool CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, bool bAntiAlias,
+bool CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, bool bAntiAlias,
const basegfx::B2DHomMatrix& rObjectToDevice,
const basegfx::B2DPolyPolygon& rPolyPolygon, double fTransparency)
{
- const bool bHasFill(rFillColor != SALCOLOR_NONE);
- const bool bHasLine(rLineColor != SALCOLOR_NONE);
+ const bool bHasFill(rFillColor.has_value());
+ const bool bHasLine(rLineColor.has_value());
if (0 == rPolyPolygon.count() || !(bHasFill || bHasLine) || fTransparency < 0.0
|| fTransparency >= 1.0)
@@ -746,7 +749,7 @@ bool CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, cons
{
add_polygon_path(cr, rPolyPolygon, rObjectToDevice, !bAntiAlias);
- CairoCommon::applyColor(cr, rFillColor, fTransparency);
+ CairoCommon::applyColor(cr, *rFillColor, fTransparency);
if (pExtents)
{
// Get FillDamage (will be extended for LineDamage below)
@@ -765,7 +768,7 @@ bool CairoCommon::drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, cons
add_polygon_path(cr, rPolyPolygon, rObjectToDevice, !bAntiAlias);
- CairoCommon::applyColor(cr, rLineColor, fTransparency);
+ CairoCommon::applyColor(cr, *rLineColor, fTransparency);
if (pExtents)
{
@@ -1067,12 +1070,14 @@ bool CairoCommon::drawPolyLine(cairo_t* cr, basegfx::B2DRange* pExtents, const C
return true;
}
-bool CairoCommon::drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, tools::Long nX, tools::Long nY,
- tools::Long nWidth, tools::Long nHeight, sal_uInt8 nTransparency)
+bool CairoCommon::drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, tools::Long nX,
+ tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ sal_uInt8 nTransparency)
{
- const bool bHasFill(rFillColor != SALCOLOR_NONE);
- const bool bHasLine(rLineColor != SALCOLOR_NONE);
+ const bool bHasFill(rFillColor.has_value());
+ const bool bHasLine(rLineColor.has_value());
if (!bHasFill && !bHasLine)
return true;
@@ -1083,7 +1088,7 @@ bool CairoCommon::drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents, const
{
cairo_rectangle(cr, nX, nY, nWidth, nHeight);
- applyColor(cr, rFillColor, fTransparency);
+ applyColor(cr, *rFillColor, fTransparency);
if (pExtents)
{
@@ -1104,7 +1109,7 @@ bool CairoCommon::drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents, const
cairo_rectangle(cr, nX, nY, nWidth, nHeight);
- applyColor(cr, rLineColor, fTransparency);
+ applyColor(cr, *rLineColor, fTransparency);
if (pExtents)
{
diff --git a/vcl/headless/SvpGraphicsBackend.cxx b/vcl/headless/SvpGraphicsBackend.cxx
index 0878930373e4..bf79416d88b7 100644
--- a/vcl/headless/SvpGraphicsBackend.cxx
+++ b/vcl/headless/SvpGraphicsBackend.cxx
@@ -53,13 +53,13 @@ tools::Long SvpGraphicsBackend::GetGraphicsWidth() const
return m_rCairoCommon.m_pSurface ? m_rCairoCommon.m_aFrameSize.getX() : 0;
}
-void SvpGraphicsBackend::SetLineColor() { m_rCairoCommon.m_aLineColor = SALCOLOR_NONE; }
+void SvpGraphicsBackend::SetLineColor() { m_rCairoCommon.m_oLineColor = std::nullopt; }
-void SvpGraphicsBackend::SetLineColor(Color nColor) { m_rCairoCommon.m_aLineColor = nColor; }
+void SvpGraphicsBackend::SetLineColor(Color nColor) { m_rCairoCommon.m_oLineColor = nColor; }
-void SvpGraphicsBackend::SetFillColor() { m_rCairoCommon.m_aFillColor = SALCOLOR_NONE; }
+void SvpGraphicsBackend::SetFillColor() { m_rCairoCommon.m_oFillColor = std::nullopt; }
-void SvpGraphicsBackend::SetFillColor(Color nColor) { m_rCairoCommon.m_aFillColor = nColor; }
+void SvpGraphicsBackend::SetFillColor(Color nColor) { m_rCairoCommon.m_oFillColor = nColor; }
void SvpGraphicsBackend::SetXORMode(bool bSet, bool /*bInvertOnly*/)
{
@@ -71,13 +71,13 @@ void SvpGraphicsBackend::SetROPLineColor(SalROPColor nROPColor)
switch (nROPColor)
{
case SalROPColor::N0:
- m_rCairoCommon.m_aLineColor = Color(0, 0, 0);
+ m_rCairoCommon.m_oLineColor = Color(0, 0, 0);
break;
case SalROPColor::N1:
- m_rCairoCommon.m_aLineColor = Color(0xff, 0xff, 0xff);
+ m_rCairoCommon.m_oLineColor = Color(0xff, 0xff, 0xff);
break;
case SalROPColor::Invert:
- m_rCairoCommon.m_aLineColor = Color(0xff, 0xff, 0xff);
+ m_rCairoCommon.m_oLineColor = Color(0xff, 0xff, 0xff);
break;
}
}
@@ -87,20 +87,20 @@ void SvpGraphicsBackend::SetROPFillColor(SalROPColor nROPColor)
switch (nROPColor)
{
case SalROPColor::N0:
- m_rCairoCommon.m_aFillColor = Color(0, 0, 0);
+ m_rCairoCommon.m_oFillColor = Color(0, 0, 0);
break;
case SalROPColor::N1:
- m_rCairoCommon.m_aFillColor = Color(0xff, 0xff, 0xff);
+ m_rCairoCommon.m_oFillColor = Color(0xff, 0xff, 0xff);
break;
case SalROPColor::Invert:
- m_rCairoCommon.m_aFillColor = Color(0xff, 0xff, 0xff);
+ m_rCairoCommon.m_oFillColor = Color(0xff, 0xff, 0xff);
break;
}
}
void SvpGraphicsBackend::drawPixel(tools::Long nX, tools::Long nY)
{
- drawPixel(nX, nY, m_rCairoCommon.m_aLineColor);
+ drawPixel(nX, nY, *m_rCairoCommon.m_oLineColor);
}
void SvpGraphicsBackend::drawPixel(tools::Long nX, tools::Long nY, Color aColor)
@@ -121,7 +121,7 @@ void SvpGraphicsBackend::drawLine(tools::Long nX1, tools::Long nY1, tools::Long
basegfx::B2DRange extents;
m_rCairoCommon.clipRegion(cr);
- CairoCommon::drawLine(cr, &extents, m_rCairoCommon.m_aLineColor, getAntiAlias(), nX1, nY1, nX2,
+ CairoCommon::drawLine(cr, &extents, *m_rCairoCommon.m_oLineColor, getAntiAlias(), nX1, nY1, nX2,
nY2);
m_rCairoCommon.releaseCairoContext(cr, false, extents);
@@ -136,8 +136,8 @@ void SvpGraphicsBackend::drawRect(tools::Long nX, tools::Long nY, tools::Long nW
void SvpGraphicsBackend::implDrawRect(double nX, double nY, double nWidth, double nHeight)
{
// fast path for the common case of simply creating a solid block of color
- if (m_rCairoCommon.m_aFillColor != SALCOLOR_NONE && m_rCairoCommon.m_aLineColor != SALCOLOR_NONE
- && m_rCairoCommon.m_aFillColor == m_rCairoCommon.m_aLineColor)
+ if (m_rCairoCommon.m_oFillColor && m_rCairoCommon.m_oLineColor
+ && m_rCairoCommon.m_oFillColor == m_rCairoCommon.m_oLineColor)
{
double fTransparency = 0;
@@ -163,7 +163,7 @@ void SvpGraphicsBackend::implDrawRect(double nX, double nY, double nWidth, doubl
cairo_rectangle(cr, nX, nY, nWidth, nHeight);
- CairoCommon::applyColor(cr, m_rCairoCommon.m_aFillColor, fTransparency);
+ CairoCommon::applyColor(cr, *m_rCairoCommon.m_oFillColor, fTransparency);
// Get FillDamage (will be extended for LineDamage below)
extents = getClippedFillDamage(cr);
@@ -175,36 +175,36 @@ void SvpGraphicsBackend::implDrawRect(double nX, double nY, double nWidth, doubl
}
// because of the -1 hack we have to do fill and draw separately
- Color aOrigFillColor = m_rCairoCommon.m_aFillColor;
- Color aOrigLineColor = m_rCairoCommon.m_aLineColor;
- m_rCairoCommon.m_aFillColor = SALCOLOR_NONE;
- m_rCairoCommon.m_aLineColor = SALCOLOR_NONE;
+ std::optional<Color> aOrigFillColor = m_rCairoCommon.m_oFillColor;
+ std::optional<Color> aOrigLineColor = m_rCairoCommon.m_oLineColor;
+ m_rCairoCommon.m_oFillColor = std::nullopt;
+ m_rCairoCommon.m_oLineColor = std::nullopt;
- if (aOrigFillColor != SALCOLOR_NONE)
+ if (aOrigFillColor)
{
basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(
basegfx::B2DRectangle(nX, nY, nX + nWidth, nY + nHeight));
- m_rCairoCommon.m_aFillColor = aOrigFillColor;
+ m_rCairoCommon.m_oFillColor = aOrigFillColor;
drawPolyPolygon(basegfx::B2DHomMatrix(), basegfx::B2DPolyPolygon(aRect), 0.0);
- m_rCairoCommon.m_aFillColor = SALCOLOR_NONE;
+ m_rCairoCommon.m_oFillColor = std::nullopt;
}
- if (aOrigLineColor != SALCOLOR_NONE)
+ if (aOrigLineColor)
{
// need same -1 hack as X11SalGraphicsImpl::drawRect
basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(
basegfx::B2DRectangle(nX, nY, nX + nWidth - 1, nY + nHeight - 1));
- m_rCairoCommon.m_aLineColor = aOrigLineColor;
+ m_rCairoCommon.m_oLineColor = aOrigLineColor;
drawPolyPolygon(basegfx::B2DHomMatrix(), basegfx::B2DPolyPolygon(aRect), 0.0);
- m_rCairoCommon.m_aLineColor = SALCOLOR_NONE;
+ m_rCairoCommon.m_oLineColor = std::nullopt;
}
- m_rCairoCommon.m_aFillColor = aOrigFillColor;
- m_rCairoCommon.m_aLineColor = aOrigLineColor;
+ m_rCairoCommon.m_oFillColor = aOrigFillColor;
+ m_rCairoCommon.m_oLineColor = aOrigLineColor;
}
void SvpGraphicsBackend::drawPolyLine(sal_uInt32 nPoints, const Point* pPtAry)
@@ -238,8 +238,8 @@ void SvpGraphicsBackend::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPo
basegfx::B2DRange extents;
m_rCairoCommon.clipRegion(cr);
- CairoCommon::drawPolyPolygon(cr, &extents, m_rCairoCommon.m_aLineColor,
- m_rCairoCommon.m_aFillColor, getAntiAlias(), nPoly, pPointCounts,
+ CairoCommon::drawPolyPolygon(cr, &extents, m_rCairoCommon.m_oLineColor,
+ m_rCairoCommon.m_oFillColor, getAntiAlias(), nPoly, pPointCounts,
pPtAry);
m_rCairoCommon.releaseCairoContext(cr, true, extents);
@@ -253,8 +253,8 @@ bool SvpGraphicsBackend::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToD
basegfx::B2DRange extents;
m_rCairoCommon.clipRegion(cr);
- bool bRetVal(CairoCommon::drawPolyPolygon(cr, &extents, m_rCairoCommon.m_aLineColor,
- m_rCairoCommon.m_aFillColor, getAntiAlias(),
+ bool bRetVal(CairoCommon::drawPolyPolygon(cr, &extents, m_rCairoCommon.m_oLineColor,
+ m_rCairoCommon.m_oFillColor, getAntiAlias(),
rObjectToDevice, rPolyPolygon, fTransparency));
m_rCairoCommon.releaseCairoContext(cr, true, extents);
@@ -283,7 +283,7 @@ bool SvpGraphicsBackend::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDevi
basegfx::B2DRange aExtents;
m_rCairoCommon.clipRegion(cr);
- bool bRetval(CairoCommon::drawPolyLine(cr, &aExtents, m_rCairoCommon.m_aLineColor,
+ bool bRetval(CairoCommon::drawPolyLine(cr, &aExtents, *m_rCairoCommon.m_oLineColor,
getAntiAlias(), rObjectToDevice, rPolyLine,
fTransparency, fLineWidth, pStroke, eLineJoin, eLineCap,
fMiterMinimumAngle, bPixelSnapHairline));
@@ -710,10 +710,9 @@ bool SvpGraphicsBackend::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Lo
basegfx::B2DRange extents;
m_rCairoCommon.clipRegion(cr);
- const bool bRetval(CairoCommon::drawAlphaRect(cr, &extents, m_rCairoCommon.m_aLineColor,
- m_rCairoCommon.m_aFillColor, nX, nY, nWidth,
+ const bool bRetval(CairoCommon::drawAlphaRect(cr, &extents, *m_rCairoCommon.m_oLineColor,
+ *m_rCairoCommon.m_oFillColor, nX, nY, nWidth,
nHeight, nTransparency));
-
m_rCairoCommon.releaseCairoContext(cr, false, extents);
return bRetval;
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index d9a4d8c60a72..7489ecaad969 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -39,6 +39,7 @@
#include <basegfx/polygon/b2dpolypolygon.hxx>
#include <basegfx/polygon/b2dpolygon.hxx>
+#include <optional>
#include <unordered_map>
typedef struct _cairo cairo_t;
@@ -124,15 +125,15 @@ struct VCL_DLLPUBLIC CairoCommon
cairo_surface_t* m_pSurface;
basegfx::B2IVector m_aFrameSize;
vcl::Region m_aClipRegion;
- Color m_aLineColor;
- Color m_aFillColor;
+ std::optional<Color> m_oLineColor;
+ std::optional<Color> m_oFillColor;
PaintMode m_ePaintMode;
double m_fScale;
CairoCommon()
: m_pSurface(nullptr)
- , m_aLineColor(Color(0x00, 0x00, 0x00))
- , m_aFillColor(Color(0xFF, 0xFF, 0XFF))
+ , m_oLineColor(Color(0x00, 0x00, 0x00))
+ , m_oFillColor(Color(0xFF, 0xFF, 0XFF))
, m_ePaintMode(PaintMode::Over)
, m_fScale(1.0)
{
@@ -152,8 +153,8 @@ struct VCL_DLLPUBLIC CairoCommon
void clipRegion(cairo_t* cr);
static void clipRegion(cairo_t* cr, const vcl::Region& rClipRegion);
- static void drawPixel(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- tools::Long nX, tools::Long nY);
+ static void drawPixel(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor, tools::Long nX, tools::Long nY);
static Color getPixel(cairo_surface_t* pSurface, tools::Long nX, tools::Long nY);
@@ -161,12 +162,14 @@ struct VCL_DLLPUBLIC CairoCommon
bool bAntiAlias, tools::Long nX1, tools::Long nY1, tools::Long nX2,
tools::Long nY2);
- static void drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, bool bAntiAlias, sal_uInt32 nPoly,
- const sal_uInt32* pPoints, const Point** pPtAry);
+ static void drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, bool bAntiAlias,
+ sal_uInt32 nPoly, const sal_uInt32* pPoints, const Point** pPtAry);
- static bool drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, bool bAntiAlias,
+ static bool drawPolyPolygon(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, bool bAntiAlias,
const basegfx::B2DHomMatrix& rObjectToDevice,
const basegfx::B2DPolyPolygon&, double fTransparency);
@@ -180,9 +183,11 @@ struct VCL_DLLPUBLIC CairoCommon
basegfx::B2DLineJoin eLineJoin, css::drawing::LineCap eLineCap,
double fMiterMinimumAngle, bool bPixelSnapHairline);
- static bool drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents, const Color& rLineColor,
- const Color& rFillColor, tools::Long nX, tools::Long nY,
- tools::Long nWidth, tools::Long nHeight, sal_uInt8 nTransparency);
+ static bool drawAlphaRect(cairo_t* cr, basegfx::B2DRange* pExtents,
+ const std::optional<Color>& rLineColor,
+ const std::optional<Color>& rFillColor, tools::Long nX,
+ tools::Long nY, tools::Long nWidth, tools::Long nHeight,
+ sal_uInt8 nTransparency);
static bool drawGradient(cairo_t* cr, basegfx::B2DRange* pExtents, bool bAntiAlias,
const tools::PolyPolygon& rPolyPolygon, const Gradient& rGradient);
diff --git a/vcl/inc/qt5/QtGraphics.hxx b/vcl/inc/qt5/QtGraphics.hxx
index b87e6d80b648..ea227634017d 100644
--- a/vcl/inc/qt5/QtGraphics.hxx
+++ b/vcl/inc/qt5/QtGraphics.hxx
@@ -24,6 +24,7 @@
#include <salgdi.hxx>
#include <memory>
+#include <optional>
#include <QtGui/QPainter>
#include <QtGui/QPainterPath>
@@ -50,8 +51,8 @@ class QtGraphicsBackend final : public SalGraphicsImpl, public QtGraphicsBase
QImage* m_pQImage;
QRegion m_aClipRegion;
QPainterPath m_aClipPath;
- Color m_aLineColor;
- Color m_aFillColor;
+ std::optional<Color> m_oLineColor;
+ std::optional<Color> m_oFillColor;
QPainter::CompositionMode m_eCompositionMode;
public:
diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx
index b2bac2c9702c..c4a445aa66c1 100644
--- a/vcl/inc/skia/gdiimpl.hxx
+++ b/vcl/inc/skia/gdiimpl.hxx
@@ -28,6 +28,7 @@
#include <skia/utils.hxx>
#include <SkPaint.h>
+#include <optional>
class SkiaFlushIdle;
class GenericSalLayout;
@@ -320,9 +321,9 @@ protected:
// Create SkPaint set up for gradient drawing.
SkPaint makeGradientPaint() const;
// Create SkPaint set up for text drawing.
- SkPaint makeTextPaint(Color color) const;
+ SkPaint makeTextPaint(std::optional<Color> color) const;
// Create SkPaint for unspecified pixel drawing. Avoid if possible.
- SkPaint makePixelPaint(Color color) const;
+ SkPaint makePixelPaint(std::optional<Color> color) const;
template <typename charT, typename traits>
friend inline std::basic_ostream<charT, traits>&
@@ -350,8 +351,8 @@ protected:
// Note that we generally use VCL coordinates, which is not mSurface coordinates if mScaling!=1.
SkIRect mDirtyRect; // The area that has been changed since the last performFlush().
vcl::Region mClipRegion;
- Color mLineColor;
- Color mFillColor;
+ std::optional<Color> moLineColor;
+ std::optional<Color> moFillColor;
enum class XorMode
{
None,
@@ -388,23 +389,23 @@ inline SkPaint SkiaSalGraphicsImpl::makePaintInternal() const
inline SkPaint SkiaSalGraphicsImpl::makeLinePaint(double transparency) const
{
- assert(mLineColor != SALCOLOR_NONE);
+ assert(moLineColor.has_value());
SkPaint paint = makePaintInternal();
paint.setColor(transparency == 0
- ? SkiaHelper::toSkColor(mLineColor)
- : SkiaHelper::toSkColorWithTransparency(mLineColor, transparency));
+ ? SkiaHelper::toSkColor(*moLineColor)
+ : SkiaHelper::toSkColorWithTransparency(*moLineColor, transparency));
paint.setStyle(SkPaint::kStroke_Style);
return paint;
}
inline SkPaint SkiaSalGraphicsImpl::makeFillPaint(double transparency) const
{
- assert(mFillColor != SALCOLOR_NONE);
+ assert(moFillColor.has_value());
SkPaint paint = makePaintInternal();
paint.setColor(transparency == 0
- ? SkiaHelper::toSkColor(mFillColor)
- : SkiaHelper::toSkColorWithTransparency(mFillColor, transparency));
- if (mLineColor == mFillColor)
+ ? SkiaHelper::toSkColor(*moFillColor)
+ : SkiaHelper::toSkColorWithTransparency(*moFillColor, transparency));
+ if (moLineColor == moFillColor)
paint.setStyle(SkPaint::kStrokeAndFill_Style);
else
paint.setStyle(SkPaint::kFill_Style);
@@ -415,19 +416,19 @@ inline SkPaint SkiaSalGraphicsImpl::makeBitmapPaint() const { return makePaintIn
inline SkPaint SkiaSalGraphicsImpl::makeGradientPaint() const { return makePaintInternal(); }
-inline SkPaint SkiaSalGraphicsImpl::makeTextPaint(Color color) const
+inline SkPaint SkiaSalGraphicsImpl::makeTextPaint(std::optional<Color> color) const
{
- assert(color != SALCOLOR_NONE);
+ assert(color.has_value());
SkPaint paint = makePaintInternal();
- paint.setColor(SkiaHelper::toSkColor(color));
+ paint.setColor(SkiaHelper::toSkColor(*color));
return paint;
}
-inline SkPaint SkiaSalGraphicsImpl::makePixelPaint(Color color) const
+inline SkPaint SkiaSalGraphicsImpl::makePixelPaint(std::optional<Color> color) const
{
- assert(color != SALCOLOR_NONE);
+ assert(color.has_value());
SkPaint paint = makePaintInternal();
- paint.setColor(SkiaHelper::toSkColor(color));
+ paint.setColor(SkiaHelper::toSkColor(*color));
return paint;
}
diff --git a/vcl/inc/unx/saldisp.hxx b/vcl/inc/unx/saldisp.hxx
index a23bcb362c58..83f847d4d78c 100644
--- a/vcl/inc/unx/saldisp.hxx
+++ b/vcl/inc/unx/saldisp.hxx
@@ -155,7 +155,7 @@ public:
int r,
int g,
int b ) const;
- Pixel GetPixel( Color nColor ) const;
+ Pixel GetPixel( std::optional<Color> nColor ) const;
Color GetColor( Pixel nPixel ) const;
};
diff --git a/vcl/qt5/QtGraphics_GDI.cxx b/vcl/qt5/QtGraphics_GDI.cxx
index 832f8a09eb2f..08116f85a529 100644
--- a/vcl/qt5/QtGraphics_GDI.cxx
+++ b/vcl/qt5/QtGraphics_GDI.cxx
@@ -36,8 +36,8 @@
QtGraphicsBackend::QtGraphicsBackend(QtFrame* pFrame, QImage* pQImage)
: m_pFrame(pFrame)
, m_pQImage(pQImage)
- , m_aLineColor(0x00, 0x00, 0x00)
- , m_aFillColor(0xFF, 0xFF, 0XFF)
+ , m_oLineColor(std::in_place, 0x00, 0x00, 0x00)
+ , m_oFillColor(std::in_place, 0xFF, 0xFF, 0XFF)
, m_eCompositionMode(QPainter::CompositionMode_SourceOver)
{
ResetClipRegion();
@@ -217,13 +217,13 @@ void QtGraphicsBackend::drawLine(tools::Long nX1, tools::Long nY1, tools::Long n
void QtGraphicsBackend::drawRect(tools::Long nX, tools::Long nY, tools::Long nWidth,
tools::Long nHeight)
{
- if (SALCOLOR_NONE == m_aFillColor && SALCOLOR_NONE == m_aLineColor)
+ if (!m_oFillColor && !m_oLineColor)
return;
QtPainter aPainter(*this, true);
- if (SALCOLOR_NONE != m_aFillColor)
+ if (m_oFillColor)
aPainter.fillRect(nX, nY, nWidth, nHeight, aPainter.brush());
- if (SALCOLOR_NONE != m_aLineColor)
+ if (m_oLineColor)
aPainter.drawRect(nX, nY, nWidth - 1, nHeight - 1);
aPainter.update(nX, nY, nWidth, nHeight);
}
@@ -268,7 +268,7 @@ void QtGraphicsBackend::drawPolyPolygon(sal_uInt32 nPolyCount, const sal_uInt32*
const Point** ppPtAry)
{
// ignore invisible polygons
- if (SALCOLOR_NONE == m_aFillColor && SALCOLOR_NONE == m_aLineColor)
+ if (!m_oFillColor && !m_oLineColor)
return;
QPainterPath aPath;
@@ -296,7 +296,7 @@ bool QtGraphicsBackend::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDe
double fTransparency)
{
// ignore invisible polygons
- if (SALCOLOR_NONE == m_aFillColor && SALCOLOR_NONE == m_aLineColor)
+ if (!m_oFillColor && !m_oLineColor)
return true;
if ((fTransparency >= 1.0) || (fTransparency < 0))
return true;
@@ -307,7 +307,7 @@ bool QtGraphicsBackend::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDe
QPainterPath aPath;
// ignore empty polygons
- if (!AddPolyPolygonToPath(aPath, aPolyPolygon, !getAntiAlias(), m_aLineColor != SALCOLOR_NONE))
+ if (!AddPolyPolygonToPath(aPath, aPolyPolygon, !getAntiAlias(), m_oLineColor.has_value()))
return true;
QtPainter aPainter(*this, true, 255 * (1.0 - fTransparency));
@@ -342,7 +342,7 @@ bool QtGraphicsBackend::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDevic
basegfx::B2DLineJoin eLineJoin, css::drawing::LineCap eLineCap,
double fMiterMinimumAngle, bool bPixelSnapHairline)
{
- if (SALCOLOR_NONE == m_aFillColor && SALCOLOR_NONE == m_aLineColor)
+ if (!m_oFillColor && !m_oLineColor)
{
return true;
}
@@ -651,15 +651,15 @@ bool QtGraphicsBackend::hasFastDrawTransformedBitmap() const { return false; }
bool QtGraphicsBackend::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth,
tools::Long nHeight, sal_uInt8 nTransparency)
{
- if (SALCOLOR_NONE == m_aFillColor && SALCOLOR_NONE == m_aLineColor)
+ if (!m_oFillColor && !m_oLineColor)
return true;
assert(nTransparency <= 100);
if (nTransparency > 100)
nTransparency = 100;
QtPainter aPainter(*this, true, (100 - nTransparency) * (255.0 / 100));
- if (SALCOLOR_NONE != m_aFillColor)
+ if (m_oFillColor)
aPainter.fillRect(nX, nY, nWidth, nHeight, aPainter.brush());
- if (SALCOLOR_NONE != m_aLineColor)
+ if (m_oLineColor)
aPainter.drawRect(nX, nY, nWidth - 1, nHeight - 1);
aPainter.update(nX, nY, nWidth, nHeight);
return true;
@@ -669,13 +669,13 @@ sal_uInt16 QtGraphicsBackend::GetBitCount() const { return getFormatBits(m_pQIma
tools::Long QtGraphicsBackend::GetGraphicsWidth() const { return m_pQImage->width(); }
-void QtGraphicsBackend::SetLineColor() { m_aLineColor = SALCOLOR_NONE; }
+void QtGraphicsBackend::SetLineColor() { m_oLineColor = std::nullopt; }
-void QtGraphicsBackend::SetLineColor(Color nColor) { m_aLineColor = nColor; }
+void QtGraphicsBackend::SetLineColor(Color nColor) { m_oLineColor = nColor; }
-void QtGraphicsBackend::SetFillColor() { m_aFillColor = SALCOLOR_NONE; }
+void QtGraphicsBackend::SetFillColor() { m_oFillColor = std::nullopt; }
-void QtGraphicsBackend::SetFillColor(Color nColor) { m_aFillColor = nColor; }
+void QtGraphicsBackend::SetFillColor(Color nColor) { m_oFillColor = nColor; }
void QtGraphicsBackend::SetXORMode(bool bSet, bool)
{
diff --git a/vcl/qt5/QtPainter.cxx b/vcl/qt5/QtPainter.cxx
index a4c83bbba6d8..529a7c5783dd 100644
--- a/vcl/qt5/QtPainter.cxx
+++ b/vcl/qt5/QtPainter.cxx
@@ -39,17 +39,17 @@ QtPainter::QtPainter(QtGraphicsBackend& rGraphics, bool bPrepareBrush, sal_uInt8
setClipPath(rGraphics.m_aClipPath);
else
setClipRegion(rGraphics.m_aClipRegion);
- if (SALCOLOR_NONE != rGraphics.m_aLineColor)
+ if (rGraphics.m_oLineColor)
{
- QColor aColor = toQColor(rGraphics.m_aLineColor);
+ QColor aColor = toQColor(*rGraphics.m_oLineColor);
aColor.setAlpha(nTransparency);
setPen(aColor);
}
else
setPen(Qt::NoPen);
- if (bPrepareBrush && SALCOLOR_NONE != rGraphics.m_aFillColor)
+ if (bPrepareBrush && rGraphics.m_oFillColor)
{
- QColor aColor = toQColor(rGraphics.m_aFillColor);
+ QColor aColor = toQColor(*rGraphics.m_oFillColor);
aColor.setAlpha(nTransparency);
setBrush(aColor);
}
diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx
index 55f803217bb0..15d901d93ff2 100644
--- a/vcl/skia/gdiimpl.cxx
+++ b/vcl/skia/gdiimpl.cxx
@@ -262,8 +262,8 @@ SkiaSalGraphicsImpl::SkiaSalGraphicsImpl(SalGraphics& rParent, SalGeometryProvid
: mParent(rParent)
, mProvider(pProvider)
, mIsGPU(false)
- , mLineColor(SALCOLOR_NONE)
- , mFillColor(SALCOLOR_NONE)
+ , moLineColor(std::nullopt)
+ , moFillColor(std::nullopt)
, mXorMode(XorMode::None)
, mFlush(new SkiaFlushIdle(this))
, mScaling(1)
@@ -618,25 +618,25 @@ tools::Long SkiaSalGraphicsImpl::GetGraphicsWidth() const { return GetWidth(); }
void SkiaSalGraphicsImpl::SetLineColor()
{
checkPendingDrawing();
- mLineColor = SALCOLOR_NONE;
+ moLineColor = std::nullopt;
}
void SkiaSalGraphicsImpl::SetLineColor(Color nColor)
{
checkPendingDrawing();
- mLineColor = nColor;
+ moLineColor = nColor;
}
void SkiaSalGraphicsImpl::SetFillColor()
{
checkPendingDrawing();
- mFillColor = SALCOLOR_NONE;
+ moFillColor = std::nullopt;
}
void SkiaSalGraphicsImpl::SetFillColor(Color nColor)
{
checkPendingDrawing();
- mFillColor = nColor;
+ moFillColor = nColor;
}
void SkiaSalGraphicsImpl::SetXORMode(bool set, bool invert)
@@ -655,13 +655,13 @@ void SkiaSalGraphicsImpl::SetROPLineColor(SalROPColor nROPColor)
switch (nROPColor)
{
case SalROPColor::N0:
- mLineColor = Color(0, 0, 0);
+ moLineColor = Color(0, 0, 0);
break;
case SalROPColor::N1:
- mLineColor = Color(0xff, 0xff, 0xff);
+ moLineColor = Color(0xff, 0xff, 0xff);
break;
case SalROPColor::Invert:
- mLineColor = Color(0xff, 0xff, 0xff);
+ moLineColor = Color(0xff, 0xff, 0xff);
break;
}
}
@@ -672,26 +672,24 @@ void SkiaSalGraphicsImpl::SetROPFillColor(SalROPColor nROPColor)
switch (nROPColor)
{
case SalROPColor::N0:
- mFillColor = Color(0, 0, 0);
+ moFillColor = Color(0, 0, 0);
break;
case SalROPColor::N1:
- mFillColor = Color(0xff, 0xff, 0xff);
+ moFillColor = Color(0xff, 0xff, 0xff);
break;
case SalROPColor::Invert:
- mFillColor = Color(0xff, 0xff, 0xff);
+ moFillColor = Color(0xff, 0xff, 0xff);
break;
}
}
void SkiaSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY)
{
- drawPixel(nX, nY, mLineColor);
+ drawPixel(nX, nY, *moLineColor);
}
void SkiaSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nColor)
{
- if (nColor == SALCOLOR_NONE)
- return;
preDraw();
SAL_INFO("vcl.skia.trace", "drawpixel(" << this << "): " << Point(nX, nY) << ":" << nColor);
addUpdateRegion(SkRect::MakeXYWH(nX, nY, 1, 1));
@@ -712,11 +710,11 @@ void SkiaSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nColor
void SkiaSalGraphicsImpl::drawLine(tools::Long nX1, tools::Long nY1, tools::Long nX2,
tools::Long nY2)
{
- if (mLineColor == SALCOLOR_NONE)
+ if (!moLineColor)
return;
preDraw();
SAL_INFO("vcl.skia.trace", "drawline(" << this << "): " << Point(nX1, nY1) << "->"
- << Point(nX2, nY2) << ":" << mLineColor);
+ << Point(nX2, nY2) << ":" << *moLineColor);
addUpdateRegion(SkRect::MakeLTRB(nX1, nY1, nX2, nY2).makeSorted());
SkPaint paint = makeLinePaint();
paint.setAntiAlias(mParent.getAntiAlias());
@@ -736,22 +734,23 @@ void SkiaSalGraphicsImpl::privateDrawAlphaRect(tools::Long nX, tools::Long nY, t
bool blockAA)
{
preDraw();
- SAL_INFO("vcl.skia.trace",
- "privatedrawrect(" << this << "): " << SkIRect::MakeXYWH(nX, nY, nWidth, nHeight)
- << ":" << mLineColor << ":" << mFillColor << ":" << fTransparency);
+ SAL_INFO("vcl.skia.trace", "privatedrawrect("
+ << this << "): " << SkIRect::MakeXYWH(nX, nY, nWidth, nHeight)
+ << ":" << *moLineColor << ":" << *moFillColor << ":"
+ << fTransparency);
addUpdateRegion(SkRect::MakeXYWH(nX, nY, nWidth, nHeight));
SkCanvas* canvas = getDrawCanvas();
- if (mFillColor != SALCOLOR_NONE)
+ if (moFillColor)
{
SkPaint paint = makeFillPaint(fTransparency);
paint.setAntiAlias(!blockAA && mParent.getAntiAlias());
// HACK: If the polygon is just a line, it still should be drawn. But when filling
// Skia doesn't draw empty polygons, so in that case ensure the line is drawn.
- if (mLineColor == SALCOLOR_NONE && SkSize::Make(nWidth, nHeight).isEmpty())
+ if (!moLineColor && SkSize::Make(nWidth, nHeight).isEmpty())
paint.setStyle(SkPaint::kStroke_Style);
canvas->drawIRect(SkIRect::MakeXYWH(nX, nY, nWidth, nHeight), paint);
}
- if (mLineColor != SALCOLOR_NONE && mLineColor != mFillColor) // otherwise handled by fill
+ if (moLineColor && moLineColor != moFillColor) // otherwise handled by fill
{
SkPaint paint = makeLinePaint(fTransparency);
paint.setAntiAlias(!blockAA && mParent.getAntiAlias());
@@ -828,8 +827,8 @@ bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectTo
const basegfx::B2DPolyPolygon& rPolyPolygon,
double fTransparency)
{
- const bool bHasFill(mFillColor != SALCOLOR_NONE);
- const bool bHasLine(mLineColor != SALCOLOR_NONE);
+ const bool bHasFill(moFillColor.has_value());
+ const bool bHasLine(moLineColor.has_value());
if (rPolyPolygon.count() == 0 || !(bHasFill || bHasLine) || fTransparency < 0.0
|| fTransparency >= 1.0)
@@ -839,7 +838,7 @@ bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectTo
aPolyPolygon.transform(rObjectToDevice);
SAL_INFO("vcl.skia.trace", "drawpolypolygon(" << this << "): " << aPolyPolygon << ":"
- << mLineColor << ":" << mFillColor);
+ << *moLineColor << ":" << *moFillColor);
if (delayDrawPolyPolygon(aPolyPolygon, fTransparency))
{
@@ -880,17 +879,17 @@ void SkiaSalGraphicsImpl::performDrawPolyPolygon(const basegfx::B2DPolyPolygon&
const SkScalar posFix = useAA ? toSkXYFix : 0;
polygonPath.offset(toSkX(0) + posFix, toSkY(0) + posFix, nullptr);
}
- if (mFillColor != SALCOLOR_NONE)
+ if (moFillColor)
{
SkPaint aPaint = makeFillPaint(fTransparency);
aPaint.setAntiAlias(useAA);
// HACK: If the polygon is just a line, it still should be drawn. But when filling
// Skia doesn't draw empty polygons, so in that case ensure the line is drawn.
- if (mLineColor == SALCOLOR_NONE && polygonPath.getBounds().isEmpty())
+ if (!moLineColor && polygonPath.getBounds().isEmpty())
aPaint.setStyle(SkPaint::kStroke_Style);
getDrawCanvas()->drawPath(polygonPath, aPaint);
}
- if (mLineColor != SALCOLOR_NONE && mLineColor != mFillColor) // otherwise handled by fill
+ if (moLineColor && moLineColor != moFillColor) // otherwise handled by fill
{
SkPaint aPaint = makeLinePaint(fTransparency);
aPaint.setAntiAlias(useAA);
@@ -934,7 +933,7 @@ bool SkiaSalGraphicsImpl::delayDrawPolyPolygon(const basegfx::B2DPolyPolygon& aP
if (!mParent.getAntiAlias())
return false;
// Only filled polygons without an outline are problematic.
- if (mFillColor == SALCOLOR_NONE || mLineColor != SALCOLOR_NONE)
+ if (!moFillColor || moLineColor)
return false;
// Merge only simple polygons, real polypolygons most likely aren't needlessly split,
// so they do not need joining.
@@ -1026,14 +1025,14 @@ bool SkiaSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDev
css::drawing::LineCap eLineCap, double fMiterMinimumAngle,
bool bPixelSnapHairline)
{
- if (!rPolyLine.count() || fTransparency < 0.0 || fTransparency > 1.0
- || mLineColor == SALCOLOR_NONE)
+ if (!rPolyLine.count() || fTransparency < 0.0 || fTransparency > 1.0 || !moLineColor)
{
return true;
}
preDraw();
- SAL_INFO("vcl.skia.trace", "drawpolyline(" << this << "): " << rPolyLine << ":" << mLineColor);
+ SAL_INFO("vcl.skia.trace",
+ "drawpolyline(" << this << "): " << rPolyLine << ":" << *moLineColor);
// Adjust line width for object-to-device scale.
fLineWidth = (rObjectToDevice * basegfx::B2DVector(fLineWidth, 0)).getLength();
diff --git a/vcl/skia/osx/gdiimpl.cxx b/vcl/skia/osx/gdiimpl.cxx
index 1c1b7d2955c3..17a02fd441cf 100644
--- a/vcl/skia/osx/gdiimpl.cxx
+++ b/vcl/skia/osx/gdiimpl.cxx
@@ -239,10 +239,10 @@ bool AquaSkiaSalGraphicsImpl::drawNativeControl(ControlType nType, ControlPart n
// Setup context state for drawing (performDrawNativeControl() e.g. fills background in some cases).
CGContextSetFillColorSpace(context, GetSalData()->mxRGBSpace);
CGContextSetStrokeColorSpace(context, GetSalData()->mxRGBSpace);
- RGBAColor lineColor(mLineColor);
+ RGBAColor lineColor(*moLineColor);
CGContextSetRGBStrokeColor(context, lineColor.GetRed(), lineColor.GetGreen(),
lineColor.GetBlue(), lineColor.GetAlpha());
- RGBAColor fillColor(mFillColor);
+ RGBAColor fillColor(*moFillColor);
CGContextSetRGBFillColor(context, fillColor.GetRed(), fillColor.GetGreen(), fillColor.GetBlue(),
fillColor.GetAlpha());
// Adjust for our drawn-to coordinates in the bitmap.
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index ca3e715bc78a..edb14824c246 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -2767,11 +2767,13 @@ bool SalColormap::GetXPixels( XColor &rColor,
return GetXPixel( rColor, r^0xFF, g^0xFF, b^0xFF );
}
-Pixel SalColormap::GetPixel( Color nColor ) const
+Pixel SalColormap::GetPixel( std::optional<Color> oColor ) const
{
- if( SALCOLOR_NONE == nColor ) return 0;
- if( COL_BLACK == nColor ) return m_nBlackPixel;
- if( COL_WHITE == nColor ) return m_nWhitePixel;
+ if( !oColor ) return 0;
+ if( COL_BLACK == oColor ) return m_nBlackPixel;
+ if( COL_WHITE == oColor ) return m_nWhitePixel;
+
+ Color nColor = *oColor;
if( m_aVisual.GetClass() == TrueColor )
return m_aVisual.GetTCPixel( nColor );
diff --git a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
index d655b1d8fb16..60cbf1230400 100644
--- a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
+++ b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.cxx
@@ -25,8 +25,8 @@
X11CairoSalGraphicsImpl::X11CairoSalGraphicsImpl(X11SalGraphics& rParent, X11Common& rX11Common)
: X11SalGraphicsImpl(rParent)
, mrX11Common(rX11Common)
- , mnPenColor(SALCOLOR_NONE)
- , mnFillColor(SALCOLOR_NONE)
+ , moPenColor(std::nullopt)
+ , moFillColor(std::nullopt)
{
}
@@ -36,7 +36,7 @@ void X11CairoSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32
cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider());
clipRegion(cr);
- CairoCommon::drawPolyPolygon(cr, nullptr, mnPenColor, mnFillColor, getAntiAlias(), nPoly,
+ CairoCommon::drawPolyPolygon(cr, nullptr, moPenColor, moFillColor, getAntiAlias(), nPoly,
pPoints, pPtAry);
X11Common::releaseCairoContext(cr);
@@ -49,7 +49,7 @@ bool X11CairoSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObje
cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider());
clipRegion(cr);
- bool bRetVal(CairoCommon::drawPolyPolygon(cr, nullptr, mnPenColor, mnFillColor, getAntiAlias(),
+ bool bRetVal(CairoCommon::drawPolyPolygon(cr, nullptr, moPenColor, moFillColor, getAntiAlias(),
rObjectToDevice, rPolyPolygon, fTransparency));
X11Common::releaseCairoContext(cr);
@@ -58,7 +58,7 @@ bool X11CairoSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObje
void X11CairoSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY)
{
- drawPixel(nX, nY, mnPenColor);
+ drawPixel(nX, nY, *moPenColor);
}
void X11CairoSalGraphicsImpl::drawPixel(tools::Long nX, tools::Long nY, Color nColor)
@@ -88,7 +88,7 @@ void X11CairoSalGraphicsImpl::drawLine(tools::Long nX1, tools::Long nY1, tools::
cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider());
clipRegion(cr);
- CairoCommon::drawLine(cr, nullptr, mnPenColor, getAntiAlias(), nX1, nY1, nX2, nY2);
+ CairoCommon::drawLine(cr, nullptr, *moPenColor, getAntiAlias(), nX1, nY1, nX2, nY2);
X11Common::releaseCairoContext(cr);
}
@@ -111,7 +111,7 @@ bool X11CairoSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectT
// Use the now available static drawPolyLine from the Cairo-Headless-Fallback
// that will take care of all needed stuff
const bool bRetval(CairoCommon::drawPolyLine(
- cr, nullptr, mnPenColor, getAntiAlias(), rObjectToDevice, rPolyLine, fTransparency,
+ cr, nullptr, *moPenColor, getAntiAlias(), rObjectToDevice, rPolyLine, fTransparency,
fLineWidth, pStroke, eLineJoin, eLineCap, fMiterMinimumAngle, bPixelSnapHairline));
X11Common::releaseCairoContext(cr);
@@ -125,7 +125,7 @@ bool X11CairoSalGraphicsImpl::drawAlphaRect(tools::Long nX, tools::Long nY, tool
cairo_t* cr = mrX11Common.getCairoContext(mrParent.GetGeometryProvider());
clipRegion(cr);
- const bool bRetval(CairoCommon::drawAlphaRect(cr, nullptr, mnPenColor, mnFillColor, nX, nY,
+ const bool bRetval(CairoCommon::drawAlphaRect(cr, nullptr, *moPenColor, *moFillColor, nX, nY,
nWidth, nHeight, nTransparency));
X11Common::releaseCairoContext(cr);
diff --git a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
index 8e8cf4c68b0f..a1b5b6d475e7 100644
--- a/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
+++ b/vcl/unx/generic/gdi/X11CairoSalGraphicsImpl.hxx
@@ -29,8 +29,8 @@ class X11CairoSalGraphicsImpl : public X11SalGraphicsImpl
private:
X11Common& mrX11Common;
vcl::Region maClipRegion;
- Color mnPenColor;
- Color mnFillColor;
+ std::optional<Color> moPenColor;
+ std::optional<Color> moFillColor;
using X11SalGraphicsImpl::drawPolyLine;
@@ -51,25 +51,25 @@ public:
void SetLineColor() override
{
- mnPenColor = SALCOLOR_NONE;
+ moPenColor = std::nullopt;
X11SalGraphicsImpl::SetLineColor();
}
void SetLineColor(Color nColor) override
{
- mnPenColor = nColor;
+ moPenColor = nColor;
X11SalGraphicsImpl::SetLineColor(nColor);
}
void SetFillColor() override
{
- mnFillColor = SALCOLOR_NONE;
+ moFillColor = std::nullopt;
X11SalGraphicsImpl::SetFillColor();
}
void SetFillColor(Color nColor) override
{
- mnFillColor = nColor;
+ moFillColor = nColor;
X11SalGraphicsImpl::SetFillColor(nColor);
}
diff --git a/vcl/unx/generic/gdi/gdiimpl.cxx b/vcl/unx/generic/gdi/gdiimpl.cxx
index fc24b6b9969a..2afee55b9a99 100644
--- a/vcl/unx/generic/gdi/gdiimpl.cxx
+++ b/vcl/unx/generic/gdi/gdiimpl.cxx
@@ -121,7 +121,7 @@ namespace
X11SalGraphicsImpl::X11SalGraphicsImpl(X11SalGraphics& rParent):
mrParent(rParent),
- mnBrushColor( 0xFF, 0xFF, 0XFF ),
+ moBrushColor( std::in_place, 0xFF, 0xFF, 0XFF ),
mpBrushGC(nullptr),
mnBrushPixel(0),
mbPenGC(false),
@@ -134,7 +134,7 @@ X11SalGraphicsImpl::X11SalGraphicsImpl(X11SalGraphics& rParent):
mbDitherBrush(false),
mbXORMode(false),
mpPenGC(nullptr),
- mnPenColor( 0x00, 0x00, 0x00 ),
+ moPenColor( std::in_place, 0x00, 0x00, 0x00 ),
mnPenPixel(0),
mpMonoGC(nullptr),
mpCopyGC(nullptr),
@@ -152,8 +152,8 @@ X11SalGraphicsImpl::~X11SalGraphicsImpl()
void X11SalGraphicsImpl::Init()
{
- mnPenPixel = mrParent.GetPixel( mnPenColor );
- mnBrushPixel = mrParent.GetPixel( mnBrushColor );
+ mnPenPixel = mrParent.GetPixel( *moPenColor );
+ mnBrushPixel = mrParent.GetPixel( *moBrushColor );
}
XID X11SalGraphicsImpl::GetXRenderPicture()
@@ -344,7 +344,7 @@ GC X11SalGraphicsImpl::SelectBrush()
{
Display *pDisplay = mrParent.GetXDisplay();
- SAL_WARN_IF( mnBrushColor == SALCOLOR_NONE, "vcl", "Brush Transparent" );
+ SAL_WARN_IF( !moBrushColor, "vcl", "Brush Transparent" );
if( !mpBrushGC )
{
@@ -397,7 +397,7 @@ GC X11SalGraphicsImpl::SelectPen()
if( !mbPenGC )
{
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
XSetForeground( pDisplay, mpPenGC, mnPenPixel );
XSetFunction ( pDisplay, mpPenGC, mbXORMode ? GXxor : GXcopy );
mrParent.SetClipRegion( mpPenGC );
@@ -978,18 +978,18 @@ void X11SalGraphicsImpl::setClipRegion( const vcl::Region& i_rClip )
void X11SalGraphicsImpl::SetLineColor()
{
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
{
- mnPenColor = SALCOLOR_NONE;
+ moPenColor = std::nullopt;
mbPenGC = false;
}
}
void X11SalGraphicsImpl::SetLineColor( Color nColor )
{
- if( mnPenColor != nColor )
+ if( moPenColor != nColor )
{
- mnPenColor = nColor;
+ moPenColor = nColor;
mnPenPixel = mrParent.GetPixel( nColor );
mbPenGC = false;
}
@@ -997,24 +997,24 @@ void X11SalGraphicsImpl::SetLineColor( Color nColor )
void X11SalGraphicsImpl::SetFillColor()
{
- if( mnBrushColor != SALCOLOR_NONE )
+ if( moBrushColor )
{
mbDitherBrush = false;
- mnBrushColor = SALCOLOR_NONE;
+ moBrushColor = std::nullopt;
mbBrushGC = false;
}
}
void X11SalGraphicsImpl::SetFillColor( Color nColor )
{
- if( mnBrushColor == nColor )
+ if( moBrushColor == nColor )
return;
mbDitherBrush = false;
- mnBrushColor = nColor;
+ moBrushColor = nColor;
mnBrushPixel = mrParent.GetPixel( nColor );
if( TrueColor != mrParent.GetColormap().GetVisual().GetClass()
- && mrParent.GetColormap().GetColor( mnBrushPixel ) != mnBrushColor
+ && mrParent.GetColormap().GetColor( mnBrushPixel ) != moBrushColor
&& nColor != Color( 0x00, 0x00, 0x00 ) // black
&& nColor != Color( 0x00, 0x00, 0x80 ) // blue
&& nColor != Color( 0x00, 0x80, 0x00 ) // green
@@ -1049,7 +1049,7 @@ void X11SalGraphicsImpl::SetROPLineColor( SalROPColor nROPColor )
mnPenPixel = static_cast<Pixel>(1 << mrParent.GetVisual().GetDepth()) - 1;
break;
}
- mnPenColor = mrParent.GetColormap().GetColor( mnPenPixel );
+ moPenColor = mrParent.GetColormap().GetColor( mnPenPixel );
mbPenGC = false;
}
@@ -1068,7 +1068,7 @@ void X11SalGraphicsImpl::SetROPFillColor( SalROPColor nROPColor )
break;
}
mbDitherBrush = false;
- mnBrushColor = mrParent.GetColormap().GetColor( mnBrushPixel );
+ moBrushColor = mrParent.GetColormap().GetColor( mnBrushPixel );
mbBrushGC = false;
}
@@ -1089,13 +1089,13 @@ void X11SalGraphicsImpl::SetXORMode( bool bSet, bool )
void X11SalGraphicsImpl::internalDrawPixel( tools::Long nX, tools::Long nY )
{
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
XDrawPoint( mrParent.GetXDisplay(), mrParent.GetDrawable(), SelectPen(), nX, nY );
}
void X11SalGraphicsImpl::internalDrawLine( tools::Long nX1, tools::Long nY1, tools::Long nX2, tools::Long nY2 )
{
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
{
XDrawLine( mrParent.GetXDisplay(), mrParent.GetDrawable(),SelectPen(),
nX1, nY1, nX2, nY2 );
@@ -1104,7 +1104,7 @@ void X11SalGraphicsImpl::internalDrawLine( tools::Long nX1, tools::Long nY1, too
void X11SalGraphicsImpl::drawRect( tools::Long nX, tools::Long nY, tools::Long nDX, tools::Long nDY )
{
- if( mnBrushColor != SALCOLOR_NONE )
+ if( moBrushColor )
{
XFillRectangle( mrParent.GetXDisplay(),
mrParent.GetDrawable(),
@@ -1112,7 +1112,7 @@ void X11SalGraphicsImpl::drawRect( tools::Long nX, tools::Long nY, tools::Long n
nX, nY, nDX, nDY );
}
// description DrawRect is wrong; thus -1
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
XDrawRectangle( mrParent.GetXDisplay(),
mrParent.GetDrawable(),
SelectPen(),
@@ -1121,7 +1121,7 @@ void X11SalGraphicsImpl::drawRect( tools::Long nX, tools::Long nY, tools::Long n
void X11SalGraphicsImpl::drawPolyLine( sal_uInt32 nPoints, const Point *pPtAry )
{
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
{
SalPolyLine Points( nPoints, pPtAry );
@@ -1184,14 +1184,14 @@ void X11SalGraphicsImpl::drawPolygon( sal_uInt32 nPoints, const Point* pPtAry )
}
}
- if( mnBrushColor != SALCOLOR_NONE )
+ if( moBrushColor )
XFillPolygon( mrParent.GetXDisplay(),
mrParent.GetDrawable(),
SelectBrush(),
&Points[0], nPoints,
Complex, CoordModeOrigin );
- if( mnPenColor != SALCOLOR_NONE )
+ if( moPenColor )
DrawLines( nPoints, Points, SelectPen(), true );
}
@@ -1334,7 +1334,7 @@ bool X11SalGraphicsImpl::drawFilledTriangles(
}
// set polygon foreground color and opacity
- XRenderColor aRenderColor = GetXRenderColor( mnBrushColor , fTransparency );
+ XRenderColor aRenderColor = GetXRenderColor( *moBrushColor , fTransparency );
rRenderPeer.FillRectangle( PictOpSrc, rEntry.m_aPicture, &aRenderColor, 0, 0, 1, 1 );
// set clipping
@@ -1604,8 +1604,8 @@ bool X11SalGraphicsImpl::drawPolyLine(
// temporarily adjust brush color to pen color
// since the line is drawn as an area-polygon
- const Color aKeepBrushColor = mnBrushColor;
- mnBrushColor = mnPenColor;
+ const std::optional<Color> aKeepBrushColor = moBrushColor;
+ moBrushColor = moPenColor;
// create the area-polygon for the line
const bool bDrawnOk(
@@ -1615,7 +1615,7 @@ bool X11SalGraphicsImpl::drawPolyLine(
fTransparency));
// restore the original brush GC
- mnBrushColor = aKeepBrushColor;
+ moBrushColor = aKeepBrushColor;
return bDrawnOk;
}
diff --git a/vcl/unx/generic/gdi/gdiimpl.hxx b/vcl/unx/generic/gdi/gdiimpl.hxx
index 7b8dca9f5009..4eaf19d2c8ae 100644
--- a/vcl/unx/generic/gdi/gdiimpl.hxx
+++ b/vcl/unx/generic/gdi/gdiimpl.hxx
@@ -28,6 +28,7 @@
#include <basegfx/polygon/b2dtrapezoid.hxx>
#include <basegfx/polygon/b2dpolygontriangulator.hxx>
#include <ControlCacheKey.hxx>
+#include <optional>
/* From <X11/Intrinsic.h> */
typedef unsigned long Pixel;
@@ -44,7 +45,7 @@ protected:
X11SalGraphics& mrParent;
private:
- Color mnBrushColor;
+ std::optional<Color> moBrushColor;
GC mpBrushGC; // Brush attributes
Pixel mnBrushPixel;
@@ -60,7 +61,7 @@ private:
bool mbXORMode : 1; // is ROP XOR Mode set
GC mpPenGC; // Pen attributes
- Color mnPenColor;
+ std::optional<Color> moPenColor;
Pixel mnPenPixel;