summaryrefslogtreecommitdiffstats
path: root/ksvg/dom/SVGPatternElement.h
blob: 27850c658154b1ad8f4ab182f271f9b6fb773477 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
/*
    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.


    This file includes excerpts from the Scalable Vector Graphics
    (SVG) 1.0 Specification (Proposed Recommendation)
    http://www.w3.org/TR/SVG

    Copyright © 2001 World Wide Web Consortium, (Massachusetts
    Institute of Technology, Institut National de Recherche en
    Informatique et en Automatique, Keio University).
    All Rights Reserved.
*/

#ifndef SVGPatternElement_H
#define SVGPatternElement_H

#include "SVGElement.h"
#include "SVGURIReference.h"
#include "SVGTests.h"
#include "SVGLangSpace.h"
#include "SVGExternalResourcesRequired.h"
#include "SVGStylable.h"
#include "SVGFitToViewBox.h"
#include "SVGUnitTypes.h"

namespace KSVG
{

class SVGAnimatedEnumeration;
class SVGAnimatedTransformList;
class SVGAnimatedLength;
class SVGPatternElementImpl;

/**
 * A pattern is used to fill or stroke an object using a pre-defined graphic object which can be
 * replicated ("tiled") at fixed intervals in x and y to cover the areas to be painted.
 *
 * Patterns are defined using a 'pattern' element and then referenced by properties 'fill' and 'stroke'
 * on a given graphics element to indicate that the given element shall be filled or stroked with the
 * referenced pattern.
 */
class SVGPatternElement :	public SVGElement,
							public SVGURIReference,
							public SVGTests,
							public SVGLangSpace,
							public SVGExternalResourcesRequired,
							public SVGStylable,
							public SVGFitToViewBox,
							public SVGUnitTypes
{
public:
	SVGPatternElement();
	SVGPatternElement(const SVGPatternElement &other);
	SVGPatternElement &operator=(const SVGPatternElement &other);
	SVGPatternElement(SVGPatternElementImpl *other);
	virtual ~SVGPatternElement();

	/**
	 * Defines the coordinate system for attributes <code>x</code>, <code>y</code>, <code>width</code>, <code>height</code>.
	 * If patternUnits="userSpaceOnUse", <code>x</code>, <code>y</code>, <code>width</code>, <code>height</code> represent
	 * values in the coordinate system that results from taking the current user coordinate system in place at the time when
	 * the 'pattern' element is referenced (i.e., the user coordinate system for the element referencing the 'pattern' element
	 * via a 'fill' or 'stroke' property) and then applying the transform specified by attribute patternTransform.
	 * If patternUnits="objectBoundingBox", the user coordinate system for attributes <code>x</code>, <code>y</code>, <code>width</code>,
	 * <code>height</code> is established using the bounding box of the element to which the pattern is applied and then applying
	 * the transform specified by attribute <code>patternTransform</code>.
	 * If attribute <code>patternUnits</code> is not specified, then the effect is as if a value of objectBoundingBox were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The current target coordinate system mode.
	 */
	SVGAnimatedEnumeration patternUnits() const;

	/**
	 * Defines the coordinate system for the contents of the 'pattern'. Note that this attribute has no effect
	 * if attribute <code>viewBox</code> is specified.
	 * If patternContentUnits="userSpaceOnUse", the user coordinate system for the contents of the 'pattern' element
	 * is the coordinate system that results from taking the current user coordinate system in place at the time
	 * when the 'pattern' element is referenced (i.e., the user coordinate system for the element referencing the
	 * 'pattern' element via a 'fill' or 'stroke' property) and then applying the transform specified by attribute
	 * <code>patternTransform</code>.
	 * If patternContentUnits="objectBoundingBox", the user coordinate system for the contents of the 'pattern' element
	 * is established using the bounding box of the element to which the pattern is applied and then applying the
	 * transform specified by attribute <code>patternTransform</code>.
	 * If attribute <code>patternContentUnits</code> is not specified, then the effect is as if a value of
	 * userSpaceOnUse were specified. 
	 *
	 * This attribute is animatable.
	 *
	 * @return The current content coordinate system mode.
	 */
	SVGAnimatedEnumeration patternContentUnits() const;

	/**
	 * Contains the definition of an optional additional transformation from the pattern coordinate
	 * system onto the target coordinate system (i.e., userSpaceOnUse or objectBoundingBox).
	 * This allows for things such as skewing the pattern tiles. This additional transformation
	 * matrix is post-multiplied to (i.e., inserted to the right of) any previously defined
	 * transformations, including the implicit transformation necessary to convert from object
	 * bounding box units to user space.
	 * If attribute <code>patternTransform</code> is not specified, then the effect is as if an identity transform
	 * were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The transformation list that is applied to the pattern tile.
	 */
	SVGAnimatedTransformList patternTransform() const;

	/**
	 * The attributes <code>x</code>, <code>y</code>, <code>width</code>, <code>height</code>
	 * indicate how the pattern tiles are placed and spaced.
	 * These attributes represent coordinates and values in the coordinate space specified by
	 * the combination of attributes <code>patternUnits</code> and <code>patternTransform</code>.
	 * If the attribute is not specified, the effect is as if a value of zero were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The x-axis coordinate of the pattern tile.
	 */
	SVGAnimatedLength x() const;

	/**
	 * @see x
	 * If the attribute is not specified, the effect is as if a value of zero were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The y-axis coordinate of the pattern tile.
	 */
	SVGAnimatedLength y() const;

	/**
	 * @see x
	 * A negative value is an error. A value of zero disables rendering of
	 * the element (i.e., no paint is applied).
	 *
	 * If the attribute is not specified, the effect is as if a value of zero were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The width of the pattern tile.
	 */
	SVGAnimatedLength width() const;

	/**
	 * @see x
	 * A negative value is an error. A value of zero disables rendering of
	 * the element (i.e., no paint is applied).
	 *
	 * If the attribute is not specified, the effect is as if a value of zero were specified.
	 *
	 * This attribute is animatable.
	 *
	 * @return The height coordinate of the pattern tile.
	 */
	SVGAnimatedLength height() const;

	// Internal! - NOT PART OF THE SVG SPECIFICATION
	SVGPatternElementImpl *handle() const { return impl; }

private:
	SVGPatternElementImpl *impl;
};

}

#endif