summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-11-24 15:56:55 +0000
committerAshod Nakashian <ashod.nakashian@collabora.co.uk>2016-07-12 22:06:28 -0400
commit417af0d5100ed733482f80ae27e10a28d51a7a87 (patch)
tree577f31dab82154e8ecc87dd9d2b589a47476855d /vcl
parenta84e0049ddc48bbdb6f23ad5be570bc8dff657e1 (diff)
gtk3: stroke as well as fill
(cherry picked from commit a6d5c7dcd96b3f8bd15d5a31fc55afc1da8c101b) Change-Id: I1c46f38927c48070e5739b99de96d61943837a14
Diffstat (limited to 'vcl')
-rw-r--r--vcl/headless/svpgdi.cxx78
1 files changed, 52 insertions, 26 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 4c8ab5a4da46..0be479351b02 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -202,11 +202,6 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight,
bool bRet = false;
(void)nX; (void)nY; (void)nWidth; (void)nHeight; (void)nTransparency;
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
- if (m_bUseLineColor || !m_bUseFillColor)
- {
- SAL_WARN("vcl.gdi", "unsupported SvpSalGraphics::drawAlphaRect case");
- return false;
- }
cairo_t* cr = getCairoContext();
assert(cr && m_aDevice->isTopDown());
@@ -214,18 +209,37 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight,
clipRegion(cr);
const double fTransparency = (100 - nTransparency) * (1.0/100);
- cairo_set_source_rgba(cr, m_aFillColor.getRed()/255.0,
- m_aFillColor.getGreen()/255.0,
- m_aFillColor.getBlue()/255.0,
- fTransparency);
- cairo_rectangle(cr, nX, nY, nWidth, nHeight);
cairo_rectangle_int_t extents = {0, 0, 0, 0};
basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker());
- if (xDamageTracker)
- extents = getFillDamage(cr);
- cairo_fill(cr);
+ cairo_rectangle(cr, nX, nY, nWidth, nHeight);
+
+ if (m_bUseFillColor)
+ {
+ cairo_set_source_rgba(cr, m_aFillColor.getRed()/255.0,
+ m_aFillColor.getGreen()/255.0,
+ m_aFillColor.getBlue()/255.0,
+ fTransparency);
+
+ if (xDamageTracker && !m_bUseLineColor)
+ extents = getFillDamage(cr);
+
+ cairo_fill_preserve(cr);
+ }
+
+ if (m_bUseLineColor)
+ {
+ cairo_set_source_rgba(cr, m_aLineColor.getRed()/255.0,
+ m_aLineColor.getGreen()/255.0,
+ m_aLineColor.getBlue()/255.0,
+ fTransparency);
+
+ if (xDamageTracker)
+ extents = getStrokeDamage(cr);
+
+ cairo_stroke_preserve(cr);
+ }
cairo_surface_flush(cairo_get_target(cr));
cairo_destroy(cr); // unref
@@ -750,31 +764,43 @@ bool SvpSalGraphics::drawPolyPolygon(const basegfx::B2DPolyPolygon& rPolyPoly, d
bool bRet = false;
(void)rPolyPoly; (void)fTransparency;
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 10, 0)
- if (m_bUseLineColor || !m_bUseFillColor)
- {
- SAL_WARN("vcl.gdi", "unsupported SvpSalGraphics::drawPolyPolygon case");
- return false;
- }
cairo_t* cr = getCairoContext();
assert(cr && m_aDevice->isTopDown());
clipRegion(cr);
- cairo_set_source_rgba(cr, m_aFillColor.getRed()/255.0,
- m_aFillColor.getGreen()/255.0,
- m_aFillColor.getBlue()/255.0,
- 1.0-fTransparency);
-
for (const basegfx::B2DPolygon* pPoly = rPolyPoly.begin(); pPoly != rPolyPoly.end(); ++pPoly)
AddPolygonToPath(cr, *pPoly, true);
cairo_rectangle_int_t extents = {0, 0, 0, 0};
basebmp::IBitmapDeviceDamageTrackerSharedPtr xDamageTracker(m_aDevice->getDamageTracker());
- if (xDamageTracker)
- extents = getFillDamage(cr);
- cairo_fill(cr);
+ if (m_bUseFillColor)
+ {
+ cairo_set_source_rgba(cr, m_aFillColor.getRed()/255.0,
+ m_aFillColor.getGreen()/255.0,
+ m_aFillColor.getBlue()/255.0,
+ 1.0-fTransparency);
+
+ if (xDamageTracker && !m_bUseLineColor)
+ extents = getFillDamage(cr);
+
+ cairo_fill_preserve(cr);
+ }
+
+ if (m_bUseLineColor)
+ {
+ cairo_set_source_rgba(cr, m_aLineColor.getRed()/255.0,
+ m_aLineColor.getGreen()/255.0,
+ m_aLineColor.getBlue()/255.0,
+ 1.0-fTransparency);
+
+ if (xDamageTracker)
+ extents = getStrokeDamage(cr);
+
+ cairo_stroke_preserve(cr);
+ }
cairo_surface_flush(cairo_get_target(cr));
cairo_destroy(cr); // unref