summaryrefslogtreecommitdiffstats
path: root/src/svg/svg-length.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/svg/svg-length.h')
-rw-r--r--src/svg/svg-length.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/svg/svg-length.h b/src/svg/svg-length.h
new file mode 100644
index 0000000..27f534f
--- /dev/null
+++ b/src/svg/svg-length.h
@@ -0,0 +1,87 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/**
+ * Authors:
+ * Lauris Kaplinski <lauris@kaplinski.com>
+ * Carl Hetherington <inkscape@carlh.net>
+ *
+ * Copyright (C) 1999-2002 Lauris Kaplinski
+ * Copyright (C) 2000-2001 Ximian, Inc.
+ *
+ * Released under GNU GPL v2+, read the file 'COPYING' for more information.
+ */
+
+#ifndef SEEN_SP_SVG_LENGTH_H
+#define SEEN_SP_SVG_LENGTH_H
+
+#include <string>
+
+/**
+ * SVG length type
+ */
+class SVGLength {
+public:
+ SVGLength();
+
+ enum Unit {
+ NONE,
+ PX,
+ PT,
+ PC,
+ MM,
+ CM,
+ INCH,
+ EM,
+ EX,
+ PERCENT,
+ LAST_UNIT = PERCENT
+ };
+
+ // The object's value is valid / exists in SVG.
+ bool _set;
+
+ // The unit of value.
+ Unit unit;
+
+ // The value of this SVGLength as found in the SVG.
+ float value;
+
+ // The value in pixels (value * pixels/unit).
+ float computed;
+
+ float operator=(float v) {
+ _set = true;
+ unit = NONE;
+ value = computed = v;
+ return v;
+ }
+
+ bool read(char const *str);
+ void readOrUnset(char const *str, Unit u = NONE, float v = 0, float c = 0);
+ bool readAbsolute(char const *str);
+ std::string getUnit() const;
+ bool isAbsolute();
+
+ std::string write() const;
+ // To set 'v' use '='
+ void set(Unit u, float v); // Sets computed value based on u and v.
+ void set(Unit u, float v, float c); // Sets all three values.
+ void unset(Unit u = NONE, float v = 0, float c = 0);
+ void scale(double scale); // Scales length (value, computed), leaving unit alone.
+ void update(double em, double ex, double scale); // Updates computed value
+};
+
+char const *sp_svg_length_get_css_units(SVGLength::Unit unit);
+bool svg_length_absolute_unit(SVGLength::Unit unit);
+
+#endif // SEEN_SP_SVG_LENGTH_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:fileencoding=utf-8 :