7172187: [macosx] JAWT native CALayer not positioned over Canvas
Reviewed-by: art, anthony
This commit is contained in:
parent
741d368217
commit
6db39dc542
@ -282,7 +282,7 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
|
||||
* Note that we call setVisible() at the end of initialization.
|
||||
*/
|
||||
public final void initialize() {
|
||||
platformComponent.initialize(target, this, getPlatformWindow());
|
||||
platformComponent.initialize(getPlatformWindow());
|
||||
initializeImpl();
|
||||
setVisible(target.isVisible());
|
||||
}
|
||||
|
@ -23,15 +23,38 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
|
||||
package sun.lwawt;
|
||||
|
||||
import java.awt.Component;
|
||||
|
||||
/**
|
||||
* Can be used to store information about native resource related to the
|
||||
* lightweight component.
|
||||
*/
|
||||
public interface PlatformComponent {
|
||||
|
||||
public void initialize(Component target, LWComponentPeer peer, PlatformWindow platformWindow);
|
||||
/**
|
||||
* Initializes platform component.
|
||||
*
|
||||
* @param platformWindow already initialized {@code PlatformWindow}.
|
||||
*/
|
||||
void initialize(PlatformWindow platformWindow);
|
||||
|
||||
public void setBounds(int x, int y, int w, int h);
|
||||
/**
|
||||
* Moves and resizes this component. The new location of the top-left corner
|
||||
* is specified by {@code x} and {@code y}, and the new size is specified by
|
||||
* {@code w} and {@code h}. The location is specified relative to the {@code
|
||||
* platformWindow}.
|
||||
*
|
||||
* @param x the X location of the component
|
||||
* @param y the Y location of the component
|
||||
* @param w the width of the component
|
||||
* @param h the height of the component
|
||||
*/
|
||||
void setBounds(int x, int y, int w, int h);
|
||||
|
||||
public void dispose();
|
||||
/**
|
||||
* Releases all of the native resources used by this {@code
|
||||
* PlatformComponent}.
|
||||
*/
|
||||
void dispose();
|
||||
}
|
||||
|
@ -33,8 +33,8 @@ package sun.lwawt.macosx;
|
||||
public class CFRetainedResource {
|
||||
private static native void nativeCFRelease(final long ptr, final boolean disposeOnAppKitThread);
|
||||
|
||||
final boolean disposeOnAppKitThread;
|
||||
protected long ptr;
|
||||
private final boolean disposeOnAppKitThread;
|
||||
protected volatile long ptr;
|
||||
|
||||
/**
|
||||
* @param ptr CFRetained native object pointer
|
||||
|
@ -23,27 +23,24 @@
|
||||
* questions.
|
||||
*/
|
||||
|
||||
|
||||
package sun.lwawt.macosx;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Insets;
|
||||
|
||||
import sun.lwawt.PlatformComponent;
|
||||
import sun.lwawt.PlatformWindow;
|
||||
import sun.lwawt.LWComponentPeer;
|
||||
|
||||
import sun.lwawt.macosx.CFRetainedResource;
|
||||
/**
|
||||
* On OSX {@code CPlatformComponent} stores pointer to the native CAlayer which
|
||||
* can be used from JAWT.
|
||||
*/
|
||||
final class CPlatformComponent extends CFRetainedResource
|
||||
implements PlatformComponent {
|
||||
|
||||
public class CPlatformComponent extends CFRetainedResource implements PlatformComponent {
|
||||
private volatile PlatformWindow platformWindow;
|
||||
|
||||
Component target;
|
||||
LWComponentPeer peer;
|
||||
PlatformWindow platformWindow;
|
||||
|
||||
private native long nativeCreateComponent(long windowLayer);
|
||||
private native long nativeSetBounds(long ptr, int x, int y, int width, int height);
|
||||
|
||||
public CPlatformComponent() {
|
||||
CPlatformComponent() {
|
||||
super(0, true);
|
||||
}
|
||||
|
||||
@ -51,27 +48,28 @@ public class CPlatformComponent extends CFRetainedResource implements PlatformCo
|
||||
return ptr;
|
||||
}
|
||||
|
||||
public void initialize(Component target, LWComponentPeer peer, PlatformWindow platformWindow) {
|
||||
this.target = target;
|
||||
this.peer = peer;
|
||||
@Override
|
||||
public void initialize(final PlatformWindow platformWindow) {
|
||||
this.platformWindow = platformWindow;
|
||||
|
||||
long windowLayerPtr = platformWindow.getLayerPtr();
|
||||
setPtr(nativeCreateComponent(windowLayerPtr));
|
||||
setPtr(nativeCreateComponent(platformWindow.getLayerPtr()));
|
||||
}
|
||||
|
||||
// TODO: visibility, z-order
|
||||
|
||||
@Override
|
||||
public void setBounds(int x, int y, int width, int height) {
|
||||
public void setBounds(final int x, final int y, final int w, final int h) {
|
||||
// translates values from the coordinate system of the top-level window
|
||||
// to the coordinate system of the content view
|
||||
Insets insets = platformWindow.getPeer().getInsets();
|
||||
nativeSetBounds(getPointer(), x - insets.left, y - insets.top, width, height);
|
||||
final Insets insets = platformWindow.getPeer().getInsets();
|
||||
nativeSetBounds(getPointer(), x - insets.left, y - insets.top, w, h);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
private native long nativeCreateComponent(long windowLayer);
|
||||
|
||||
private native void nativeSetBounds(long ptr, int x, int y, int w, int h);
|
||||
}
|
||||
|
@ -78,11 +78,10 @@
|
||||
|
||||
// translates values to the coordinate system of the "root" layer
|
||||
CGFloat newY = windowLayer.bounds.size.height - rect.origin.y - rect.size.height;
|
||||
CGRect newRect = CGRectMake(rect.origin.x, newY, rect.size.width, rect.size.height);
|
||||
|
||||
// REMIND: why do we need to inverse position?
|
||||
CGRect newRect = CGRectMake(-rect.origin.x, -newY, rect.size.width, rect.size.height);
|
||||
layer.frame = newRect;
|
||||
|
||||
layer.bounds = newRect;
|
||||
[AWTSurfaceLayers repaintLayersRecursively:layer];
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user