/*

   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

 */
package org.apache.batik.svggen;

import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.RenderableImage;

import org.w3c.dom.Element;

Implements the GenericImageHandler interface and only uses <image> elements. This class delegates to the ImageHandler interface for handling the xlink:href attribute on the elements it creates.
Author:Vincent Hardy
Version:$Id: SimpleImageHandler.java 1733416 2016-03-03 07:07:13Z gadams $
/** * Implements the <code>GenericImageHandler</code> interface and only * uses &lt;image&gt; elements. This class delegates to the * <code>ImageHandler</code> interface for handling the xlink:href * attribute on the elements it creates. * * @author <a href="mailto:vincent.hardy@sun.com">Vincent Hardy</a> * @version $Id: SimpleImageHandler.java 1733416 2016-03-03 07:07:13Z gadams $ */
public class SimpleImageHandler implements GenericImageHandler, SVGSyntax, ErrorConstants { // duplicate the string here to remove dependencies on // org.apache.batik.dom.util.XLinkSupport static final String XLINK_NAMESPACE_URI = "http://www.w3.org/1999/xlink";
ImageHandler which handles xlink:href attribute setting
/** * <code>ImageHandler</code> which handles xlink:href attribute setting */
protected ImageHandler imageHandler;
Params:
  • imageHandler – ImageHandler handling the xlink:href on the <image> elements this GenericImageHandler implementation creates.
/** * @param imageHandler ImageHandler handling the xlink:href on the * &lt;image&gt; elements this GenericImageHandler implementation * creates. */
public SimpleImageHandler(ImageHandler imageHandler){ if (imageHandler == null){ throw new IllegalArgumentException(); } this.imageHandler = imageHandler; }
This GenericImageHandler implementation does not need to interact with the DOMTreeManager.
/** * This <code>GenericImageHandler</code> implementation does not * need to interact with the DOMTreeManager. */
public void setDOMTreeManager(DOMTreeManager domTreeManager){ }
Creates an Element which can refer to an image. Note that no assumptions should be made by the caller about the corresponding SVG tag.
/** * Creates an Element which can refer to an image. * Note that no assumptions should be made by the caller about the * corresponding SVG tag. */
public Element createElement(SVGGeneratorContext generatorContext) { // Create a DOM Element in SVG namespace to refer to an image Element imageElement = generatorContext.getDOMFactory().createElementNS (SVG_NAMESPACE_URI, SVG_IMAGE_TAG); return imageElement; }
The handler sets the xlink:href tag and returns a transform
/** * The handler sets the xlink:href tag and returns a transform */
public AffineTransform handleImage(Image image, Element imageElement, int x, int y, int width, int height, SVGGeneratorContext generatorContext) { int imageWidth = image.getWidth(null); int imageHeight = image.getHeight(null); if(imageWidth == 0 || imageHeight == 0 || width == 0 || height == 0) { // Forget about it handleEmptyImage(imageElement); } else { imageHandler.handleImage(image, imageElement, generatorContext); setImageAttributes(imageElement, x, y, width, height, generatorContext); } return null; }
The handler sets the xlink:href tag and returns a transform
/** * The handler sets the xlink:href tag and returns a transform */
public AffineTransform handleImage(RenderedImage image, Element imageElement, int x, int y, int width, int height, SVGGeneratorContext generatorContext) { int imageWidth = image.getWidth(); int imageHeight = image.getHeight(); if(imageWidth == 0 || imageHeight == 0 || width == 0 || height == 0) { // Forget about it handleEmptyImage(imageElement); } else { imageHandler.handleImage(image, imageElement, generatorContext); setImageAttributes(imageElement, x, y, width, height, generatorContext); } return null; }
The handler sets the xlink:href tag and returns a transform
/** * The handler sets the xlink:href tag and returns a transform */
public AffineTransform handleImage(RenderableImage image, Element imageElement, double x, double y, double width, double height, SVGGeneratorContext generatorContext) { double imageWidth = image.getWidth(); double imageHeight = image.getHeight(); if(imageWidth == 0 || imageHeight == 0 || width == 0 || height == 0) { // Forget about it handleEmptyImage(imageElement); } else { imageHandler.handleImage(image, imageElement, generatorContext); setImageAttributes(imageElement, x, y, width, height, generatorContext); } return null; }
Sets the x/y/width/height attributes on the <image> element.
/** * Sets the x/y/width/height attributes on the &lt;image&gt; * element. */
protected void setImageAttributes(Element imageElement, double x, double y, double width, double height, SVGGeneratorContext generatorContext) { imageElement.setAttributeNS(null, SVG_X_ATTRIBUTE, generatorContext.doubleString(x)); imageElement.setAttributeNS(null, SVG_Y_ATTRIBUTE, generatorContext.doubleString(y)); imageElement.setAttributeNS(null, SVG_WIDTH_ATTRIBUTE, generatorContext.doubleString(width)); imageElement.setAttributeNS(null, SVG_HEIGHT_ATTRIBUTE, generatorContext.doubleString(height)); imageElement.setAttributeNS(null, SVG_PRESERVE_ASPECT_RATIO_ATTRIBUTE, SVG_NONE_VALUE); } protected void handleEmptyImage(Element imageElement) { imageElement.setAttributeNS(XLINK_NAMESPACE_URI, XLINK_HREF_QNAME, ""); imageElement.setAttributeNS(null, SVG_WIDTH_ATTRIBUTE, "0"); imageElement.setAttributeNS(null, SVG_HEIGHT_ATTRIBUTE, "0"); } }