source: josm/trunk/src/com/kitfox/svg/util/FontSystem.java@ 14082

Last change on this file since 14082 was 11525, checked in by Don-vip, 8 years ago

see #14319 - update to latest version of svgSalamander (2017-01-07, patched)

  • Property svn:eol-style set to native
File size: 3.8 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 April 24, 2015
35 */
36package com.kitfox.svg.util;
37
38import com.kitfox.svg.Font;
39import com.kitfox.svg.FontFace;
40import com.kitfox.svg.Glyph;
41import com.kitfox.svg.MissingGlyph;
42import java.awt.Canvas;
43import java.awt.FontMetrics;
44import java.awt.font.FontRenderContext;
45import java.awt.font.GlyphMetrics;
46import java.awt.font.GlyphVector;
47import java.util.HashMap;
48
49/**
50 *
51 * @author kitfox
52 */
53public class FontSystem extends Font
54{
55 java.awt.Font sysFont;
56 FontMetrics fm;
57
58 HashMap<String, Glyph> glyphCache = new HashMap<String, Glyph>();
59
60 public FontSystem(String fontFamily, int fontStyle, int fontWeight, int fontSize)
61 {
62 int style;
63 switch (fontStyle)
64 {
65 case com.kitfox.svg.Text.TXST_ITALIC:
66 style = java.awt.Font.ITALIC;
67 break;
68 default:
69 style = java.awt.Font.PLAIN;
70 break;
71 }
72
73 int weight;
74 switch (fontWeight)
75 {
76 case com.kitfox.svg.Text.TXWE_BOLD:
77 case com.kitfox.svg.Text.TXWE_BOLDER:
78 weight = java.awt.Font.BOLD;
79 break;
80 default:
81 weight = java.awt.Font.PLAIN;
82 break;
83 }
84 sysFont = new java.awt.Font(fontFamily, style | weight, (int) fontSize);
85
86 Canvas c = new Canvas();
87 fm = c.getFontMetrics(sysFont);
88
89 FontFace face = new FontFace();
90 face.setAscent(fm.getAscent());
91 face.setDescent(fm.getDescent());
92 face.setUnitsPerEm(fm.charWidth('M'));
93 setFontFace(face);
94 }
95
96 @Override
97 public MissingGlyph getGlyph(String unicode)
98 {
99 FontRenderContext frc = new FontRenderContext(null, true, true);
100 GlyphVector vec = sysFont.createGlyphVector(frc, unicode);
101
102 Glyph glyph = (Glyph)glyphCache.get(unicode);
103 if (glyph == null)
104 {
105 glyph = new Glyph();
106 glyph.setPath(vec.getGlyphOutline(0));
107
108 GlyphMetrics gm = vec.getGlyphMetrics(0);
109 glyph.setHorizAdvX((int)gm.getAdvanceX());
110 glyph.setVertAdvY((int)gm.getAdvanceY());
111 glyph.setVertOriginX(0);
112 glyph.setVertOriginY(0);
113
114 glyphCache.put(unicode, glyph);
115 }
116
117 return glyph;
118 }
119
120
121}
Note: See TracBrowser for help on using the repository browser.