Ignore:
Timestamp:
2013-06-11T01:01:28+02:00 (13 years ago)
Author:
Don-vip
Message:

fix #8742 - update svgsalamander to release 0.1.18+patch (fix bug SVGSALAMANDER-26) -> allow to open more SVG files

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/com/kitfox/svg/ShapeElement.java

    r4256 r6002  
    11/*
    2  * ShapeElement.java
     2 * SVG Salamander
     3 * Copyright (c) 2004, Mark McKay
     4 * All rights reserved.
    35 *
     6 * Redistribution and use in source and binary forms, with or
     7 * without modification, are permitted provided that the following
     8 * conditions are met:
    49 *
    5  *  The Salamander Project - 2D and 3D graphics libraries in Java
    6  *  Copyright (C) 2004 Mark McKay
     10 *   - Redistributions of source code must retain the above
     11 *     copyright notice, this list of conditions and the following
     12 *     disclaimer.
     13 *   - Redistributions in binary form must reproduce the above
     14 *     copyright notice, this list of conditions and the following
     15 *     disclaimer in the documentation and/or other materials
     16 *     provided with the distribution.
    717 *
    8  *  This library is free software; you can redistribute it and/or
    9  *  modify it under the terms of the GNU Lesser General Public
    10  *  License as published by the Free Software Foundation; either
    11  *  version 2.1 of the License, or (at your option) any later version.
    12  *
    13  *  This library is distributed in the hope that it will be useful,
    14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
    15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    16  *  Lesser General Public License for more details.
    17  *
    18  *  You should have received a copy of the GNU Lesser General Public
    19  *  License along with this library; if not, write to the Free Software
    20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    21  *
    22  *  Mark McKay can be contacted at mark@kitfox.com.  Salamander and other
    23  *  projects can be found at http://www.kitfox.com
     18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
     21 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
     22 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
     23 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
     25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     27 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
     29 * OF THE POSSIBILITY OF SUCH DAMAGE.
     30 *
     31 * Mark McKay can be contacted at mark@kitfox.com.  Salamander and other
     32 * projects can be found at http://www.kitfox.com
    2433 *
    2534 * Created on January 26, 2004, 5:21 PM
     
    96105    }
    97106
     107    private Paint handleCurrentColor(StyleAttribute styleAttrib) throws SVGException
     108    {
     109        if (styleAttrib.getStringValue().equals("currentColor"))
     110        {
     111            StyleAttribute currentColorAttrib = new StyleAttribute();
     112            if (getStyle(currentColorAttrib.setName("color")))
     113            {
     114                if (!currentColorAttrib.getStringValue().equals("none"))
     115                {
     116                    return currentColorAttrib.getColorValue();
     117                }
     118            }
     119            return null;
     120        }
     121        else
     122        {
     123            return styleAttrib.getColorValue();
     124        }
     125    }
     126
    98127    protected void renderShape(Graphics2D g, Shape shape) throws SVGException
    99128    {
     
    120149            else
    121150            {
    122                 fillPaint = styleAttrib.getColorValue();
     151                fillPaint = handleCurrentColor(styleAttrib);
    123152                if (fillPaint == null)
    124153                {
     
    130159
    131160                        SVGElement ele = diagram.getUniverse().getElement(uri);
    132                         fillPaint = ((FillElement)ele).getPaint(bounds, xform);
     161                        if (ele != null)
     162                        {
     163                            fillPaint = ((FillElement)ele).getPaint(bounds, xform);
     164                        }
    133165                    }
    134166                }
     
    156188            else
    157189            {
    158                 strokePaint = styleAttrib.getColorValue();
     190                strokePaint = handleCurrentColor(styleAttrib);
    159191                if (strokePaint == null)
    160192                {
     
    166198
    167199                        SVGElement ele = diagram.getUniverse().getElement(uri);
    168                         strokePaint = ((FillElement)ele).getPaint(bounds, xform);
     200                        if (ele != null)
     201                        {
     202                            strokePaint = ((FillElement)ele).getPaint(bounds, xform);
     203                        }
    169204                    }
    170205                }
     
    303338            }
    304339
    305             Shape strokeShape = stroke.createStrokedShape(shape);
     340            Shape strokeShape;
     341            AffineTransform cacheXform = g.getTransform();
     342            if (vectorEffect == VECTOR_EFFECT_NON_SCALING_STROKE)
     343            {
     344                strokeShape = cacheXform.createTransformedShape(shape);
     345                strokeShape = stroke.createStrokedShape(strokeShape);
     346            }
     347            else
     348            {
     349                strokeShape = stroke.createStrokedShape(shape);
     350            }
    306351
    307352            if (strokeOpacity <= 0)
     
    309354                //Do nothing
    310355            }
    311             else if (strokeOpacity < 1f)
     356            else
    312357            {
    313358                Composite cachedComposite = g.getComposite();
    314                 g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, strokeOpacity));
     359
     360                if (strokeOpacity < 1f)
     361                {
     362                    g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, strokeOpacity));
     363                }
     364
     365                if (vectorEffect == VECTOR_EFFECT_NON_SCALING_STROKE)
     366                {
     367                    //Set to identity
     368                    g.setTransform(new AffineTransform());
     369                }
    315370
    316371                g.setPaint(strokePaint);
    317372                g.fill(strokeShape);
    318373
    319                 g.setComposite(cachedComposite);
    320             }
    321             else
    322             {
    323                 g.setPaint(strokePaint);
    324                 g.fill(strokeShape);
     374                if (vectorEffect == VECTOR_EFFECT_NON_SCALING_STROKE)
     375                {
     376                    //Set to identity
     377                    g.setTransform(cacheXform);
     378                }
     379
     380                if (strokeOpacity < 1f)
     381                {
     382                    g.setComposite(cachedComposite);
     383                }
    325384            }
    326385        }
Note: See TracChangeset for help on using the changeset viewer.