Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/share/classes/sun/awt/LightweightFrame.java
41152 views
1
/*
2
* Copyright (c) 2013, 2016, 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
@SuppressWarnings("deprecation")
92
@Override public void addNotify() {
93
synchronized (getTreeLock()) {
94
if (!isDisplayable()) {
95
SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
96
try {
97
setPeer(stk.createLightweightFrame(this));
98
} catch (Exception e) {
99
throw new RuntimeException(e);
100
}
101
}
102
super.addNotify();
103
}
104
}
105
106
private void setPeer(final FramePeer p) {
107
AWTAccessor.getComponentAccessor().setPeer(this, p);
108
}
109
110
/**
111
* Requests the peer to emulate activation or deactivation of the
112
* frame. Peers should override this method if they are to implement
113
* this functionality.
114
*
115
* @param activate if {@code true}, activates the frame;
116
* otherwise, deactivates the frame
117
*/
118
public void emulateActivation(boolean activate) {
119
final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
120
peer.emulateActivation(activate);
121
}
122
123
/**
124
* Delegates the focus grab action to the client (embedding) application.
125
* The method is called by the AWT grab machinery.
126
*
127
* @see SunToolkit#grab(java.awt.Window)
128
*/
129
public abstract void grabFocus();
130
131
/**
132
* Delegates the focus ungrab action to the client (embedding) application.
133
* The method is called by the AWT grab machinery.
134
*
135
* @see SunToolkit#ungrab(java.awt.Window)
136
*/
137
public abstract void ungrabFocus();
138
139
/**
140
* Returns the scale factor of this frame. The default value is 1.
141
*
142
* @return the scale factor
143
* @see #notifyDisplayChanged(int)
144
* @Depricated replaced by {@link #getScaleFactorX()} and
145
* {@link #getScaleFactorY}
146
*/
147
@Deprecated(since = "9")
148
public abstract int getScaleFactor();
149
150
/**
151
* Returns the scale factor of this frame along x coordinate. The default
152
* value is 1.
153
*
154
* @return the x coordinate scale factor
155
* @see #notifyDisplayChanged(double, double)
156
* @since 9
157
*/
158
public abstract double getScaleFactorX();
159
160
/**
161
* Returns the scale factor of this frame along y coordinate. The default
162
* value is 1.
163
*
164
* @return the y coordinate scale factor
165
* @see #notifyDisplayChanged(double, double)
166
* @since 9
167
*/
168
public abstract double getScaleFactorY();
169
170
/**
171
* Called when display of the hosted frame is changed.
172
*
173
* @param scaleFactor the scale factor
174
* @Depricated replaced by {@link #notifyDisplayChanged(double, double)}
175
*/
176
@Deprecated(since = "9")
177
public abstract void notifyDisplayChanged(int scaleFactor);
178
179
/**
180
* Called when display of the hosted frame is changed.
181
*
182
* @param scaleFactorX the scale factor
183
* @param scaleFactorY the scale factor
184
* @since 9
185
*/
186
public abstract void notifyDisplayChanged(double scaleFactorX,
187
double scaleFactorY);
188
189
/**
190
* Host window absolute bounds.
191
*/
192
private int hostX, hostY, hostW, hostH;
193
194
/**
195
* Returns the absolute bounds of the host (embedding) window.
196
*
197
* @return the host window bounds
198
*/
199
public Rectangle getHostBounds() {
200
if (hostX == 0 && hostY == 0 && hostW == 0 && hostH == 0) {
201
// The client app is probably unaware of the setHostBounds.
202
// A safe fall-back:
203
return getBounds();
204
}
205
return new Rectangle(hostX, hostY, hostW, hostH);
206
}
207
208
/**
209
* Sets the absolute bounds of the host (embedding) window.
210
*/
211
public void setHostBounds(int x, int y, int w, int h) {
212
hostX = x;
213
hostY = y;
214
hostW = w;
215
hostH = h;
216
}
217
218
/**
219
* Create a drag gesture recognizer for the lightweight frame.
220
*/
221
public abstract <T extends DragGestureRecognizer> T createDragGestureRecognizer(
222
Class<T> abstractRecognizerClass,
223
DragSource ds, Component c, int srcActions,
224
DragGestureListener dgl);
225
226
/**
227
* Create a drag source context peer for the lightweight frame.
228
*/
229
public abstract DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException;
230
231
/**
232
* Adds a drop target to the lightweight frame.
233
*/
234
public abstract void addDropTarget(DropTarget dt);
235
236
/**
237
* Removes a drop target from the lightweight frame.
238
*/
239
public abstract void removeDropTarget(DropTarget dt);
240
241
}
242
243