summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFridrich Štrba <fridrich.strba@bluewin.ch>2013-06-29 16:25:25 +0200
committerFridrich Štrba <fridrich.strba@bluewin.ch>2013-06-29 16:25:25 +0200
commit4a075558a28bcd09f554760ebcc3734afac304fc (patch)
tree9fdad2b04fbe6751327d25369c522cfe2f8e40c0
parentc5b8d15ce18f1ebd63a5c3774c44f5ca60a8b8fb (diff)
Simplify the path collection a bit
-rw-r--r--src/lib/CDRCollector.h6
-rw-r--r--src/lib/CDRContentCollector.cpp36
-rw-r--r--src/lib/CDRContentCollector.h6
-rw-r--r--src/lib/CDRParser.cpp80
-rw-r--r--src/lib/CDRStylesCollector.h6
-rw-r--r--src/lib/CMXParser.cpp48
6 files changed, 69 insertions, 113 deletions
diff --git a/src/lib/CDRCollector.h b/src/lib/CDRCollector.h
index 68cc236..47aa00e 100644
--- a/src/lib/CDRCollector.h
+++ b/src/lib/CDRCollector.h
@@ -88,12 +88,6 @@ public:
virtual void collectGroup(unsigned level) = 0;
virtual void collectVect(unsigned level) = 0;
virtual void collectOtherList() = 0;
- virtual void collectCubicBezier(double x1, double y1, double x2, double y2, double x, double y) = 0;
- virtual void collectQuadraticBezier(double x1, double y1, double x, double y) = 0;
- virtual void collectMoveTo(double x, double y) = 0;
- virtual void collectLineTo(double x, double y) = 0;
- virtual void collectArcTo(double rx, double ry, bool largeArc, bool sweep, double x, double y) = 0;
- virtual void collectClosePath() = 0;
virtual void collectPath(const CDRPath &path) = 0;
virtual void collectLevel(unsigned level) = 0;
virtual void collectTransform(const CDRTransforms &transforms, bool considerGroupTransform) = 0;
diff --git a/src/lib/CDRContentCollector.cpp b/src/lib/CDRContentCollector.cpp
index 07e1f58..dd0b495 100644
--- a/src/lib/CDRContentCollector.cpp
+++ b/src/lib/CDRContentCollector.cpp
@@ -153,42 +153,6 @@ void libcdr::CDRContentCollector::collectOtherList()
// m_isPageProperties = false;
}
-void libcdr::CDRContentCollector::collectCubicBezier(double x1, double y1, double x2, double y2, double x, double y)
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectCubicBezier(%f, %f, %f, %f, %f, %f)\n", x1, y1, x2, y2, x, y));
- m_currentPath.appendCubicBezierTo(x1, y1, x2, y2, x, y);
-}
-
-void libcdr::CDRContentCollector::collectQuadraticBezier(double x1, double y1, double x, double y)
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectQuadraticBezier(%f, %f, %f, %f)\n", x1, y1, x, y));
- m_currentPath.appendQuadraticBezierTo(x1, y1, x, y);
-}
-
-void libcdr::CDRContentCollector::collectMoveTo(double x, double y)
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectMoveTo(%f, %f)\n", x, y));
- m_currentPath.appendMoveTo(x,y);
-}
-
-void libcdr::CDRContentCollector::collectLineTo(double x, double y)
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectLineTo(%f, %f)\n", x, y));
- m_currentPath.appendLineTo(x, y);
-}
-
-void libcdr::CDRContentCollector::collectArcTo(double rx, double ry, bool largeArc, bool sweep, double x, double y)
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectArcTo(%f, %f)\n", x, y));
- m_currentPath.appendArcTo(rx, ry, 0.0, largeArc, sweep, x, y);
-}
-
-void libcdr::CDRContentCollector::collectClosePath()
-{
- CDR_DEBUG_MSG(("CDRContentCollector::collectClosePath\n"));
- m_currentPath.appendClosePath();
-}
-
void libcdr::CDRContentCollector::collectPath(const CDRPath &path)
{
CDR_DEBUG_MSG(("CDRContentCollector::collectPath\n"));
diff --git a/src/lib/CDRContentCollector.h b/src/lib/CDRContentCollector.h
index 5242b1c..47f56aa 100644
--- a/src/lib/CDRContentCollector.h
+++ b/src/lib/CDRContentCollector.h
@@ -55,12 +55,6 @@ public:
void collectGroup(unsigned level);
void collectVect(unsigned level);
void collectOtherList();
- void collectCubicBezier(double x1, double y1, double x2, double y2, double x, double y);
- void collectQuadraticBezier(double x1, double y1, double x, double y);
- void collectMoveTo(double x, double y);
- void collectLineTo(double x, double y);
- void collectArcTo(double rx, double ry, bool largeArc, bool sweep, double x, double y);
- void collectClosePath();
void collectPath(const CDRPath &path);
void collectLevel(unsigned level);
void collectTransform(const CDRTransforms &transforms, bool considerGroupTransform);
diff --git a/src/lib/CDRParser.cpp b/src/lib/CDRParser.cpp
index 9f024b8..bff872b 100644
--- a/src/lib/CDRParser.cpp
+++ b/src/lib/CDRParser.cpp
@@ -1278,59 +1278,61 @@ void libcdr::CDRParser::readRectangle(WPXInputStream *input)
r0 = readRectCoord(input);
}
}
+ CDRPath path;
if (r0 > 0.0)
- m_collector->collectMoveTo(0.0, -r0/scaleY);
+ path.appendMoveTo(0.0, -r0/scaleY);
else
- m_collector->collectMoveTo(0.0, 0.0);
+ path.appendMoveTo(0.0, 0.0);
if (r1 > 0.0)
{
- m_collector->collectLineTo(0.0, y0+r1/scaleY);
+ path.appendLineTo(0.0, y0+r1/scaleY);
if (corner_type == 0)
- m_collector->collectQuadraticBezier(0.0, y0, r1/scaleX, y0);
+ path.appendQuadraticBezierTo(0.0, y0, r1/scaleX, y0);
else if (corner_type == 1)
- m_collector->collectQuadraticBezier(r1/scaleX, y0+r1/scaleY, r1/scaleX, y0);
+ path.appendQuadraticBezierTo(r1/scaleX, y0+r1/scaleY, r1/scaleX, y0);
else if (corner_type == 2)
- m_collector->collectLineTo(r1/scaleX, y0);
+ path.appendLineTo(r1/scaleX, y0);
}
else
- m_collector->collectLineTo(0.0, y0);
+ path.appendLineTo(0.0, y0);
if (r2 > 0.0)
{
- m_collector->collectLineTo(x0-r2/scaleX, y0);
+ path.appendLineTo(x0-r2/scaleX, y0);
if (corner_type == 0)
- m_collector->collectQuadraticBezier(x0, y0, x0, y0+r2/scaleY);
+ path.appendQuadraticBezierTo(x0, y0, x0, y0+r2/scaleY);
else if (corner_type == 1)
- m_collector->collectQuadraticBezier(x0-r2/scaleX, y0+r2/scaleY, x0, y0+r2/scaleY);
+ path.appendQuadraticBezierTo(x0-r2/scaleX, y0+r2/scaleY, x0, y0+r2/scaleY);
else if (corner_type == 2)
- m_collector->collectLineTo(x0, y0+r2/scaleY);
+ path.appendLineTo(x0, y0+r2/scaleY);
}
else
- m_collector->collectLineTo(x0, y0);
+ path.appendLineTo(x0, y0);
if (r3 > 0.0)
{
- m_collector->collectLineTo(x0, -r3/scaleY);
+ path.appendLineTo(x0, -r3/scaleY);
if (corner_type == 0)
- m_collector->collectQuadraticBezier(x0, 0.0, x0-r3/scaleX, 0.0);
+ path.appendQuadraticBezierTo(x0, 0.0, x0-r3/scaleX, 0.0);
else if (corner_type == 1)
- m_collector->collectQuadraticBezier(x0-r3/scaleX, -r3/scaleY, x0-r3/scaleX, 0.0);
+ path.appendQuadraticBezierTo(x0-r3/scaleX, -r3/scaleY, x0-r3/scaleX, 0.0);
else if (corner_type == 2)
- m_collector->collectLineTo(x0-r3/scaleX, 0.0);
+ path.appendLineTo(x0-r3/scaleX, 0.0);
}
else
- m_collector->collectLineTo(x0, 0.0);
+ path.appendLineTo(x0, 0.0);
if (r0 > 0.0)
{
- m_collector->collectLineTo(r0/scaleX, 0.0);
+ path.appendLineTo(r0/scaleX, 0.0);
if (corner_type == 0)
- m_collector->collectQuadraticBezier(0.0, 0.0, 0.0, -r0/scaleY);
+ path.appendQuadraticBezierTo(0.0, 0.0, 0.0, -r0/scaleY);
else if (corner_type == 1)
- m_collector->collectQuadraticBezier(r0/scaleX, -r0/scaleY, 0.0, -r0/scaleY);
+ path.appendQuadraticBezierTo(r0/scaleX, -r0/scaleY, 0.0, -r0/scaleY);
else if (corner_type == 2)
- m_collector->collectLineTo(0.0, -r0/scaleY);
+ path.appendLineTo(0.0, -r0/scaleY);
}
else
- m_collector->collectLineTo(0.0, 0.0);
- m_collector->collectClosePath();
+ path.appendLineTo(0.0, 0.0);
+ path.appendClosePath();
+ m_collector->collectPath(path);
}
void libcdr::CDRParser::readEllipse(WPXInputStream *input)
@@ -1358,6 +1360,7 @@ void libcdr::CDRParser::readEllipse(WPXInputStream *input)
while (angle2 > 2*M_PI)
angle2 -= 2*M_PI;
+ CDRPath path;
if (angle1 != angle2)
{
if (angle2 < angle1)
@@ -1370,13 +1373,13 @@ void libcdr::CDRParser::readEllipse(WPXInputStream *input)
bool largeArc = (angle2 - angle1 > M_PI);
- m_collector->collectMoveTo(x0, y0);
- m_collector->collectArcTo(rx, ry, largeArc, false, x1, y1);
+ path.appendMoveTo(x0, y0);
+ path.appendArcTo(rx, ry, 0.0, largeArc, false, x1, y1);
if (pie)
{
- m_collector->collectLineTo(cx, cy);
- m_collector->collectLineTo(x0, y0);
- m_collector->collectClosePath();
+ path.appendLineTo(cx, cy);
+ path.appendLineTo(x0, y0);
+ path.appendClosePath();
}
}
else
@@ -1388,11 +1391,12 @@ void libcdr::CDRParser::readEllipse(WPXInputStream *input)
double x1 = cx + rx*cos(angle2);
double y1 = cy - ry*sin(angle2);
- m_collector->collectMoveTo(x0, y0);
- m_collector->collectArcTo(rx, ry, false, false, x1, y1);
- m_collector->collectArcTo(rx, ry, true, false, x0, y0);
- m_collector->collectClosePath();
+ path.appendMoveTo(x0, y0);
+ path.appendArcTo(rx, ry, 0.0, false, false, x1, y1);
+ path.appendArcTo(rx, ry, 0.0, true, false, x0, y0);
+ path.appendClosePath();
}
+ m_collector->collectPath(path);
}
void libcdr::CDRParser::readDisp(WPXInputStream *input, unsigned length)
@@ -1524,11 +1528,13 @@ void libcdr::CDRParser::readBitmap(WPXInputStream *input)
input->seek(8, WPX_SEEK_CUR);
imageId = readUnsigned(input);
input->seek(20, WPX_SEEK_CUR);
- m_collector->collectMoveTo(x1, y1);
- m_collector->collectLineTo(x1, y2);
- m_collector->collectLineTo(x2, y2);
- m_collector->collectLineTo(x2, y1);
- m_collector->collectLineTo(x1, y1);
+ CDRPath path;
+ path.appendMoveTo(x1, y1);
+ path.appendLineTo(x1, y2);
+ path.appendLineTo(x2, y2);
+ path.appendLineTo(x2, y1);
+ path.appendLineTo(x1, y1);
+ m_collector->collectPath(path);
}
else
{
diff --git a/src/lib/CDRStylesCollector.h b/src/lib/CDRStylesCollector.h
index d7e26a9..d037931 100644
--- a/src/lib/CDRStylesCollector.h
+++ b/src/lib/CDRStylesCollector.h
@@ -56,12 +56,6 @@ public:
void collectGroup(unsigned) {}
void collectVect(unsigned) {}
void collectOtherList() {}
- void collectCubicBezier(double, double, double, double, double, double) {}
- void collectQuadraticBezier(double, double, double, double) {}
- void collectMoveTo(double, double) {}
- void collectLineTo(double, double) {}
- void collectArcTo(double, double, bool, bool, double, double) {}
- void collectClosePath() {}
void collectPath(const CDRPath &) {}
void collectLevel(unsigned) {}
void collectTransform(const CDRTransforms &, bool) {}
diff --git a/src/lib/CMXParser.cpp b/src/lib/CMXParser.cpp
index 59afc07..64dc906 100644
--- a/src/lib/CMXParser.cpp
+++ b/src/lib/CMXParser.cpp
@@ -479,6 +479,7 @@ void libcdr::CMXParser::readEllipse(WPXInputStream *input)
return;
m_collector->collectObject(1);
+ CDRPath path;
if (angle1 != angle2)
{
if (angle2 < angle1)
@@ -491,13 +492,13 @@ void libcdr::CMXParser::readEllipse(WPXInputStream *input)
bool largeArc = (angle2 - angle1 > M_PI || angle2 - angle1 < -M_PI);
- m_collector->collectMoveTo(x0, y0);
- m_collector->collectArcTo(rx, ry, largeArc, true, x1, y1);
+ path.appendMoveTo(x0, y0);
+ path.appendArcTo(rx, ry, 0.0, largeArc, true, x1, y1);
if (pie)
{
- m_collector->collectLineTo(cx, cy);
- m_collector->collectLineTo(x0, y0);
- m_collector->collectClosePath();
+ path.appendLineTo(cx, cy);
+ path.appendLineTo(x0, y0);
+ path.appendClosePath();
}
}
else
@@ -508,10 +509,11 @@ void libcdr::CMXParser::readEllipse(WPXInputStream *input)
double x1 = cx;
double y1 = cy - ry;
- m_collector->collectMoveTo(x0, y0);
- m_collector->collectArcTo(rx, ry, false, true, x1, y1);
- m_collector->collectArcTo(rx, ry, true, true, x0, y0);
+ path.appendMoveTo(x0, y0);
+ path.appendArcTo(rx, ry, 0.0, false, true, x1, y1);
+ path.appendArcTo(rx, ry, 0.0, true, true, x0, y0);
}
+ m_collector->collectPath(path);
m_collector->collectRotate(rotation, cx, cy);
m_collector->collectLevel(1);
}
@@ -577,26 +579,28 @@ void libcdr::CMXParser::readRectangle(WPXInputStream *input)
double y0 = cy - height / 2.0;
double x1 = cx + width / 2.0;
double y1 = cy + height / 2.0;
+ CDRPath path;
if (radius > 0.0)
{
- m_collector->collectMoveTo(x0, y0-radius);
- m_collector->collectLineTo(x0, y1+radius);
- m_collector->collectQuadraticBezier(x0, y1, x0+radius, y1);
- m_collector->collectLineTo(x1-radius, y1);
- m_collector->collectQuadraticBezier(x1, y1, x1, y1+radius);
- m_collector->collectLineTo(x1, y0-radius);
- m_collector->collectQuadraticBezier(x1, y0, x1-radius, y0);
- m_collector->collectLineTo(x0+radius, y0);
- m_collector->collectQuadraticBezier(x0, y0, x0, y0-radius);
+ path.appendMoveTo(x0, y0-radius);
+ path.appendLineTo(x0, y1+radius);
+ path.appendQuadraticBezierTo(x0, y1, x0+radius, y1);
+ path.appendLineTo(x1-radius, y1);
+ path.appendQuadraticBezierTo(x1, y1, x1, y1+radius);
+ path.appendLineTo(x1, y0-radius);
+ path.appendQuadraticBezierTo(x1, y0, x1-radius, y0);
+ path.appendLineTo(x0+radius, y0);
+ path.appendQuadraticBezierTo(x0, y0, x0, y0-radius);
}
else
{
- m_collector->collectMoveTo(x0, y0);
- m_collector->collectLineTo(x0, y1);
- m_collector->collectLineTo(x1, y1);
- m_collector->collectLineTo(x1, y0);
- m_collector->collectLineTo(x0, y0);
+ path.appendMoveTo(x0, y0);
+ path.appendLineTo(x0, y1);
+ path.appendLineTo(x1, y1);
+ path.appendLineTo(x1, y0);
+ path.appendLineTo(x0, y0);
}
+ m_collector->collectPath(path);
m_collector->collectRotate(angle, cx, cy);
m_collector->collectLevel(1);
}