source: josm/trunk/src/com/kitfox/svg/ClipPath.java@ 14328

Last change on this file since 14328 was 14328, checked in by Don-vip, 6 years ago

see #14319, see #16838 - update to svgSalamander 1.1.2

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1/*
2 * SVG Salamander
3 * Copyright (c) 2004, Mark McKay
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or
7 * without modification, are permitted provided that the following
8 * conditions are met:
9 *
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.
17 *
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
33 *
34 * Created on January 26, 2004, 1:56 AM
35 */
36package com.kitfox.svg;
37
38import com.kitfox.svg.xml.StyleAttribute;
39import java.awt.Shape;
40import java.awt.geom.Area;
41
42/**
43 * @author Mark McKay
44 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>
45 */
46public class ClipPath extends SVGElement
47{
48
49 public static final String TAG_NAME = "clippath";
50 public static final int CP_USER_SPACE_ON_USE = 0;
51 public static final int CP_OBJECT_BOUNDING_BOX = 1;
52 int clipPathUnits = CP_USER_SPACE_ON_USE;
53
54 /**
55 * Creates a new instance of Stop
56 */
57 public ClipPath()
58 {
59 }
60
61 @Override
62 public String getTagName()
63 {
64 return TAG_NAME;
65 }
66
67 /**
68 * Called after the start element but before the end element to indicate
69 * each child tag that has been processed
70 */
71 @Override
72 public void loaderAddChild(SVGLoaderHelper helper, SVGElement child) throws SVGElementException
73 {
74 super.loaderAddChild(helper, child);
75 }
76
77 @Override
78 protected void build() throws SVGException
79 {
80 super.build();
81
82 StyleAttribute sty = new StyleAttribute();
83
84 clipPathUnits = (getPres(sty.setName("clipPathUnits"))
85 && sty.getStringValue().equals("objectBoundingBox"))
86 ? CP_OBJECT_BOUNDING_BOX
87 : CP_USER_SPACE_ON_USE;
88 }
89
90 public int getClipPathUnits()
91 {
92 return clipPathUnits;
93 }
94
95 public Shape getClipPathShape()
96 {
97 if (children.isEmpty())
98 {
99 return null;
100 }
101 if (children.size() == 1)
102 {
103 return ((ShapeElement) children.get(0)).getShape();
104 }
105
106 Area clipArea = null;
107 for (SVGElement svgElement : children) {
108 ShapeElement se = (ShapeElement) svgElement;
109
110 if (clipArea == null)
111 {
112 Shape shape = se.getShape();
113 if (shape != null)
114 {
115 clipArea = new Area(se.getShape());
116 }
117 continue;
118 }
119
120 Shape shape = se.getShape();
121 if (shape != null)
122 {
123 clipArea.intersect(new Area(shape));
124 }
125 }
126
127 return clipArea;
128 }
129
130 /**
131 * Updates all attributes in this diagram associated with a time event. Ie,
132 * all attributes with track information.
133 *
134 * @param curTime Time at which to evaluate node
135 * @return - true if this node has changed state as a result of the time
136 * update
137 * @throws com.kitfox.svg.SVGException
138 */
139 @Override
140 public boolean updateTime(double curTime) throws SVGException
141 {
142 //Get current values for parameters
143 StyleAttribute sty = new StyleAttribute();
144 boolean shapeChange = false;
145
146
147 if (getPres(sty.setName("clipPathUnits")))
148 {
149 String newUnitsStrn = sty.getStringValue();
150 int newUnits = newUnitsStrn.equals("objectBoundingBox")
151 ? CP_OBJECT_BOUNDING_BOX
152 : CP_USER_SPACE_ON_USE;
153
154 if (newUnits != clipPathUnits)
155 {
156 clipPathUnits = newUnits;
157 shapeChange = true;
158 }
159 }
160
161 if (shapeChange)
162 {
163 build();
164 }
165
166 for (int i = 0; i < children.size(); ++i)
167 {
168 SVGElement ele = (SVGElement) children.get(i);
169 ele.updateTime(curTime);
170 }
171
172 return shapeChange;
173 }
174}
Note: See TracBrowser for help on using the repository browser.