diff options
Diffstat (limited to 'src/svg/svg-length.h')
-rw-r--r-- | src/svg/svg-length.h | 87 |
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 : |