| /* |
| |
| 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.Color; |
| import java.awt.GradientPaint; |
| import java.awt.Paint; |
| import java.awt.TexturePaint; |
| import java.util.LinkedList; |
| import java.util.List; |
| |
| import org.apache.batik.ext.awt.g2d.GraphicContext; |
| |
| /** |
| * Utility class that converts a Paint object into an |
| * SVG element. |
| * |
| * @author <a href="mailto:cjolif@ilog.fr">Christophe Jolif</a> |
| * @author <a href="mailto:vincent.hardy@eng.sun.com">Vincent Hardy</a> |
| * @version $Id$ |
| * @see org.apache.batik.svggen.SVGLinearGradient |
| * @see org.apache.batik.svggen.SVGTexturePaint |
| */ |
| public class SVGPaint implements SVGConverter { |
| /** |
| * All GradientPaint convertions are handed to svgLinearGradient |
| */ |
| private SVGLinearGradient svgLinearGradient; |
| |
| /** |
| * All TexturePaint convertions are handed to svgTextureGradient |
| */ |
| private SVGTexturePaint svgTexturePaint; |
| |
| /** |
| * All Color convertions are handed to svgColor |
| */ |
| private SVGColor svgColor; |
| |
| /** |
| * All custom Paint convetions are handed to svgCustomPaint |
| */ |
| private SVGCustomPaint svgCustomPaint; |
| |
| /** |
| * Used to generate DOM elements |
| */ |
| private SVGGeneratorContext generatorContext; |
| |
| /** |
| * @param generatorContext the context. |
| */ |
| public SVGPaint(SVGGeneratorContext generatorContext) { |
| this.svgLinearGradient = new SVGLinearGradient(generatorContext); |
| this.svgTexturePaint = new SVGTexturePaint(generatorContext); |
| this.svgCustomPaint = new SVGCustomPaint(generatorContext); |
| this.svgColor = new SVGColor(generatorContext); |
| this.generatorContext = generatorContext; |
| } |
| |
| /** |
| * @return Set of Elements defining the Paints this |
| * converter has processed since it was created |
| */ |
| public List getDefinitionSet(){ |
| List paintDefs = new LinkedList(svgLinearGradient.getDefinitionSet()); |
| paintDefs.addAll(svgTexturePaint.getDefinitionSet()); |
| paintDefs.addAll(svgCustomPaint.getDefinitionSet()); |
| paintDefs.addAll(svgColor.getDefinitionSet()); |
| return paintDefs; |
| } |
| |
| public SVGTexturePaint getTexturePaintConverter(){ |
| return svgTexturePaint; |
| } |
| |
| public SVGLinearGradient getGradientPaintConverter(){ |
| return svgLinearGradient; |
| } |
| |
| public SVGCustomPaint getCustomPaintConverter(){ |
| return svgCustomPaint; |
| } |
| |
| public SVGColor getColorConverter(){ |
| return svgColor; |
| } |
| |
| /** |
| * Converts part or all of the input GraphicContext into |
| * a set of attribute/value pairs and related definitions |
| * |
| * @param gc GraphicContext to be converted |
| * @return descriptor of the attributes required to represent |
| * some or all of the GraphicContext state, along |
| * with the related definitions |
| * @see org.apache.batik.svggen.SVGDescriptor |
| */ |
| public SVGDescriptor toSVG(GraphicContext gc){ |
| return toSVG(gc.getPaint()); |
| } |
| |
| /** |
| * @param paint Paint to be converted to SVG |
| * @return a descriptor of the corresponding SVG paint |
| */ |
| public SVGPaintDescriptor toSVG(Paint paint){ |
| // we first try the extension handler because we may |
| // want to override the way a Paint is managed! |
| SVGPaintDescriptor paintDesc = svgCustomPaint.toSVG(paint); |
| |
| if (paintDesc == null) { |
| if (paint instanceof Color) |
| paintDesc = SVGColor.toSVG((Color)paint, generatorContext); |
| else if (paint instanceof GradientPaint) |
| paintDesc = svgLinearGradient.toSVG((GradientPaint)paint); |
| else if (paint instanceof TexturePaint) |
| paintDesc = svgTexturePaint.toSVG((TexturePaint)paint); |
| } |
| |
| return paintDesc; |
| } |
| } |