Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/share/classes/sun/awt/LightweightFrame.java
38827 views
1
/*
2
* Copyright (c) 2013, 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. Oracle designates this
8
* particular file as subject to the "Classpath" exception as provided
9
* by Oracle in the LICENSE file that accompanied this code.
10
*
11
* This code is distributed in the hope that it will be useful, but WITHOUT
12
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14
* version 2 for more details (a copy is included in the LICENSE file that
15
* accompanied this code).
16
*
17
* You should have received a copy of the GNU General Public License version
18
* 2 along with this work; if not, write to the Free Software Foundation,
19
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20
*
21
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22
* or visit www.oracle.com if you need additional information or have any
23
* questions.
24
*/
25
26
package sun.awt;
27
28
import java.awt.Component;
29
import java.awt.Container;
30
import java.awt.Frame;
31
import java.awt.Graphics;
32
import java.awt.Image;
33
import java.awt.MenuBar;
34
import java.awt.MenuComponent;
35
import java.awt.Rectangle;
36
import java.awt.Toolkit;
37
import java.awt.dnd.DragGestureEvent;
38
import java.awt.dnd.DragGestureListener;
39
import java.awt.dnd.DragGestureRecognizer;
40
import java.awt.dnd.DragSource;
41
import java.awt.dnd.DropTarget;
42
import java.awt.dnd.InvalidDnDOperationException;
43
import java.awt.dnd.peer.DragSourceContextPeer;
44
import java.awt.peer.FramePeer;
45
46
/**
47
* The class provides basic functionality for a lightweight frame
48
* implementation. A subclass is expected to provide painting to an
49
* offscreen image and access to it. Thus it can be used for lightweight
50
* embedding.
51
*
52
* @author Artem Ananiev
53
* @author Anton Tarasov
54
*/
55
@SuppressWarnings("serial")
56
public abstract class LightweightFrame extends Frame {
57
58
/**
59
* Constructs a new, initially invisible {@code LightweightFrame}
60
* instance.
61
*/
62
public LightweightFrame() {
63
setUndecorated(true);
64
setResizable(true);
65
setEnabled(true);
66
}
67
68
/**
69
* Blocks introspection of a parent window by this child.
70
*
71
* @return null
72
*/
73
@Override public final Container getParent() { return null; }
74
75
@Override public Graphics getGraphics() { return null; }
76
77
@Override public final boolean isResizable() { return true; }
78
79
// Block modification of any frame attributes, since they aren't
80
// applicable for a lightweight frame.
81
82
@Override public final void setTitle(String title) {}
83
@Override public final void setIconImage(Image image) {}
84
@Override public final void setIconImages(java.util.List<? extends Image> icons) {}
85
@Override public final void setMenuBar(MenuBar mb) {}
86
@Override public final void setResizable(boolean resizable) {}
87
@Override public final void remove(MenuComponent m) {}
88
@Override public final void toFront() {}
89
@Override public final void toBack() {}
90
91
@Override public void addNotify() {
92
synchronized (getTreeLock()) {
93
if (getPeer() == null) {
94
SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
95
try {
96
setPeer(stk.createLightweightFrame(this));
97
} catch (Exception e) {
98
throw new RuntimeException(e);
99
}
100
}
101
super.addNotify();
102
}
103
}
104
105
private void setPeer(final FramePeer p) {
106
AWTAccessor.getComponentAccessor().setPeer(this, p);
107
}
108
109
/**
110
* Requests the peer to emulate activation or deactivation of the
111
* frame. Peers should override this method if they are to implement
112
* this functionality.
113
*
114
* @param activate if <code>true</code>, activates the frame;
115
* otherwise, deactivates the frame
116
*/
117
public void emulateActivation(boolean activate) {
118
((FramePeer)getPeer()).emulateActivation(activate);
119
}
120
121
/**
122
* Delegates the focus grab action to the client (embedding) application.
123
* The method is called by the AWT grab machinery.
124
*
125
* @see SunToolkit#grab(java.awt.Window)
126
*/
127
public abstract void grabFocus();
128
129
/**
130
* Delegates the focus ungrab action to the client (embedding) application.
131
* The method is called by the AWT grab machinery.
132
*
133
* @see SunToolkit#ungrab(java.awt.Window)
134
*/
135
public abstract void ungrabFocus();
136
137
/**
138
* Returns the scale factor of this frame. The default value is 1.
139
*
140
* @return the scale factor
141
* @see #notifyDisplayChanged(int)
142
*/
143
public abstract int getScaleFactor();
144
145
/**
146
* Called when display of the hosted frame is changed.
147
*
148
* @param scaleFactor the scale factor
149
*/
150
public abstract void notifyDisplayChanged(int scaleFactor);
151
152
/**
153
* Host window absolute bounds.
154
*/
155
private int hostX, hostY, hostW, hostH;
156
157
/**
158
* Returns the absolute bounds of the host (embedding) window.
159
*
160
* @return the host window bounds
161
*/
162
public Rectangle getHostBounds() {
163
if (hostX == 0 && hostY == 0 && hostW == 0 && hostH == 0) {
164
// The client app is probably unaware of the setHostBounds.
165
// A safe fall-back:
166
return getBounds();
167
}
168
return new Rectangle(hostX, hostY, hostW, hostH);
169
}
170
171
/**
172
* Sets the absolute bounds of the host (embedding) window.
173
*/
174
public void setHostBounds(int x, int y, int w, int h) {
175
hostX = x;
176
hostY = y;
177
hostW = w;
178
hostH = h;
179
}
180
181
/**
182
* Create a drag gesture recognizer for the lightweight frame.
183
*/
184
public abstract <T extends DragGestureRecognizer> T createDragGestureRecognizer(
185
Class<T> abstractRecognizerClass,
186
DragSource ds, Component c, int srcActions,
187
DragGestureListener dgl);
188
189
/**
190
* Create a drag source context peer for the lightweight frame.
191
*/
192
public abstract DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException;
193
194
/**
195
* Adds a drop target to the lightweight frame.
196
*/
197
public abstract void addDropTarget(DropTarget dt);
198
199
/**
200
* Removes a drop target from the lightweight frame.
201
*/
202
public abstract void removeDropTarget(DropTarget dt);
203
}
204
205