summaryrefslogtreecommitdiffstats
path: root/src/libnr/n-art-bpath.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libnr/n-art-bpath.h')
-rw-r--r--src/libnr/n-art-bpath.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/libnr/n-art-bpath.h b/src/libnr/n-art-bpath.h
new file mode 100644
index 000000000..abce499e0
--- /dev/null
+++ b/src/libnr/n-art-bpath.h
@@ -0,0 +1,61 @@
+#ifndef SEEN_LIBNR_N_ART_BPATH_H
+#define SEEN_LIBNR_N_ART_BPATH_H
+
+/** \file
+ * NArtBpath: old-style path segment.
+ */
+
+#include "libnr/nr-point.h"
+#include "libnr/nr-path-code.h"
+
+/**
+ * Old-style path segment.
+ *
+ * Arrays of paths segment start with a MOVETO or MOVETO_OPEN segment
+ * where the former indicates the beginning of a closed subpath.
+ * \see subpath_from_bpath()
+ */
+class NArtBpath {
+public:
+ NRPathcode code; ///< Type of segment
+ double x1, y1; ///< Position of control point in case of NR_CURVETO
+ double x2, y2; ///< Position of control point in case of NR_CURVETO
+ double x3, y3; ///< Position of next point
+
+ /// Convert i-th position data pair to Point object
+ /// \pre 1 <= i <= 3
+ NR::Point c(unsigned const i) const {
+ switch (i) {
+ case 1: return NR::Point(x1, y1);
+ case 2: return NR::Point(x2, y2);
+ case 3: return NR::Point(x3, y3);
+ default: abort();
+ }
+ }
+
+ /// Set i-th position data pair from Point
+ /// \pre 1 <= i <= 3
+ void setC(unsigned const i, NR::Point const &p) {
+ using NR::X; using NR::Y;
+ switch (i) {
+ case 1: x1 = p[X]; y1 = p[Y]; break;
+ case 2: x2 = p[X]; y2 = p[Y]; break;
+ case 3: x3 = p[X]; y3 = p[Y]; break;
+ default: abort();
+ }
+ }
+};
+
+
+#endif /* !SEEN_LIBNR_N_ART_BPATH_H */
+
+/*
+ Local Variables:
+ mode:c++
+ c-file-style:"stroustrup"
+ c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+ indent-tabs-mode:nil
+ fill-column:99
+ End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :