summaryrefslogtreecommitdiffstats
path: root/ksvg/impl/SVGStylableImpl.h
diff options
context:
space:
mode:
Diffstat (limited to 'ksvg/impl/SVGStylableImpl.h')
-rw-r--r--ksvg/impl/SVGStylableImpl.h327
1 files changed, 327 insertions, 0 deletions
diff --git a/ksvg/impl/SVGStylableImpl.h b/ksvg/impl/SVGStylableImpl.h
new file mode 100644
index 00000000..0a399a4c
--- /dev/null
+++ b/ksvg/impl/SVGStylableImpl.h
@@ -0,0 +1,327 @@
+/*
+ Copyright (C) 2001-2003 KSVG Team
+ This file is part of the KDE project
+
+ 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 SVGStylableImpl_H
+#define SVGStylableImpl_H
+
+#include <qstring.h>
+#include <qstringlist.h>
+
+#include <dom/dom_string.h>
+
+#include "ksvg_lookup.h"
+
+class QRect;
+
+// from libart, but now no dependency
+typedef enum
+{
+ PATH_STROKE_JOIN_MITER,
+ PATH_STROKE_JOIN_ROUND,
+ PATH_STROKE_JOIN_BEVEL
+} PathStrokeJoinType;
+
+typedef enum
+{
+ PATH_STROKE_CAP_BUTT,
+ PATH_STROKE_CAP_ROUND,
+ PATH_STROKE_CAP_SQUARE
+} PathStrokeCapType;
+
+#define SVG_STYLE_FLAG_NONE 0x0000000000000ULL
+#define SVG_STYLE_FLAG_BASELINE_SHIFT 0x0000000000001ULL
+#define SVG_STYLE_FLAG_CLIP_PATH 0x0000000000002ULL
+#define SVG_STYLE_FLAG_CLIP_RULE 0x0000000000004ULL
+#define SVG_STYLE_FLAG_COLOR 0x0000000000008ULL
+#define SVG_STYLE_FLAG_COLOR_INTERPOLATION 0x0000000000010ULL
+#define SVG_STYLE_FLAG_COLOR_INTERPOLATION_FILTERS 0x0000000000020ULL
+#define SVG_STYLE_FLAG_COLOR_PROFILE 0x0000000000040ULL
+#define SVG_STYLE_FLAG_COLOR_RENDERING 0x0000000000080ULL
+#define SVG_STYLE_FLAG_CURSOR 0x0000000000100ULL
+#define SVG_STYLE_FLAG_DIRECTION 0x0000000000200ULL
+#define SVG_STYLE_FLAG_DISPLAY 0x0000000000400ULL
+#define SVG_STYLE_FLAG_FILL 0x0000000000800ULL
+#define SVG_STYLE_FLAG_FILL_OPACITY 0x0000000001000ULL
+#define SVG_STYLE_FLAG_FILL_RULE 0x0000000002000ULL
+#define SVG_STYLE_FLAG_FONT_FAMILY 0x0000000004000ULL
+#define SVG_STYLE_FLAG_FONT_SIZE 0x0000000008000ULL
+#define SVG_STYLE_FLAG_FONT_SIZE_ADJUST 0x0000000010000ULL
+#define SVG_STYLE_FLAG_FONT_STRETCH 0x0000000020000ULL
+#define SVG_STYLE_FLAG_FONT_STYLE 0x0000000040000ULL
+#define SVG_STYLE_FLAG_FONT_VARIANT 0x0000000080000ULL
+#define SVG_STYLE_FLAG_FONT_WEIGHT 0x0000000100000ULL
+#define SVG_STYLE_FLAG_GLYPH_ORIENTATION_HORIZONTAL 0x0000000200000ULL
+#define SVG_STYLE_FLAG_GLYPH_ORIENTATION_VERTICAL 0x0000000400000ULL
+#define SVG_STYLE_FLAG_IMAGE_RENDERING 0x0000000800000ULL
+#define SVG_STYLE_FLAG_KERNING 0x0000001000000ULL
+#define SVG_STYLE_FLAG_LETTER_SPACING 0x0000002000000ULL
+#define SVG_STYLE_FLAG_MARKER 0x0000004000000ULL
+#define SVG_STYLE_FLAG_MARKER_END 0x0000008000000ULL
+#define SVG_STYLE_FLAG_MARKER_MID 0x0000010000000ULL
+#define SVG_STYLE_FLAG_MARKER_START 0x0000020000000ULL
+#define SVG_STYLE_FLAG_OPACITY 0x0000040000000ULL
+#define SVG_STYLE_FLAG_POINTER_EVENTS 0x0000080000000ULL
+#define SVG_STYLE_FLAG_SHAPE_RENDERING 0x0000100000000ULL
+#define SVG_STYLE_FLAG_STOP 0x0000200000000ULL
+#define SVG_STYLE_FLAG_STROKE_DASH_ARRAY 0x0000400000000ULL
+#define SVG_STYLE_FLAG_STROKE_DASH_OFFSET 0x0000800000000ULL
+#define SVG_STYLE_FLAG_STROKE_LINE_CAP 0x0001000000000ULL
+#define SVG_STYLE_FLAG_STROKE_LINE_JOIN 0x0002000000000ULL
+#define SVG_STYLE_FLAG_STROKE_MITER_LIMIT 0x0004000000000ULL
+#define SVG_STYLE_FLAG_STROKE_OPACITY 0x0008000000000ULL
+#define SVG_STYLE_FLAG_STROKE 0x0010000000000ULL
+#define SVG_STYLE_FLAG_STROKE_WIDTH 0x0020000000000ULL
+#define SVG_STYLE_FLAG_TEXT_ANCHOR 0x0040000000000ULL
+#define SVG_STYLE_FLAG_TEXT_DECORATION 0x0080000000000ULL
+#define SVG_STYLE_FLAG_TEXT_DIRECTION 0x0100000000000ULL
+#define SVG_STYLE_FLAG_TEXT_RENDERING 0x0200000000000ULL
+#define SVG_STYLE_FLAG_TEXT_UNICODE_BIDI 0x0400000000000ULL
+#define SVG_STYLE_FLAG_TEXT_WRITING_MODE 0x0800000000000ULL
+#define SVG_STYLE_FLAG_VISIBILITY 0x1000000000000ULL
+#define SVG_STYLE_FLAG_WORD_SPACING 0x2000000000000ULL
+#define SVG_STYLE_FLAG_OVERFLOW 0x4000000000000ULL
+#define SVG_STYLE_FLAG_MASK 0x0008000000000000ULL
+
+//?#define SVG_STYLE_FLAG_MASK_INHERIT 0x0010000000000000ULL
+
+// Helper macros
+#define STYLE_GET(Return, Name, Member) \
+protected:\
+ Return Member;\
+public:\
+Return get ##Name () const { return Member; }
+
+#define STYLE_GET_OPTIM(Return, Name, Member, Optim) \
+protected:\
+ Return Member : Optim;\
+public:\
+Return get ##Name () const { return Member; }
+
+#define STYLE_HAS(Name, Member) \
+bool has##Name () { return ! Member .isEmpty(); }
+
+namespace KSVG
+{
+
+enum ECursor
+{
+ CURSOR_AUTO,
+ CURSOR_CROSSHAIR,
+ CURSOR_DEFAULT,
+ CURSOR_POINTER,
+ CURSOR_MOVE,
+ CURSOR_E_RESIZE,
+ CURSOR_NE_RESIZE,
+ CURSOR_N_RESIZE,
+ CURSOR_NW_RESIZE,
+ CURSOR_SE_RESIZE,
+ CURSOR_SW_RESIZE,
+ CURSOR_S_RESIZE,
+ CURSOR_W_RESIZE,
+ CURSOR_TEXT,
+ CURSOR_WAIT,
+ CURSOR_HELP
+};
+
+enum ETextDirection
+{
+ LTR, RTL
+};
+
+enum ETextDecoration
+{
+ TDNONE = 0, UNDERLINE = 1, OVERLINE = 2, LINE_THROUGH = 4
+};
+
+enum ETextAnchor
+{
+ TASTART, TAMIDDLE, TAEND
+};
+
+enum EUnicodeBidi
+{
+ UBNORMAL, EMBED, OVERRIDE, INHERIT
+};
+
+enum EFontStyle
+{
+ FSNORMAL, ITALIC, OBLIQUE
+};
+
+enum ETextWritingMode
+{
+ LR, RL, TB
+};
+
+enum EWindRule
+{
+ RULE_NONZERO,
+ RULE_EVENODD
+};
+
+enum EPointerEvents
+{
+ PE_NONE,
+ PE_STROKE,
+ PE_FILL,
+ PE_PAINTED,
+ PE_VISIBLE,
+ PE_VISIBLE_STROKE,
+ PE_VISIBLE_FILL,
+ PE_VISIBLE_PAINTED,
+ PE_ALL,
+ PE_INHERIT
+};
+
+enum EColorInterpolation
+{
+ CI_SRGB,
+ CI_LINEARRGB
+};
+
+class SVGColorImpl;
+class SVGPaintImpl;
+class SVGLengthImpl;
+class SVGAnimatedLengthImpl;
+class SVGAnimatedLengthListImpl;
+class SVGMatrixImpl;
+class SVGStringListImpl;
+class SVGElementImpl;
+class SVGStylableImpl
+{
+public:
+ SVGStylableImpl(SVGElementImpl *object);
+ virtual ~SVGStylableImpl();
+
+ static void setColor(const QString &, SVGColorImpl *);
+
+ STYLE_GET(SVGAnimatedLengthImpl *, DashOffset, m_dashOffset)
+ STYLE_GET(SVGAnimatedLengthListImpl *, DashArray, m_dashArray)
+ STYLE_GET(SVGPaintImpl *, StrokeColor, m_strokeColor)
+ STYLE_GET(SVGPaintImpl *, FillColor, m_fillColor)
+ STYLE_GET(SVGColorImpl *, StopColor, m_stopColor)
+ STYLE_GET(SVGColorImpl *, Color, m_color)
+ STYLE_GET(SVGAnimatedLengthImpl *, StrokeWidth, m_strokeWidth)
+ STYLE_GET(SVGStringListImpl *, FontFamily, m_fontFamily);
+ STYLE_GET(float, FontSize, m_fontSize)
+ STYLE_GET(QString, LetterSpacing, m_letterSpacing)
+ STYLE_GET(QString, WordSpacing, m_wordSpacing)
+ STYLE_GET(QString, FontWeight, m_fontWeight)
+ STYLE_GET(QString, ClipPath, m_clipPath)
+ STYLE_GET(QString, Mask, m_mask)
+ STYLE_GET(QString, StartMarker, m_startMarker)
+ STYLE_GET(QString, MidMarker, m_midMarker)
+ STYLE_GET(QString, EndMarker, m_endMarker)
+ STYLE_GET(QString, BaselineShift, m_baselineShift)
+ STYLE_GET(QString, GlyphOrientationVertical, m_glyphOrientationVertical)
+ STYLE_GET(QString, GlyphOrientationHorizontal, m_glyphOrientationHorizontal)
+ STYLE_GET(float, Opacity, m_opacity)
+ STYLE_GET(float, FillOpacity, m_fillOpacity)
+ STYLE_GET(float, StrokeOpacity, m_strokeOpacity)
+ STYLE_GET(unsigned int, StrokeMiterlimit, m_strokeMiterlimit)
+
+ STYLE_GET_OPTIM(EPointerEvents, PointerEvents, m_pointerEvents, 4)
+ STYLE_GET_OPTIM(ECursor, Cursor, m_cursor, 4)
+ STYLE_GET_OPTIM(EWindRule, FillRule, m_fillRule, 1)
+ STYLE_GET_OPTIM(EWindRule, ClipRule, m_clipRule, 1)
+ STYLE_GET_OPTIM(PathStrokeCapType, CapStyle, m_capStyle, 2)
+ STYLE_GET_OPTIM(PathStrokeJoinType, JoinStyle, m_joinStyle, 2)
+ STYLE_GET_OPTIM(ETextDirection, TextDirection, m_textDirection, 1)
+ STYLE_GET_OPTIM(unsigned int, TextDecoration, m_textDecoration, 3)
+ STYLE_GET_OPTIM(ETextAnchor, TextAnchor, m_textAnchor, 2)
+ STYLE_GET_OPTIM(EUnicodeBidi, TextUnicodeBidi, m_textUnicodeBidi, 2)
+ STYLE_GET_OPTIM(ETextWritingMode, TextWritingMode, m_textWritingMode, 2)
+ STYLE_GET_OPTIM(EFontStyle, FontStyle, m_fontStyle, 2)
+ STYLE_GET_OPTIM(bool, Overflow, m_overflow, 1)
+ STYLE_GET_OPTIM(bool, Visible, m_visible, 1)
+ STYLE_GET_OPTIM(bool, Display, m_display, 1)
+ STYLE_GET_OPTIM(EColorInterpolation, ColorInterpolation, m_colorInterpolation, 1)
+
+ STYLE_HAS(ClipPath, m_clipPath)
+ STYLE_HAS(Mask, m_mask)
+ STYLE_HAS(StartMarker, m_startMarker)
+ STYLE_HAS(MidMarker, m_midMarker)
+ STYLE_HAS(EndMarker, m_endMarker)
+
+ // Special "set" cases
+ void setStartMarker(const QString &);
+ void setMidMarker(const QString &);
+ void setEndMarker(const QString &);
+ void setMarkers(const QString &);
+
+ // Special "has" cases
+ bool hasMarkers() const;
+
+ // Special "is" cases
+ bool isStroked() const;
+ bool isFilled() const;
+
+ // Function which sets default values
+ void processStyle();
+
+ // Special virtual functions
+ virtual void setClip(const QString &clip);
+ virtual QRect clip();
+
+protected:
+ float fontSizeForText(const QString &);
+
+ SVGElementImpl *m_object;
+
+private:
+ void setPaint(const QString &, SVGPaintImpl *);
+ QString extractUrlId(const QString& string);
+
+ unsigned long long m_flags;
+
+public:
+ KSVG_GET
+ KSVG_PUT
+
+ enum
+ {
+ // Properties
+ ClassName, Style,
+ StrokeWidth, StrokeMiterlimit, StrokeLineCap, StrokeLineJoin,
+ Stroke, Fill, Color, StopColor, FontSize, FontFamily, FontWeight,
+ FontStyle, TextDecoration, TextAnchor, Direction, WritingMode,
+ UnicodeBidi, Opacity, FillOpacity, StrokeOpacity, ClipPath,
+ MarkerStart, MarkerMid, MarkerEnd, Marker, Cursor, Display,
+ Overflow, Clip, Visibility, FillRule, ClipRule,
+ StrokeDashOffset, StrokeDashArray, ColorProfile, BaselineShift,
+ LetterSpacing, WordSpacing, PointerEvents,
+ GlyphOrientationVertical, GlyphOrientationHorizontal,
+ ColorInterpolation, Mask,
+ // Functions
+ GetStyle
+ };
+
+ KJS::Value getValueProperty(KJS::ExecState *exec, int token) const;
+ void putValueProperty(KJS::ExecState *exec, int token, const KJS::Value &value, int attr);
+};
+
+}
+
+KSVG_DEFINE_PROTOTYPE(SVGStylableImplProto)
+KSVG_IMPLEMENT_PROTOFUNC(SVGStylableImplProtoFunc, SVGStylableImpl)
+
+#endif
+
+// vim:ts=4:noet