001: /*
002:
003: Licensed to the Apache Software Foundation (ASF) under one or more
004: contributor license agreements. See the NOTICE file distributed with
005: this work for additional information regarding copyright ownership.
006: The ASF licenses this file to You under the Apache License, Version 2.0
007: (the "License"); you may not use this file except in compliance with
008: the License. You may obtain a copy of the License at
009:
010: http://www.apache.org/licenses/LICENSE-2.0
011:
012: Unless required by applicable law or agreed to in writing, software
013: distributed under the License is distributed on an "AS IS" BASIS,
014: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: See the License for the specific language governing permissions and
016: limitations under the License.
017:
018: */
019:
020: package org.apache.batik.bridge;
021:
022: import java.awt.geom.AffineTransform;
023: import java.awt.geom.Rectangle2D;
024:
025: import org.w3c.dom.Element;
026: import org.w3c.dom.events.MutationEvent;
027:
028: import org.apache.batik.css.engine.CSSEngineEvent;
029: import org.apache.batik.dom.svg.AnimatedLiveAttributeValue;
030: import org.apache.batik.dom.svg.SVGContext;
031: import org.apache.batik.dom.svg.SVGOMElement;
032:
033: /**
034: * Base class for 'descriptive' elements, mostly title and desc.
035: *
036: * @author <a href="mailto:deweese@apache.org">Thomas DeWeese</a>
037: * @version $Id: SVGDescriptiveElementBridge.java 478160 2006-11-22 13:35:06Z dvholten $
038: */
039: public abstract class SVGDescriptiveElementBridge extends
040: AbstractSVGBridge implements GenericBridge,
041: BridgeUpdateHandler, SVGContext {
042:
043: Element theElt;
044: Element parent;
045: BridgeContext theCtx;
046:
047: public SVGDescriptiveElementBridge() {
048: }
049:
050: /**
051: * Invoked to handle an <tt>Element</tt> for a given
052: * <tt>BridgeContext</tt>. For example, see the
053: * <tt>SVGDescElementBridge</tt>.
054: *
055: * @param ctx the bridge context to use
056: * @param e the element to be handled
057: */
058: public void handleElement(BridgeContext ctx, Element e) {
059: UserAgent ua = ctx.getUserAgent();
060: ua.handleElement(e, Boolean.TRUE);
061:
062: if (ctx.isDynamic()) {
063: SVGDescriptiveElementBridge b;
064: b = (SVGDescriptiveElementBridge) getInstance();
065: b.theElt = e;
066: b.parent = (Element) e.getParentNode();
067: b.theCtx = ctx;
068: ((SVGOMElement) e).setSVGContext(b);
069: }
070:
071: }
072:
073: // BridgeUpdateHandler implementation ////////////////////////////////////
074:
075: public void dispose() {
076: UserAgent ua = theCtx.getUserAgent();
077: ((SVGOMElement) theElt).setSVGContext(null);
078: ua.handleElement(theElt, parent);
079: theElt = null;
080: parent = null;
081: }
082:
083: public void handleDOMNodeInsertedEvent(MutationEvent evt) {
084: UserAgent ua = theCtx.getUserAgent();
085: ua.handleElement(theElt, Boolean.TRUE);
086: }
087:
088: public void handleDOMCharacterDataModified(MutationEvent evt) {
089: UserAgent ua = theCtx.getUserAgent();
090: ua.handleElement(theElt, Boolean.TRUE);
091: }
092:
093: public void handleDOMNodeRemovedEvent(MutationEvent evt) {
094: dispose();
095: }
096:
097: public void handleDOMAttrModifiedEvent(MutationEvent evt) {
098: }
099:
100: public void handleCSSEngineEvent(CSSEngineEvent evt) {
101: }
102:
103: public void handleAnimatedAttributeChanged(
104: AnimatedLiveAttributeValue alav) {
105: }
106:
107: public void handleOtherAnimationChanged(String type) {
108: }
109:
110: // SVGContext implementation ///////////////////////////////////////////
111:
112: /**
113: * Returns the size of a px CSS unit in millimeters.
114: */
115: public float getPixelUnitToMillimeter() {
116: return theCtx.getUserAgent().getPixelUnitToMillimeter();
117: }
118:
119: /**
120: * Returns the size of a px CSS unit in millimeters.
121: * This will be removed after next release.
122: * @see #getPixelUnitToMillimeter()
123: */
124: public float getPixelToMM() {
125: return getPixelUnitToMillimeter();
126:
127: }
128:
129: public Rectangle2D getBBox() {
130: return null;
131: }
132:
133: public AffineTransform getScreenTransform() {
134: return theCtx.getUserAgent().getTransform();
135: }
136:
137: public void setScreenTransform(AffineTransform at) {
138: theCtx.getUserAgent().setTransform(at);
139: }
140:
141: public AffineTransform getCTM() {
142: return null;
143: }
144:
145: public AffineTransform getGlobalTransform() {
146: return null;
147: }
148:
149: public float getViewportWidth() {
150: return theCtx.getBlockWidth(theElt);
151: }
152:
153: public float getViewportHeight() {
154: return theCtx.getBlockHeight(theElt);
155: }
156:
157: public float getFontSize() {
158: return 0;
159: }
160: }
|