1 /*
2  * Copyright (c) 2011, 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 
27 package sun.lwawt.macosx;
28 
29 import java.awt.Insets;
30 
31 import sun.lwawt.PlatformComponent;
32 import sun.lwawt.PlatformWindow;
33 
34 /**
35  * On OSX {@code CPlatformComponent} stores pointer to the native CAlayer which
36  * can be used from JAWT.
37  */
38 class CPlatformComponent extends CFRetainedResource
39         implements PlatformComponent {
40 
41     private volatile PlatformWindow platformWindow;
42 
CPlatformComponent()43     CPlatformComponent() {
44         super(0, true);
45     }
46 
47     /**
48      * Used by JAWT.
49      */
getPointer()50     public long getPointer() {
51         return ptr;
52     }
53 
54     @Override
initialize(final PlatformWindow platformWindow)55     public void initialize(final PlatformWindow platformWindow) {
56         this.platformWindow = platformWindow;
57         setPtr(nativeCreateComponent(platformWindow.getLayerPtr()));
58     }
59 
60     // TODO: visibility, z-order
61 
62     @Override
setBounds(final int x, final int y, final int w, final int h)63     public void setBounds(final int x, final int y, final int w, final int h) {
64         // translates values from the coordinate system of the top-level window
65         // to the coordinate system of the content view
66         final Insets insets = platformWindow.getPeer().getInsets();
67         execute(ptr->nativeSetBounds(ptr, x - insets.left, y - insets.top, w, h));
68     }
69 
70     @Override
dispose()71     public void dispose() {
72         super.dispose();
73     }
74 
nativeCreateComponent(long windowLayer)75     private native long nativeCreateComponent(long windowLayer);
76 
nativeSetBounds(long ptr, int x, int y, int w, int h)77     private native void nativeSetBounds(long ptr, int x, int y, int w, int h);
78 }
79