summaryrefslogtreecommitdiffstats
path: root/karbon/core/vstroke.h
diff options
context:
space:
mode:
Diffstat (limited to 'karbon/core/vstroke.h')
-rw-r--r--karbon/core/vstroke.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/karbon/core/vstroke.h b/karbon/core/vstroke.h
new file mode 100644
index 00000000..6cfa338d
--- /dev/null
+++ b/karbon/core/vstroke.h
@@ -0,0 +1,135 @@
+/* This file is part of the KDE project
+ Copyright (C) 2001, The Karbon Developers
+ Copyright (C) 2002, The Karbon Developers
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+*/
+
+#ifndef __VSTROKE_H__
+#define __VSTROKE_H__
+
+#include <qvaluelist.h>
+
+#include "vcolor.h"
+#include "vdashpattern.h"
+#include "vgradient.h"
+#include "vpattern.h"
+#include <koffice_export.h>
+
+class QDomElement;
+class VObject;
+class KoGenStyle;
+class KoStyleStack;
+
+
+/**
+ * Manages stroke properties.
+ * Supported are line join/cap styles equivalents to the qpainter ones.
+ * Also the line width in pixels and line stroke type (solid / gradient).
+ * Finally it also managed the dashing pattern, see VDashPattern.
+ *
+ * Default is black solid outline of width 1 with miter join, butt cap
+ * style and no dashes.
+ */
+
+class KARBONBASE_EXPORT VStroke
+{
+public:
+ enum VStrokeType
+ {
+ none = 0, /// no stroke at all
+ solid = 1, /// solid stroke
+ grad = 2, /// gradient as stroke
+ patt = 3, /// pattern as stroke
+ unknown = 4
+ };
+
+ enum VLineCap
+ {
+ capButt = 0,
+ capRound = 1,
+ capSquare = 2
+ };
+
+ enum VLineJoin
+ {
+ joinMiter = 0,
+ joinRound = 1,
+ joinBevel = 2
+ };
+
+ VStroke();
+ VStroke( VObject* parent, float width = 1.0, const VLineCap cap = capButt,
+ const VLineJoin join = joinMiter, float miterLimit = 10.0 );
+ VStroke( const VColor &c, VObject* parent = 0L, float width = 1.0, const VLineCap cap = capButt,
+ const VLineJoin join = joinMiter, float miterLimit = 10.0 );
+ VStroke( const VStroke& stroke );
+
+ void setParent( VObject* parent ) { m_parent = parent; }
+ VObject* parent()const { return m_parent; }
+
+ VStrokeType type() const { return m_type; }
+ void setType( VStrokeType type ) { m_type = type; }
+
+ const VColor& color() const { return m_color; }
+ void setColor( const VColor& color ) { m_color = color; }
+
+ float lineWidth() const { return m_lineWidth; }
+ void setLineWidth( float width );
+
+ VLineCap lineCap() const { return m_lineCap; }
+ void setLineCap( VLineCap cap ) { m_lineCap = cap; }
+
+ VLineJoin lineJoin() const { return m_lineJoin; }
+ void setLineJoin( VLineJoin join ) { m_lineJoin = join; }
+
+ float miterLimit() const { return m_miterLimit; }
+ void setMiterLimit( float limit ) { m_miterLimit = limit; }
+
+ VGradient& gradient() { return m_gradient; }
+ const VGradient& gradient() const { return m_gradient; }
+
+ VPattern& pattern() { return m_pattern; }
+ const VPattern& pattern() const { return m_pattern; }
+
+ VDashPattern& dashPattern() { return m_dashPattern; }
+ const VDashPattern& dashPattern() const { return m_dashPattern; }
+
+ void save( QDomElement& element ) const;
+ void saveOasis( KoGenStyle &style ) const;
+ void load( const QDomElement& element );
+ void loadOasis( const KoStyleStack &stack );
+
+
+ VStroke& operator=( const VStroke& stroke );
+
+ void transform( const QWMatrix& m );
+
+private:
+ VObject *m_parent;
+
+ VColor m_color;
+ VGradient m_gradient;
+ VPattern m_pattern;
+ float m_lineWidth;
+ float m_miterLimit;
+ VLineCap m_lineCap : 2;
+ VLineJoin m_lineJoin : 2;
+ VStrokeType m_type : 3;
+ VDashPattern m_dashPattern;
+};
+
+#endif