Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Fonts/Outline.java
41175 views
1
/*
2
*
3
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* - Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* - Neither the name of Oracle nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
package java2d.demos.Fonts;
33
34
35
import static java.awt.Color.BLACK;
36
import static java.awt.Color.BLUE;
37
import static java.awt.Color.GREEN;
38
import static java.awt.Color.MAGENTA;
39
import static java.awt.Color.RED;
40
import static java.awt.Color.WHITE;
41
import java.awt.BasicStroke;
42
import java.awt.Font;
43
import java.awt.Graphics2D;
44
import java.awt.Shape;
45
import java.awt.font.FontRenderContext;
46
import java.awt.font.TextAttribute;
47
import java.awt.font.TextLayout;
48
import java.awt.geom.AffineTransform;
49
import java.text.AttributedCharacterIterator;
50
import java.text.AttributedString;
51
import java2d.Surface;
52
53
54
/**
55
* Rendering text as an outline shape.
56
*/
57
@SuppressWarnings("serial")
58
public class Outline extends Surface {
59
60
public Outline() {
61
setBackground(WHITE);
62
}
63
64
@Override
65
public void render(int w, int h, Graphics2D g2) {
66
67
FontRenderContext frc = g2.getFontRenderContext();
68
Font f = new Font(Font.SANS_SERIF, Font.PLAIN, w / 8);
69
Font f1 = new Font(Font.SANS_SERIF, Font.ITALIC, w / 8);
70
String s = "AttributedString";
71
AttributedString as = new AttributedString(s);
72
as.addAttribute(TextAttribute.FONT, f, 0, 10);
73
as.addAttribute(TextAttribute.FONT, f1, 10, s.length());
74
AttributedCharacterIterator aci = as.getIterator();
75
TextLayout tl = new TextLayout(aci, frc);
76
float sw = (float) tl.getBounds().getWidth();
77
float sh = (float) tl.getBounds().getHeight();
78
Shape sha = tl.getOutline(AffineTransform.getTranslateInstance(w / 2 - sw
79
/ 2, h * 0.2 + sh / 2));
80
g2.setColor(BLUE);
81
g2.setStroke(new BasicStroke(1.5f));
82
g2.draw(sha);
83
g2.setColor(MAGENTA);
84
g2.fill(sha);
85
86
f = new Font(Font.SERIF, Font.BOLD, w / 6);
87
tl = new TextLayout("Outline", f, frc);
88
sw = (float) tl.getBounds().getWidth();
89
sh = (float) tl.getBounds().getHeight();
90
sha = tl.getOutline(AffineTransform.getTranslateInstance(w / 2 - sw / 2, h
91
* 0.5 + sh / 2));
92
g2.setColor(BLACK);
93
g2.draw(sha);
94
g2.setColor(RED);
95
g2.fill(sha);
96
97
f = new Font(Font.SANS_SERIF, Font.ITALIC, w / 8);
98
AffineTransform fontAT = new AffineTransform();
99
fontAT.shear(-0.2, 0.0);
100
Font derivedFont = f.deriveFont(fontAT);
101
tl = new TextLayout("Italic-Shear", derivedFont, frc);
102
sw = (float) tl.getBounds().getWidth();
103
sh = (float) tl.getBounds().getHeight();
104
sha = tl.getOutline(AffineTransform.getTranslateInstance(w / 2 - sw / 2, h
105
* 0.80f + sh / 2));
106
g2.setColor(GREEN);
107
g2.draw(sha);
108
g2.setColor(BLACK);
109
g2.fill(sha);
110
}
111
112
public static void main(String[] s) {
113
createDemoFrame(new Outline());
114
}
115
}
116
117