You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
580 lines
21 KiB
580 lines
21 KiB
/*
|
|
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
|