diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-11-24 15:56:55 +0000 |
---|---|---|
committer | Ashod Nakashian <ashod.nakashian@collabora.co.uk> | 2016-07-12 22:06:28 -0400 |
commit | 417af0d5100ed733482f80ae27e10a28d51a7a87 (patch) | |
tree | 577f31dab82154e8ecc87dd9d2b589a47476855d /vcl | |
parent | a84e0049ddc48bbdb6f23ad5be570bc8dff657e1 (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.cxx | 78 |
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 |