--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/ImageSurfaceData.h Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+#import "QuartzSurfaceData.h"
+#import <pthread.h>
+
+typedef UInt8 Pixel8bit;
+typedef UInt16 Pixel16bit;
+typedef UInt32 Pixel32bit;
+
+typedef struct _ImageSDOps ImageSDOps;
+
+ImageSDOps* LockImage(JNIEnv* env, jobject imageSurfaceData);
+void UnlockImage(JNIEnv* env, ImageSDOps* isdo);
+ImageSDOps* LockImagePixels(JNIEnv* env, jobject imageSurfaceData);
+void UnlockImagePixels(JNIEnv* env, ImageSDOps* isdo);
+
+// if there is no image created for isdo.imgRef, it creates and image using the isdo.dataProvider
+// If there is an image present, this is a no-op
+void makeSureImageIsCreated(ImageSDOps* isdo);
+
+typedef struct _ContextInfo
+{
+ BOOL useWindowContextReference;
+ BOOL canUseJavaPixelsAsContext;
+ size_t bitsPerComponent;
+ size_t bytesPerPixel;
+ size_t bytesPerRow;
+ CGImageAlphaInfo alphaInfo;
+ CGColorSpaceRef colorSpace;
+} ContextInfo;
+
+typedef struct _ImageInfo
+{
+ size_t bitsPerComponent;
+ size_t bitsPerPixel;
+ size_t bytesPerPixel;
+ size_t bytesPerRow;
+ CGImageAlphaInfo alphaInfo;
+ CGColorSpaceRef colorSpace;
+} ImageInfo;
+
+struct _ImageSDOps
+{
+ QuartzSDOps qsdo; // must be the first entry!
+
+ ContextInfo contextInfo;
+ ImageInfo imageInfo;
+ BOOL isSubImage;
+
+ jint* javaImageInfo;
+
+ // parameters specifying this BufferedImage given to us from Java
+ jobject array;
+ jint offset;
+ jint width;
+ jint height;
+ jint javaPixelBytes;
+ jint javaPixelsBytesPerRow;
+ jobject icm;
+ jint type;
+
+ Pixel8bit* pixels;
+ Pixel8bit* pixelsLocked;
+
+ // needed by TYPE_BYTE_INDEXED
+ UInt16* indexedColorTable;
+ UInt32* lutData;
+ UInt32 lutDataSize;
+
+ // Used as a cached image ref created from the isdo.dataprovider. This is only a chached image, and it might become invalid
+ // if somebody draws on the bitmap context, or the pixels are changed in java. In that case, we need to NULL out
+ // this image and recreate it from the data provider.
+ CGImageRef imgRef;
+
+ // Cached instance of CGDataProvider. dataProvider is alloced the first time a bitmap context is created, providing the
+ // native pixels as a source of the data. The dataProviders life cycle is the same as ISDO. The reference gets
+ // released when we are done with the ISDO.
+ CGDataProviderRef dataProvider;
+
+ // Pointer in memory that is used for create the CGBitmapContext and the CGDataProvider (used for imgRef). This is a native
+ // copy of the pixels for the Image. There is a spearate copy of the pixels that lives in Java heap. There are two main
+ // reasons why we keep those pixels spearate: 1) CG doesn't support all the Java pixel formats 2) The Garbage collector can
+ // move the java pixels at any time. There are possible workarounds for both problems. Number 2) seems to be a more serious issue, since
+ // we can solve 1) by only supporting certain image types.
+ void * nativePixels;
+ NSGraphicsContext* nsRef;
+
+ pthread_mutex_t lock;
+ jint nrOfPixelsOwners;
+};
+