Print this page
Added gradle and cmake project

@@ -31,10 +31,13 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
 import sun.awt.CGraphicsConfig;
 import sun.awt.CGraphicsEnvironment;
+import sun.java2d.macos.MacOSFlags;
+import sun.java2d.metal.MTLLayer;
+import sun.java2d.metal.MTLSurfaceData;
 import sun.lwawt.LWWindowPeer;
 
 import sun.java2d.SurfaceData;
 import sun.java2d.opengl.CGLLayer;
 import sun.java2d.opengl.CGLSurfaceData;

@@ -46,30 +49,35 @@
     private static native Rectangle2D nativeGetLocationOnScreen(long awtView);
     private static native boolean nativeIsViewUnderMouse(long ptr);
 
     private LWWindowPeer peer;
     private SurfaceData surfaceData;
-    private CGLLayer windowLayer;
+    private CFRetainedResource windowLayer;
     private CPlatformResponder responder;
 
     public CPlatformView() {
         super(0, true);
     }
 
     public void initialize(LWWindowPeer peer, CPlatformResponder responder) {
         initializeBase(peer, responder);
 
         if (!LWCToolkit.getSunAwtDisableCALayers()) {
-            this.windowLayer = createCGLayer();
+            this.windowLayer = MacOSFlags.isMetalEnabled()? createMTLLayer() : createCGLayer();
         }
         setPtr(nativeCreateView(0, 0, 0, 0, getWindowLayerPtr()));
     }
 
     public CGLLayer createCGLayer() {
         return new CGLLayer(peer);
     }
 
+    public MTLLayer createMTLLayer() {
+        return new MTLLayer(peer);
+    }
+
+
     protected void initializeBase(LWWindowPeer peer, CPlatformResponder responder) {
         this.peer = peer;
         this.responder = responder;
     }
 

@@ -105,11 +113,14 @@
     // ----------------------------------------------------------------------
     // PAINTING METHODS
     // ----------------------------------------------------------------------
     public SurfaceData replaceSurfaceData() {
         if (!LWCToolkit.getSunAwtDisableCALayers()) {
-            surfaceData = windowLayer.replaceSurfaceData();
+            surfaceData = (MacOSFlags.isMetalEnabled()) ?
+                    ((MTLLayer)windowLayer).replaceSurfaceData() :
+                    ((CGLLayer)windowLayer).replaceSurfaceData()
+            ;
         } else {
             if (surfaceData == null) {
                 CGraphicsConfig graphicsConfig = (CGraphicsConfig)getGraphicsConfiguration();
                 surfaceData = graphicsConfig.createSurfaceData(this);
             } else {

@@ -119,11 +130,15 @@
         return surfaceData;
     }
 
     private void validateSurface() {
         if (surfaceData != null) {
-            ((CGLSurfaceData)surfaceData).validate();
+            if (MacOSFlags.isMetalEnabled()) {
+                ((MTLSurfaceData) surfaceData).validate();
+            } else {
+                ((CGLSurfaceData) surfaceData).validate();
+            }
         }
     }
 
     public GraphicsConfiguration getGraphicsConfiguration() {
         return peer.getGraphicsConfiguration();

@@ -141,11 +156,13 @@
         super.dispose();
     }
 
     public long getWindowLayerPtr() {
         if (!LWCToolkit.getSunAwtDisableCALayers()) {
-            return windowLayer.getPointer();
+            return MacOSFlags.isMetalEnabled() ?
+                    ((MTLLayer)windowLayer).getPointer() :
+                    ((CGLLayer)windowLayer).getPointer();
         } else {
             return 0;
         }
     }