diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 47d455dd55be855e4cc691c32f687f723d9247ee (patch) | |
tree | 52e236aaa2576bdb3840ebede26619692fed6d7d /ksvg/dom/SVGSVGElement.h | |
download | tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.tar.gz tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'ksvg/dom/SVGSVGElement.h')
-rw-r--r-- | ksvg/dom/SVGSVGElement.h | 581 |
1 files changed, 581 insertions, 0 deletions
diff --git a/ksvg/dom/SVGSVGElement.h b/ksvg/dom/SVGSVGElement.h new file mode 100644 index 00000000..59621e2e --- /dev/null +++ b/ksvg/dom/SVGSVGElement.h @@ -0,0 +1,581 @@ +/* + 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 SVGSVGElement_H +#define SVGSVGElement_H + +#include <dom/dom_string.h> +#include "SVGElement.h" +#include "SVGTests.h" +#include "SVGLangSpace.h" +#include "SVGExternalResourcesRequired.h" +#include "SVGStylable.h" +#include "SVGLocatable.h" +#include "SVGFitToViewBox.h" +#include "SVGZoomAndPan.h" + +namespace KSVG +{ +class SVGAnimatedLength; +class SVGPoint; +class SVGNumber; +class SVGAngle; +class SVGMatrix; +class SVGLength; +class SVGRect; +class SVGTransform; +class SVGViewSpec; +class SVGSVGElementImpl; + +/** + * A key interface definition is the SVGSVGElement interface, which is the + * interface that corresponds to the 'svg' element. This interface contains + * various miscellaneous commonly-used utility methods, such as matrix + * operations and the ability to control the time of redraw on visual + * rendering devices. SVGSVGElement extends ViewCSS and DocumentCSS to provide + * access to the computed values of properties and the override style sheet + * as described in DOM2. + * + * For more information : + * <a href="http://www.w3.org/TR/SVG/struct.html#NewDocument"> + * the 'svg' element</a> + */ +class SVGSVGElement : public SVGElement, + public SVGTests, + public SVGLangSpace, + public SVGExternalResourcesRequired, + public SVGStylable, + public SVGLocatable, + public SVGFitToViewBox, + public SVGZoomAndPan + //public events::EventTarget, + //public events::DocumentEvent, + //public css::ViewCSS, + //public css::DocumentCSS +{ +public: + SVGSVGElement(); + SVGSVGElement(const SVGSVGElement &); + SVGSVGElement &operator=(const SVGSVGElement &other); + SVGSVGElement(SVGSVGElementImpl *); + virtual ~SVGSVGElement(); + + /** + * (Has no meaning or effect on outermost 'svg' elements.) + * The x-axis coordinate of one corner of the rectangular region into which an + * embedded 'svg' element is placed. If the attribute is not specified, the + * effect is as if a value of "0" were specified. + * + * This attribute is animatable. + * + * @return The x-axis coordinate of the viewport of the 'svg' element. + */ + SVGAnimatedLength x() const; + + /** + * (Has no meaning or effect on outermost 'svg' elements.) + * The x-axis coordinate of one corner of the rectangular region into which an + * embedded 'svg' element is placed. If the attribute is not specified, the + * effect is as if a value of "0" were specified. + * + * This attribute is animatable. + * + * @return The y-axis coordinate of the viewport of the 'svg' element. + */ + SVGAnimatedLength y() const; + + /** + * For outermost 'svg' elements, the intrinsic width of the SVG document + * fragment. For embedded 'svg' elements, the width of the rectangular + * region into which the 'svg' element is placed. + * A negative value is an error (see <a + * href="http://www.w3.org/TR/SVG/implnote.html#ErrorProcessing"> Error + * processing </a>). + * A value of zero disables rendering of the element. If the attribute is not + * specified, the effect is as if a value of "100%" were specified. + * + * This attribute is animatable. + * + * @return The width of the viewport of the 'svg' element. + */ + SVGAnimatedLength width() const; + + /** + * For outermost 'svg' elements, the intrinsic height of the SVG document + * fragment. For embedded 'svg' elements, the height of the rectangular region + * into which the 'svg' element is placed. + * A negative value is an error (see <a + * href="http://www.w3.org/TR/SVG/implnote.html#ErrorProcessing"> Error + * processing </a>). + * A value of zero disables rendering of the element. If the attribute is not + * specified, the effect is as if a value of "100%" were specified. + * + * This attribute is animatable. + * + * @return The height of the viewport of the 'svg' element. + */ + SVGAnimatedLength height() const; + + /** + * The <code> contentScriptType </code> attribute identifies the default + * scripting language for the given document. This attribute sets the scripting + * language used to process the value strings in event attributes. The value + * content-type specifies a media type, per <a + * href="http://www.ietf.org/rfc/rfc2045.txt"> [RFC2045]</a>. The default value + * is "text/ecmascript". + * + * This attribute is not animatable. + * + * @exception + * NO_MODIFICATION_ALLOWED_ERR: Raised on an attempt to change the value of a + * readonly attribute. + */ + void setContentScriptType(const DOM::DOMString &); + + /** + * @return The value of the <code>contentScript</code> attribute on the given + * 'svg' element. + */ + DOM::DOMString contentScriptType() const; + + /** + * Identifies the default style sheet language for the given document. This + * attribute sets the style sheet language for the style attributes that are + * available on many elements. The value of the attribute consists of a media + * type, per <a href="http://www.ietf.org/rfc/rfc2045.txt">[RFC2045]</a>. + * The default value is "text/css". + */ + void setContentStyleType(const DOM::DOMString &); + + /** + * @return The value of the <code>contentStyle</code> attribute on the given + * 'svg' element. + */ + DOM::DOMString contentStyleType() const; + + /** + * The position and size of the viewport (implicit or explicit) that + * corresponds to this 'svg' element. When the user agent is actually + * rendering the content, then the position and size values represent the + * actual values when rendering. The position and size values are unitless + * values in the coordinate system of the parent element. If no parent element + * exists (i.e., 'svg' element represents the root of the document tree), if + * this SVG document is embedded as part of another document (e.g., via the + * HTML 'object' element), then the position and size are unitless values in + * the coordinate system of the parent document. (If the parent uses CSS or + * XSL layout, then unitless values represent pixel units for the current CSS + * or XSL viewport, as described in the CSS2 specification.) If the parent + * element does not have a coordinate system, then the user agent should + * provide reasonable default values for this attribute. + * + * @return The viewport represented by a <code>SVGRect</rect>. + */ + SVGRect viewport() const; + + /** + * Size of a pixel units (as defined by CSS2) along the x-axis of the viewport, + * which represents a unit somewhere in the range of 70dpi to 120dpi, and, on + * systems that support this, might actually match the characteristics of the + * target medium. On systems where it is impossible to know the size of a + * pixel, a suitable default pixel size is provided. + * + * @return Corresponding size of a pixel unit along the x-axis of the viewport. + */ + float pixelUnitToMillimeterX() const; + + /** + * @return Corresponding size of a pixel unit along the y-axis of the viewport. + */ + float pixelUnitToMillimeterY() const; + + /** + * User interface (UI) events in DOM Level 2 indicate the screen positions at + * which the given UI event occurred. When the user agent actually knows the + * physical size of a "screen unit", this attribute will express that + * information; otherwise, user agents will provide a suitable default value + * such as .28mm. + * + * @return Corresponding size of a screen pixel along the x-axis of the + * viewport. + */ + float screenPixelToMillimeterX() const; + + /** + * @return Corresponding size of a screen pixel along the y-axis of the + * viewport. + */ + float screenPixelToMillimeterY() const; + + /** + * The initial view (i.e., before magnification and panning) of the current + * innermost SVG document fragment can be either the "standard" view (i.e., + * based on attributes on the 'svg' element such as fitBoxToViewport) or to a + * "custom" view (i.e., a hyperlink into a particular 'view' or other element - + * see <a href="http://www.w3.org/TR/SVG/linking.html#LinksIntoSVG"> Linking + * into SVG content: URI fragments and SVG views)</a>. If the initial view + * is the "standard" view, then this attribute is false. If the initial + * view is a "custom" view, then this attribute is true. + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised on an attempt to change the value of a + * readonly attribute. + */ + void setUseCurrentView(bool); + + /** + * @return Indicated whether the view is "custom" or not. + */ + bool useCurrentView() const; + + /** + * The definition of the initial view (i.e., before magnification and panning) + * of the current innermost SVG document fragment. The meaning depends on the + * situation: + * + * If the initial view was a "standard" view, then: + * + * the values for <code>viewBox</code>, <code>preserveAspectRatio</code> and + * <code>zoomAndPan</code> within <code>currentView</code> will match the + * values for the corresponding DOM attributes that are on SVGSVGElement + * directly. + * the values for <code>transform</code> and <code>viewTarget</code> within + * <code>currentView</code> will be null. + * + * If the initial view was a link into a 'view' element, then: + * + * the values for <code>viewBox</code>, <code>preserveAspectRatio</code> and + * <code>zoomAndPan</code> within <code>currentView</code> will correspond to + * the corresponding attributes for the given 'view' element. + * the values for <code>transform</code> and <code>viewTarget</code> within + * <code>currentView </code>will be null + * + * If the initial view was a link into another element (i.e., other than a + *'view'), then: + * + * the values for <code>viewBox</code>, <code>preserveAspectRatio</code> and + * <code>zoomAndPan</code> within <code>currentView</code> will match the + * values for the corresponding DOM attributes that are on SVGSVGElement + * directly for the closest ancestor 'svg' element. + * the values for transform within <code>currentView</code> will be null. + * the <code>viewTarget</code> within <code>currentView</code> will represent + * the target of the link. + * + * If the initial view was a link into the SVG document fragment using an SVG + * view specification fragment identifier (i.e., #svgView(...)), then: + * + * the values for <code>viewBox</code>, <code>preserveAspectRatio</code>, + * <code>zoomAndPan</code>, <code>transform</code> and <code>viewTarget</code> + * within <code>currentView</code> will correspond to the values from the SVG + * view specification fragment identifier + * + * The object itself and its contents are both readonly. + */ + SVGViewSpec currentView() const; + + /** + * The currentScale attribute indicates the current scale factor relative to + * the initial view to take into account user magnification and panning + * operations, as described under + * <a href="http://www.w3.org/TR/SVG/interact.html#ZoomAndPanAttribute"> + * Magnification and panning</a>. DOM attributes currentScale and + * currentTranslate are equivalent to the 2x3 matrix [a b c d e f] = + * [currentScale 0 0 currentScale currentTranslate.x currentTranslate.y]. + * If "magnification" is enabled (i.e., zoomAndPan="magnify"), then the effect + * is as if an extra transformation were placed at the outermost level on the + * SVG document fragment (i.e., outside the outermost 'svg' element). + * + * @exception DOMException + * NO_MODIFICATION_ALLOWED_ERR: Raised on an attempt to change the value of a + * readonly attribute. + * + * @param The new value of the currentScale attribute. + */ + void setCurrentScale(float); + + /** + * @return The <code> currentScale </code> attribute value as described above. + */ + float currentScale() const; + + /** + * The corresponding translation factor that takes into account user + * "magnification". + * + * @return The translation factor represented by an <code> SVGPoint </code>. + */ + SVGPoint currentTranslate() const; + + /** + * Takes a time-out value which indicates that redraw shall not occur until: + * + * (a) the corresponding unsuspendRedraw(suspend_handle_id) call has been made + * (b) an unsuspendRedrawAll() call has been made + * (c) its timer has timed out. + * + * In environments that do not support interactivity (e.g., print media), then + * redraw shall not be suspended suspend_handle_id = + * suspendRedraw(max_wait_milliseconds) and unsuspendRedraw(suspend_handle_id) + * must be packaged as balanced pairs. When you want to suspend redraw actions + * as a collection of SVG DOM changes occur, then precede the changes to the + * SVG DOM with a method call similar to suspend_handle_id = + * suspendRedraw(max_wait_milliseconds) and follow the changes with a method + * call similar to unsuspendRedraw(suspend_handle_id). Note that multiple + * suspendRedraw calls can be used at once and that each such method call is + * treated independently of the other suspendRedraw method calls. + * + * @param max_wait_milliseconds The amount of time in milliseconds to hold off + * before redrawing the device.Values greater than 60 seconds will be + * truncated down to 60 seconds. + * + * @return A number which acts as a unique identifier for the given + * suspendRedraw() call. This value must be passed as the parameter to the + * corresponding unsuspendRedraw() method call. + */ + unsigned long suspendRedraw(unsigned long max_wait_milliseconds); + + /** + * Cancels a specified suspendRedraw() by providing a unique suspend_handle_id. + * + * @param suspend_handle_id A number which acts as a unique identifier for the + * desired suspendRedraw() call. The number supplied must be a value returned + * from a previous call to suspendRedraw(). + */ + void unsuspendRedraw(unsigned long suspend_handle_id); + + /** + * Cancels all currently active suspendRedraw() method calls. This method is + * most useful at the very end of a set of SVG DOM calls to ensure that all + * pending suspendRedraw() method calls have been cancelled. + */ + void unsuspendRedrawAll(); + + /** + * In rendering environments supporting interactivity, forces the user agent to + * immediately redraw all regions of the viewport that require updating. + */ + void forceRedraw(); + + /** + * Suspends (i.e., pauses) all currently running animations that are defined + * within the SVG document fragment corresponding to this 'svg' element, + * causing the animation clock corresponding to this document fragment to stand + * still until it is paused. + */ + void pauseAnimations(); + + /** + * Unsuspends (i.e., pauses) currently running animations that are defined + * within the SVG document fragment, causing the animation clock to continue + * from the time it was suspended. + */ + void unpauseAnimations(); + + /** + * Returns true if this SVG Document fragment is in a paused state. + * + * @return Boolean indicating whether this SVG document fragment is in a paused + * state. + */ + bool animationsPaused(); + + /** + * Returns the current time in seconds relative to the start time for the + * current SVG document fragment. + * + * @return The current time in seconds. + */ + float getCurrentTime(); + + /** + * Adjusts the clock for this SVG document fragment, establishing a new current + * time. + * + * @param seconds The new current time in seconds relative to the start time + * for the current SVG document fragment. + */ + void setCurrentTime(float seconds); + + /** + * Returns the list of graphics elements whose rendered content intersects the + * supplied rectangle, honoring the 'pointer-events' property value on each + * candidate graphics element. + * + * @param rect The test rectangle. The values are in the initial coordinate + * system for the current 'svg' element. + * @param referenceElement If not null, then only return elements whose drawing + * order has them below the given reference element. + * + * @return A list of Elements whose content is intersects the supplied + * rectangle. + */ + DOM::NodeList getIntersectionList(const SVGRect &rect, const SVGElement + &referenceElement); + + /** + * Returns the list of graphics elements whose rendered content is entirely + * contained within the supplied rectangle, honoring the 'pointer-events' + * property value on each candidate graphics element. + * + * @param rect The test rectangle. The values are in the initial coordinate + * system for the current 'svg' element. + * @param referenceElement If not null, then only return elements whose drawing + * order has them below the given reference element. + * + * @return A list of Elements whose content is enclosed by the supplied + * rectangle. + */ + DOM::NodeList getEnclosureList(const SVGRect &rect, const SVGElement + &referenceElement); + + /** + * Returns true if the rendered content of the given element intersects the + * supplied rectangle, honoring the 'pointer-events' property value on each + * candidate graphics element. + * + * @param element The element on which to perform the given test. + * @param rect The test rectangle. The values are in the initial coordinate + * system for the current 'svg' element. + * + * @return True or false, depending on whether the given element intersects the + * supplied rectangle. + */ + bool checkIntersection(const SVGElement &element, const SVGRect &rect); + + /** + * Returns true if the rendered content of the given element is entirely + * contained within the supplied rectangle, honoring the 'pointer-events' + * property value on each candidate graphics element. + * + * @param element The element on which to perform the given test. + * @param rect The test rectangle. The values are in the initial coordinate + * system for the current 'svg' element. + * + * @return True or false, depending on whether the given element is enclosed by + * the supplied rectangle. + */ + bool checkEnclosure(const SVGElement &element, const SVGRect &rect); + + /** + * Unselects any selected objects, including any selections of text + * strings and type-in bars. + */ + void deSelectAll(); + + /** + * Creates an <code> SVGNumber </code> object outside of any document trees. + * The object is initialized to a value of zero. + * + * @return An <code> SVGNumber </code> object. + */ + SVGNumber createSVGNumber(); + + /** + * Creates an <code> SVGLength </code> object outside of any document trees. + * The object is initialized to a value of zero user units. + * + * @return An <code> SVGLength </code> object. + */ + SVGLength createSVGLength(); + + /** + * Creates an <code> SVGAngle </code> object outside of any document trees. + * The object is initialized to a value of zero degreesunitless). + * + * @return An <code> SVGAngle </code> object. + */ + SVGAngle createSVGAngle(); + + /** + * Creates an <code> SVGPoint </code> object outside of any document trees. + * The object is initialized to the point (0,0) in the user coordinate system. + * + * @return An <code> SVGPoint </code> object. + */ + SVGPoint createSVGPoint(); + + /** + * Creates an <code> SVGMatrix </code> object outside of any document trees. + * The object is initialized to a value of the identity matrix. + * + * @return An <code> SVGMatrix </code> object. + */ + SVGMatrix createSVGMatrix(); + + /** + * Creates an <code> SVGRect </code> object outside of any document trees. + * The object is initialized such that all values are set to 0 user units. + * + * @return An <code> SVGRect </code> object. + */ + SVGRect createSVGRect(); + + /** + * Creates an <code> SVGTransform </code> object outside of any document trees. + * The object is initialized to an identity matrix transform + * (SVG_TRANSFORM_MATRIX). + * + * @return An <code> SVGTransform </code> object. + */ + SVGTransform createSVGTransform(); + + /** + * Creates an <code> SVGTransform </code> object outside of any document trees. + * The object is initialized to the given matrix transform (i.e., + * SVG_TRANSFORM_MATRIX). + * + * @return An <code> SVGTransform </code> object. + */ + SVGTransform createSVGTransformFromMatrix(const SVGMatrix &matrix); + + /** + * Searches this SVG document fragment (i.e., the search is restricted to a + * subset of the document tree) for an <code> Element </code> whose id is given + * by elementId. If an <code> Element </code> is found, that <code> Element + * </code> is returned. If no such element exists, returns null. Behavior + * is not defined if more than one element has this id. + * + * @param elementId The unique id value for an element. + * + * @return The matching element. + */ + SVGElement getElementById(const DOM::DOMString &elementId); + + // Internal! - NOT PART OF THE SVG SPECIFICATION + SVGSVGElementImpl *handle() const { return impl; } + +private: + SVGSVGElementImpl *impl; +}; + +} + +#endif + +// vim:ts=4:noet |