diff options
author | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2013-06-29 16:25:25 +0200 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2013-06-29 16:25:25 +0200 |
commit | 4a075558a28bcd09f554760ebcc3734afac304fc (patch) | |
tree | 9fdad2b04fbe6751327d25369c522cfe2f8e40c0 | |
parent | c5b8d15ce18f1ebd63a5c3774c44f5ca60a8b8fb (diff) |
Simplify the path collection a bit
-rw-r--r-- | src/lib/CDRCollector.h | 6 | ||||
-rw-r--r-- | src/lib/CDRContentCollector.cpp | 36 | ||||
-rw-r--r-- | src/lib/CDRContentCollector.h | 6 | ||||
-rw-r--r-- | src/lib/CDRParser.cpp | 80 | ||||
-rw-r--r-- | src/lib/CDRStylesCollector.h | 6 | ||||
-rw-r--r-- | src/lib/CMXParser.cpp | 48 |
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); } |