summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.co.uk>2019-04-05 12:52:58 +0900
committerTomaž Vajngerl <quikee@gmail.com>2019-04-05 14:56:53 +0200
commitfcb00ac8ebe2acb429f09ef5b728b8c73a5bbc37 (patch)
tree4f9dc3b5d195e01d653619d51bc1ec1e0b5ff882
parent48429e075fe73b858328d7287035c24744812f75 (diff)
support opacity for widget definition draw SVGs
This opacity influences the whole shape (stroke and fill). Change-Id: I82e10e07dbf2f321805b55a5f4831a513e52dab8 Reviewed-on: https://gerrit.libreoffice.org/70292 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
-rw-r--r--include/basegfx/DrawCommands.hxx4
-rw-r--r--svgio/qa/cppunit/SvgRead.cxx4
-rw-r--r--svgio/qa/cppunit/data/VisiotorTest-Rect.svg4
-rw-r--r--svgio/qa/cppunit/data/path.svg2
-rw-r--r--svgio/source/svgreader/svgvisitor.cxx4
-rw-r--r--vcl/source/gdi/FileDefinitionWidgetDraw.cxx10
6 files changed, 22 insertions, 6 deletions
diff --git a/include/basegfx/DrawCommands.hxx b/include/basegfx/DrawCommands.hxx
index fda21e9231bb..92747c5af4d2 100644
--- a/include/basegfx/DrawCommands.hxx
+++ b/include/basegfx/DrawCommands.hxx
@@ -62,6 +62,7 @@ public:
double mnRy;
double mnStrokeWidth;
+ double mnOpacity;
std::shared_ptr<basegfx::BColor> mpFillColor;
std::shared_ptr<basegfx::BColor> mpStrokeColor;
@@ -71,6 +72,7 @@ public:
, mnRx(1.0)
, mnRy(1.0)
, mnStrokeWidth(1.0)
+ , mnOpacity(1.0)
{
}
};
@@ -81,6 +83,7 @@ public:
basegfx::B2DPolyPolygon maPolyPolygon;
double mnStrokeWidth;
+ double mnOpacity;
std::shared_ptr<basegfx::BColor> mpFillColor;
std::shared_ptr<basegfx::BColor> mpStrokeColor;
@@ -88,6 +91,7 @@ public:
: DrawBase(DrawCommandType::Path)
, maPolyPolygon(rPolyPolygon)
, mnStrokeWidth(1.0)
+ , mnOpacity(1.0)
{
}
};
diff --git a/svgio/qa/cppunit/SvgRead.cxx b/svgio/qa/cppunit/SvgRead.cxx
index cd81bfbddc39..45b0158a0240 100644
--- a/svgio/qa/cppunit/SvgRead.cxx
+++ b/svgio/qa/cppunit/SvgRead.cxx
@@ -74,7 +74,7 @@ uno::Reference<io::XInputStream> TestParsing::parseSvg(const OUString& aSource)
void TestParsing::testSimpleRectangle()
{
- OUString aSvgFile = "/svgio/qa/cppunit/data/Rect.svg";
+ OUString aSvgFile = "/svgio/qa/cppunit/data/VisiotorTest-Rect.svg";
OUString aUrl = m_directories.getURLFromSrc(aSvgFile);
OUString aPath = m_directories.getPathFromSrc(aSvgFile);
@@ -102,6 +102,7 @@ void TestParsing::testSimpleRectangle()
CPPUNIT_ASSERT_EQUAL(sal_Int32(0xff0000), sal_Int32(Color(*pDrawRect->mpStrokeColor)));
CPPUNIT_ASSERT(bool(pDrawRect->mpFillColor));
CPPUNIT_ASSERT_EQUAL(sal_Int32(0x00cc00), sal_Int32(Color(*pDrawRect->mpFillColor)));
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1, pDrawRect->mnOpacity, 1E-12);
}
void TestParsing::testPath()
@@ -133,6 +134,7 @@ void TestParsing::testPath()
CPPUNIT_ASSERT_EQUAL(sal_Int32(0xffffff), sal_Int32(Color(*pDrawPath->mpStrokeColor)));
CPPUNIT_ASSERT(bool(pDrawPath->mpFillColor));
CPPUNIT_ASSERT_EQUAL(sal_Int32(0x007aff), sal_Int32(Color(*pDrawPath->mpFillColor)));
+ CPPUNIT_ASSERT_DOUBLES_EQUAL(0.1, pDrawPath->mnOpacity, 1E-12);
}
CPPUNIT_TEST_SUITE_REGISTRATION(TestParsing);
diff --git a/svgio/qa/cppunit/data/VisiotorTest-Rect.svg b/svgio/qa/cppunit/data/VisiotorTest-Rect.svg
new file mode 100644
index 000000000000..4cd2d3602ea3
--- /dev/null
+++ b/svgio/qa/cppunit/data/VisiotorTest-Rect.svg
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<svg width="120" height="120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <rect x="10" y="10" width="100" height="100" rx="10" ry="10" stroke="#ff0000" opacity="0.1" fill="#00cc00" stroke-width="3" />
+</svg>
diff --git a/svgio/qa/cppunit/data/path.svg b/svgio/qa/cppunit/data/path.svg
index 1722181c872e..559ceec6d557 100644
--- a/svgio/qa/cppunit/data/path.svg
+++ b/svgio/qa/cppunit/data/path.svg
@@ -1,3 +1,3 @@
<svg width="44" height="26" xmlns="http://www.w3.org/2000/svg">
- <path d="M1 1 H 43 V 25 H 1 L 1 1 Z" fill="#007aff" stroke="#fff" stroke-width="0"/>
+ <path d="M1 1 H 43 V 25 H 1 L 1 1 Z" fill="#007aff" stroke="#fff" opacity="0.1" stroke-width="0"/>
</svg>
diff --git a/svgio/source/svgreader/svgvisitor.cxx b/svgio/source/svgreader/svgvisitor.cxx
index 7b92e2fd0afb..011ce5492fa3 100644
--- a/svgio/source/svgreader/svgvisitor.cxx
+++ b/svgio/source/svgreader/svgvisitor.cxx
@@ -74,6 +74,8 @@ void SvgDrawVisitor::visit(svgio::svgreader::SvgNode const& rNode)
pRectangle->mnStrokeWidth
= rRectNode.getSvgStyleAttributes()->getStrokeWidth().getNumber();
+ pRectangle->mnOpacity = rRectNode.getSvgStyleAttributes()->getOpacity().getNumber();
+
const basegfx::BColor* pFillColor = rRectNode.getSvgStyleAttributes()->getFill();
if (pFillColor)
pRectangle->mpFillColor = std::make_shared<basegfx::BColor>(*pFillColor);
@@ -97,6 +99,8 @@ void SvgDrawVisitor::visit(svgio::svgreader::SvgNode const& rNode)
pDrawPath->mnStrokeWidth
= rPathNode.getSvgStyleAttributes()->getStrokeWidth().getNumber();
+ pDrawPath->mnOpacity = rPathNode.getSvgStyleAttributes()->getOpacity().getNumber();
+
const basegfx::BColor* pFillColor = rPathNode.getSvgStyleAttributes()->getFill();
if (pFillColor)
pDrawPath->mpFillColor = std::make_shared<basegfx::BColor>(*pFillColor);
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 6124a31e21e4..3373285b8a92 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -186,14 +186,15 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
rGraphics.SetLineColor();
rGraphics.SetFillColor(Color(*rRectangle.mpFillColor));
rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
- basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
+ basegfx::B2DPolyPolygon(aB2DPolygon),
+ 1.0 - rRectangle.mnOpacity, nullptr);
}
if (rRectangle.mpStrokeColor)
{
rGraphics.SetLineColor(Color(*rRectangle.mpStrokeColor));
rGraphics.SetFillColor();
rGraphics.DrawPolyLine(
- basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+ basegfx::B2DHomMatrix(), aB2DPolygon, 1.0 - rRectangle.mnOpacity,
basegfx::B2DVector(rRectangle.mnStrokeWidth, rRectangle.mnStrokeWidth),
basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false,
nullptr);
@@ -230,7 +231,8 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
{
rGraphics.SetLineColor();
rGraphics.SetFillColor(Color(*rPath.mpFillColor));
- rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(), aPolyPolygon, 0.0f, nullptr);
+ rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(), aPolyPolygon,
+ 1.0 - rPath.mnOpacity, nullptr);
}
if (rPath.mpStrokeColor)
{
@@ -239,7 +241,7 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
for (auto const& rPolygon : aPolyPolygon)
{
rGraphics.DrawPolyLine(
- basegfx::B2DHomMatrix(), rPolygon, 0.0f,
+ basegfx::B2DHomMatrix(), rPolygon, 1.0 - rPath.mnOpacity,
basegfx::B2DVector(rPath.mnStrokeWidth, rPath.mnStrokeWidth),
basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false,
nullptr);