source: josm/trunk/src/com/kitfox/svg/FontFace.java@ 6890

Last change on this file since 6890 was 6002, checked in by Don-vip, 11 years ago

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

File size: 6.3 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 February 20, 2004, 10:00 PM
35 */
36package com.kitfox.svg;
37
38import com.kitfox.svg.xml.StyleAttribute;
39
40/**
41 * Implements an embedded font.
42 *
43 * SVG specification: http://www.w3.org/TR/SVG/fonts.html
44 *
45 * @author Mark McKay
46 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>
47 */
48public class FontFace extends SVGElement
49{
50
51 public static final String TAG_NAME = "fontface";
52 String fontFamily;
53 /**
54 * Em size of coordinate system font is defined in
55 */
56 int unitsPerEm = 1000;
57 int ascent = -1;
58 int descent = -1;
59 int accentHeight = -1;
60 int underlinePosition = -1;
61 int underlineThickness = -1;
62 int strikethroughPosition = -1;
63 int strikethroughThickness = -1;
64 int overlinePosition = -1;
65 int overlineThickness = -1;
66
67 /**
68 * Creates a new instance of Font
69 */
70 public FontFace()
71 {
72 }
73
74 public String getTagName()
75 {
76 return TAG_NAME;
77 }
78
79 protected void build() throws SVGException
80 {
81 super.build();
82
83 StyleAttribute sty = new StyleAttribute();
84
85 if (getPres(sty.setName("font-family")))
86 {
87 fontFamily = sty.getStringValue();
88 }
89
90 if (getPres(sty.setName("units-per-em")))
91 {
92 unitsPerEm = sty.getIntValue();
93 }
94 if (getPres(sty.setName("ascent")))
95 {
96 ascent = sty.getIntValue();
97 }
98 if (getPres(sty.setName("descent")))
99 {
100 descent = sty.getIntValue();
101 }
102 if (getPres(sty.setName("accent-height")))
103 {
104 accentHeight = sty.getIntValue();
105 }
106
107 if (getPres(sty.setName("underline-position")))
108 {
109 underlinePosition = sty.getIntValue();
110 }
111 if (getPres(sty.setName("underline-thickness")))
112 {
113 underlineThickness = sty.getIntValue();
114 }
115 if (getPres(sty.setName("strikethrough-position")))
116 {
117 strikethroughPosition = sty.getIntValue();
118 }
119 if (getPres(sty.setName("strikethrough-thickenss")))
120 {
121 strikethroughThickness = sty.getIntValue();
122 }
123 if (getPres(sty.setName("overline-position")))
124 {
125 overlinePosition = sty.getIntValue();
126 }
127 if (getPres(sty.setName("overline-thickness")))
128 {
129 overlineThickness = sty.getIntValue();
130 }
131 }
132
133 public String getFontFamily()
134 {
135 return fontFamily;
136 }
137
138 public int getUnitsPerEm()
139 {
140 return unitsPerEm;
141 }
142
143 public int getAscent()
144 {
145 if (ascent == -1)
146 {
147 ascent = unitsPerEm - ((Font) parent).getVertOriginY();
148 }
149 return ascent;
150 }
151
152 public int getDescent()
153 {
154 if (descent == -1)
155 {
156 descent = ((Font) parent).getVertOriginY();
157 }
158 return descent;
159 }
160
161 public int getAccentHeight()
162 {
163 if (accentHeight == -1)
164 {
165 accentHeight = getAscent();
166 }
167 return accentHeight;
168 }
169
170 public int getUnderlinePosition()
171 {
172 if (underlinePosition == -1)
173 {
174 underlinePosition = unitsPerEm * 5 / 6;
175 }
176 return underlinePosition;
177 }
178
179 public int getUnderlineThickness()
180 {
181 if (underlineThickness == -1)
182 {
183 underlineThickness = unitsPerEm / 20;
184 }
185 return underlineThickness;
186 }
187
188 public int getStrikethroughPosition()
189 {
190 if (strikethroughPosition == -1)
191 {
192 strikethroughPosition = unitsPerEm * 3 / 6;
193 }
194 return strikethroughPosition;
195 }
196
197 public int getStrikethroughThickness()
198 {
199 if (strikethroughThickness == -1)
200 {
201 strikethroughThickness = unitsPerEm / 20;
202 }
203 return strikethroughThickness;
204 }
205
206 public int getOverlinePosition()
207 {
208 if (overlinePosition == -1)
209 {
210 overlinePosition = unitsPerEm * 5 / 6;
211 }
212 return overlinePosition;
213 }
214
215 public int getOverlineThickness()
216 {
217 if (overlineThickness == -1)
218 {
219 overlineThickness = unitsPerEm / 20;
220 }
221 return overlineThickness;
222 }
223
224 /**
225 * Updates all attributes in this diagram associated with a time event. Ie,
226 * all attributes with track information.
227 *
228 * @return - true if this node has changed state as a result of the time
229 * update
230 */
231 public boolean updateTime(double curTime)
232 {
233 //Fonts can't change
234 return false;
235 }
236}
Note: See TracBrowser for help on using the repository browser.