1 /*
2  * Copyright (c) 2013, 2017, 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.lwawt;
27 
28 import java.awt.Graphics;
29 import java.awt.Insets;
30 import java.awt.Point;
31 import java.awt.Rectangle;
32 import java.awt.Window;
33 import java.awt.dnd.DropTarget;
34 import java.awt.event.FocusEvent;
35 
36 import sun.awt.LightweightFrame;
37 import sun.awt.OverrideNativeWindowHandle;
38 import sun.swing.JLightweightFrame;
39 import sun.swing.SwingAccessor;
40 
41 public class LWLightweightFramePeer extends LWWindowPeer implements OverrideNativeWindowHandle {
42 
LWLightweightFramePeer(LightweightFrame target, PlatformComponent platformComponent, PlatformWindow platformWindow)43     public LWLightweightFramePeer(LightweightFrame target,
44                                   PlatformComponent platformComponent,
45                                   PlatformWindow platformWindow)
46     {
47         super(target, platformComponent, platformWindow, LWWindowPeer.PeerType.LW_FRAME);
48     }
49 
getLwTarget()50     private LightweightFrame getLwTarget() {
51         return (LightweightFrame)getTarget();
52     }
53 
54     @Override
getGraphics()55     public Graphics getGraphics() {
56         return getLwTarget().getGraphics();
57     }
58 
59     @Override
setVisibleImpl(final boolean visible)60     protected void setVisibleImpl(final boolean visible) {
61     }
62 
63     @Override
requestWindowFocus(FocusEvent.Cause cause)64     public boolean requestWindowFocus(FocusEvent.Cause cause) {
65         if (!focusAllowedFor()) {
66             return false;
67         }
68         if (getPlatformWindow().rejectFocusRequest(cause)) {
69             return false;
70         }
71 
72         Window opposite = LWKeyboardFocusManagerPeer.getInstance().
73             getCurrentFocusedWindow();
74 
75         changeFocusedWindow(true, opposite);
76 
77         return true;
78     }
79 
80     @Override
getLocationOnScreen()81     public Point getLocationOnScreen() {
82         Rectangle bounds = getBounds();
83         return new Point(bounds.x, bounds.y); // todo
84     }
85 
86     @Override
getInsets()87     public Insets getInsets() {
88         return new Insets(0, 0, 0, 0);
89     }
90 
91     @Override
setBounds(int x, int y, int w, int h, int op)92     public void setBounds(int x, int y, int w, int h, int op) {
93         setBounds(x, y, w, h, op, true, false);
94     }
95 
96     @Override
addDropTarget(DropTarget dt)97     public void addDropTarget(DropTarget dt) {
98         getLwTarget().addDropTarget(dt);
99     }
100 
101     @Override
removeDropTarget(DropTarget dt)102     public void removeDropTarget(DropTarget dt) {
103         getLwTarget().removeDropTarget(dt);
104     }
105 
106     @Override
grab()107     public void grab() {
108         getLwTarget().grabFocus();
109     }
110 
111     @Override
ungrab()112     public void ungrab() {
113         getLwTarget().ungrabFocus();
114     }
115 
116     @Override
updateCursorImmediately()117     public void updateCursorImmediately() {
118         SwingAccessor.getJLightweightFrameAccessor().updateCursor((JLightweightFrame)getLwTarget());
119     }
120 
121     // SwingNode
122     private volatile long overriddenWindowHandle = 0L;
123 
124     @Override
overrideWindowHandle(final long handle)125     public void overrideWindowHandle(final long handle) {
126         this.overriddenWindowHandle = handle;
127     }
128 
getOverriddenWindowHandle()129     public long getOverriddenWindowHandle() {
130         return overriddenWindowHandle;
131     }
132 }
133