Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/test/javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java
38853 views
1
/*
2
* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import javax.swing.*;
25
import java.awt.*;
26
import java.awt.event.ComponentAdapter;
27
import java.awt.event.ComponentEvent;
28
import java.awt.event.MouseAdapter;
29
import java.awt.event.MouseEvent;
30
import java.awt.geom.Area;
31
import java.awt.geom.GeneralPath;
32
import java.awt.geom.Rectangle2D;
33
34
/*
35
* @test
36
* @summary Check if a window set with shape clips the contents
37
* Test Description: Check if PERPIXEL_TRANSPARENT translucency type is supported
38
* by the current platform. Proceed if it is supported. Apply different types
39
* of shapes on a Window which contains some awt components. Shape should be
40
* applied in such a way that some components are partially clipped off. Check
41
* if the components appear only partially and events work correctly for those
42
* components - i.e. events occur only on the areas which appear and do not
43
* occur on the clipped off areas. Events should be checked by clicking on the
44
* visible and clipped regions. Repeat this for Window, Dialog and Frame.
45
* Expected Result: If PERPIXEL_TRANSPARENT translucency type is supported, clicking
46
* on clipped region should deliver the event to the background (it should be
47
* another Window behind the test window)
48
* @author mrkam
49
* @library ../../../../lib/testlibrary
50
* @build Common ExtendedRobot
51
* @run main SetShapeAndClickSwing
52
*/
53
54
public class SetShapeAndClickSwing extends Common {
55
56
Component south, center, north;
57
58
public static void main(String[] args) throws Exception {
59
if (checkTranslucencyMode(GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT))
60
for (Class<Window> windowClass: WINDOWS_TO_TEST)
61
new SetShapeAndClickSwing(windowClass).doTest();
62
}
63
64
public SetShapeAndClickSwing(Class windowClass) throws Exception {
65
super(windowClass);
66
}
67
68
@Override
69
public void initBackgroundFrame() {
70
super.initBackgroundFrame();
71
background.addMouseListener(new MouseAdapter() {
72
@Override
73
public void mouseClicked(MouseEvent e) {
74
clicked |= 1 << 0;
75
}
76
});
77
}
78
79
@Override
80
public void createSwingComponents() {
81
window.setSize(200,200);
82
window.setLayout(new BorderLayout());
83
84
south = new JLabel("South");
85
south.addMouseListener(new MouseAdapter() {
86
@Override
87
public void mouseClicked(MouseEvent e) {
88
clicked |= 1 << 3;
89
}
90
});
91
window.add(south, BorderLayout.SOUTH);
92
93
center = new JList();
94
center.addMouseListener(new MouseAdapter() {
95
@Override
96
public void mouseClicked(MouseEvent e) {
97
clicked |= 1 << 2;
98
}
99
});
100
window.add(center, BorderLayout.CENTER);
101
102
north = new JTextField("North");
103
north.addMouseListener(new MouseAdapter() {
104
@Override
105
public void mouseClicked(MouseEvent e) {
106
clicked |= 1 << 1;
107
}
108
});
109
window.add(north, BorderLayout.NORTH);
110
}
111
112
@Override
113
public void doTest() throws Exception {
114
115
robot.waitForIdle();
116
117
Point wls = window.getLocationOnScreen();
118
Point ls;
119
int y;
120
ls = north.getLocationOnScreen();
121
checkClick(ls.x + north.getWidth() / 3, ls.y + north.getHeight() / 2, 1);
122
123
ls = center.getLocationOnScreen();
124
checkClick(ls.x + center.getWidth() * 3 / 4, ls.y + center.getHeight() * 3 / 4, 2);
125
126
ls = south.getLocationOnScreen();
127
checkClick(ls.x + south.getWidth() * 2 / 3, ls.y + south.getHeight() / 2, 3);
128
129
ls = center.getLocationOnScreen();
130
checkClick(ls.x + center.getWidth() / 4, ls.y + center.getHeight() / 4, 2);
131
132
ls = north.getLocationOnScreen();
133
y = ls.y + north.getHeight() / 2;
134
checkClick(wls.x + 200 - (y - wls.y), y, 0);
135
136
EventQueue.invokeAndWait(window::toFront);
137
robot.waitForIdle();
138
139
ls = center.getLocationOnScreen();
140
y = ls.y + center.getHeight() / 2;
141
checkClick(wls.x + 200 - (y - wls.y), y, 0);
142
143
EventQueue.invokeAndWait(window::toFront);
144
robot.waitForIdle();
145
146
ls = south.getLocationOnScreen();
147
y = ls.y + south.getHeight() / 2;
148
checkClick(wls.x + 200 - (y - wls.y), y, 0);
149
150
EventQueue.invokeAndWait(window::dispose);
151
EventQueue.invokeAndWait(background::dispose);
152
153
robot.waitForIdle();
154
}
155
156
@Override
157
public void applyShape() {
158
Area shape = new Area(new Rectangle2D.Float(0, 0, 200, 200));
159
GeneralPath gp;
160
gp = new GeneralPath();
161
gp.moveTo(190, 0);
162
gp.lineTo(200, 0);
163
gp.lineTo(200, 10);
164
gp.lineTo(10, 200);
165
gp.lineTo(0, 200);
166
gp.lineTo(0, 190);
167
gp.closePath();
168
shape.subtract(new Area(gp));
169
170
window.setShape(shape);
171
}
172
}
173
174