summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio_quarti@ca.ibm.com>2011-08-03 18:17:36 -0400
committerSilenio Quarti <silenio_quarti@ca.ibm.com>2011-08-03 18:17:36 -0400
commitb74b414065a855cd1f454e71dbb13ea90f41b4d8 (patch)
tree3dc7a8dfb3d277bbd7443bcd8746fff821c306c8
parenta0e9a2f658ad11e7c613ab7218b7cf8b48f05fc9 (diff)
downloadeclipse.platform.swt-b74b414065a855cd1f454e71dbb13ea90f41b4d8.tar.gz
eclipse.platform.swt-b74b414065a855cd1f454e71dbb13ea90f41b4d8.tar.xz
eclipse.platform.swt-b74b414065a855cd1f454e71dbb13ea90f41b4d8.zip
Bug 352694 - GC can not capture screen correctly in MAC 10.7 lion
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c20
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c20
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c5
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java6
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java8
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java10
12 files changed, 74 insertions, 9 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
index bda460f384..0e88a7fd1e 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os.c
@@ -2748,6 +2748,26 @@ JNIEXPORT jint JNICALL OS_NATIVE(CGDisplayBytesPerRow)
}
#endif
+#ifndef NO_CGDisplayCreateImage
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayCreateImage)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ jintLong rc = 0;
+ OS_NATIVE_ENTER(env, that, CGDisplayCreateImage_FUNC);
+/*
+ rc = (jintLong)CGDisplayCreateImage((CGDirectDisplayID)arg0);
+*/
+ {
+ LOAD_FUNCTION(fp, CGDisplayCreateImage)
+ if (fp) {
+ rc = (jintLong)((jintLong (CALLING_CONVENTION*)(CGDirectDisplayID))fp)((CGDirectDisplayID)arg0);
+ }
+ }
+ OS_NATIVE_EXIT(env, that, CGDisplayCreateImage_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO_CGDisplayHideCursor
JNIEXPORT jint JNICALL OS_NATIVE(CGDisplayHideCursor)
(JNIEnv *env, jclass that, jint arg0)
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h
index 0c66ec8354..49c9b8c278 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_custom.h
@@ -33,3 +33,4 @@
#define AXUIElementCreateWithDataBrowserAndItemInfo_LIB "com.apple.Carbon"
#define PMPrinterGetOutputResolution_LIB "com.apple.Carbon"
#define PMShowPrintDialogWithOptions_LIB "com.apple.Carbon"
+#define CGDisplayCreateImage_LIB "com.apple.Carbon"
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
index ae3a9c161c..b1a212bed4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.c
@@ -14,8 +14,8 @@
#ifdef NATIVE_STATS
-int OS_nativeFunctionCount = 1015;
-int OS_nativeFunctionCallCount[1015];
+int OS_nativeFunctionCount = 1016;
+int OS_nativeFunctionCallCount[1016];
char * OS_nativeFunctionNames[] = {
"AECoerceDesc",
"AECountItems",
@@ -229,6 +229,7 @@ char * OS_nativeFunctionNames[] = {
"CGDisplayBitsPerSample",
"CGDisplayBounds",
"CGDisplayBytesPerRow",
+ "CGDisplayCreateImage",
"CGDisplayHideCursor",
"CGDisplayPixelsHigh",
"CGDisplayPixelsWide",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
index 32d36401e2..8eb9478aa4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/library/os_stats.h
@@ -237,6 +237,7 @@ typedef enum {
CGDisplayBitsPerSample_FUNC,
CGDisplayBounds_FUNC,
CGDisplayBytesPerRow_FUNC,
+ CGDisplayCreateImage_FUNC,
CGDisplayHideCursor_FUNC,
CGDisplayPixelsHigh_FUNC,
CGDisplayPixelsWide_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
index 9881449a9d..8ba01edff4 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/carbon/org/eclipse/swt/internal/carbon/OS.java
@@ -2045,6 +2045,11 @@ public static final native int CGDisplayBitsPerPixel (int display);
public static final native int CGDisplayBitsPerSample (int display);
/** @param display cast=(CGDirectDisplayID) */
public static final native int CGDisplayBytesPerRow (int display);
+/**
+ * @method flags=dynamic
+ * @param displayID cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayCreateImage(int displayID);
/** @param display cast=(CGDirectDisplayID) */
public static final native int CGDisplayPixelsHigh (int display);
/** @param display cast=(CGDirectDisplayID) */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
index 27fa0b1915..55ae27ce11 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os.c
@@ -1659,6 +1659,26 @@ JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayBytesPerRow)
}
#endif
+#ifndef NO_CGDisplayCreateImage
+JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayCreateImage)
+ (JNIEnv *env, jclass that, jint arg0)
+{
+ jintLong rc = 0;
+ OS_NATIVE_ENTER(env, that, CGDisplayCreateImage_FUNC);
+/*
+ rc = (jintLong)CGDisplayCreateImage((CGDirectDisplayID)arg0);
+*/
+ {
+ LOAD_FUNCTION(fp, CGDisplayCreateImage)
+ if (fp) {
+ rc = (jintLong)((jintLong (CALLING_CONVENTION*)(CGDirectDisplayID))fp)((CGDirectDisplayID)arg0);
+ }
+ }
+ OS_NATIVE_EXIT(env, that, CGDisplayCreateImage_FUNC);
+ return rc;
+}
+#endif
+
#ifndef NO_CGDisplayPixelsHigh
JNIEXPORT jintLong JNICALL OS_NATIVE(CGDisplayPixelsHigh)
(JNIEnv *env, jclass that, jint arg0)
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
index dbd5f18aca..19f5112bed 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_custom.h
@@ -34,6 +34,7 @@
#define GetCurrentEventButtonState_LIB "com.apple.Carbon"
#define GetDblTime_LIB "com.apple.Carbon"
#define CGContextCopyPath_LIB "com.apple.Cocoa"
+#define CGDisplayCreateImage_LIB "com.apple.Cocoa"
#define TISCopyCurrentKeyboardInputSource_LIB "com.apple.Carbon"
#define TISGetInputSourceProperty_LIB "com.apple.Carbon"
#define UCKeyTranslate_LIB "com.apple.CoreServices"
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
index ff1373ef79..3c0869da31 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.c
@@ -14,8 +14,8 @@
#ifdef NATIVE_STATS
-int OS_nativeFunctionCount = 628;
-int OS_nativeFunctionCallCount[628];
+int OS_nativeFunctionCount = 629;
+int OS_nativeFunctionCallCount[629];
char * OS_nativeFunctionNames[] = {
"ATSFontActivateFromFileReference",
"AcquireRootMenu",
@@ -117,6 +117,7 @@ char * OS_nativeFunctionNames[] = {
"CGDisplayBitsPerSample",
"CGDisplayBounds",
"CGDisplayBytesPerRow",
+ "CGDisplayCreateImage",
"CGDisplayPixelsHigh",
"CGDisplayPixelsWide",
"CGEventCreateKeyboardEvent",
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
index 88fc61e088..4d5d15f298 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/library/os_stats.h
@@ -125,6 +125,7 @@ typedef enum {
CGDisplayBitsPerSample_FUNC,
CGDisplayBounds_FUNC,
CGDisplayBytesPerRow_FUNC,
+ CGDisplayCreateImage_FUNC,
CGDisplayPixelsHigh_FUNC,
CGDisplayPixelsWide_FUNC,
CGEventCreateKeyboardEvent_FUNC,
diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
index 118aa48669..0c1aeb4bed 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java
@@ -364,6 +364,12 @@ public static final int kCGBitmapByteOrder32Host = __BIG_ENDIAN__() ? kCGBitmapB
*/
public static final native void CGContextCopyWindowContentsToRect(int /*long*/ context, CGRect destRect, int /*long*/ contextID, int /*long*/ windowNumber, CGRect srcRect);
+/**
+ * @method flags=dynamic
+ * @param displayID cast=(CGDirectDisplayID)
+ */
+public static final native int /*long*/ CGDisplayCreateImage(int displayID);
+
/** QuickDraw calls */
/** @method flags=dynamic */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
index 806758f07a..8ece3be167 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java
@@ -451,7 +451,8 @@ public void copyArea(Image image, int x, int y) {
for (int i = 0; i < count[0]; i++) {
int display = displays[i];
OS.CGDisplayBounds(display, rect);
- int address = OS.CGDisplayBaseAddress(display);
+ int /*long*/ srcImage = 0;
+ int /*long*/ address = OS.VERSION >= 0x1070 ? 0 : OS.CGDisplayBaseAddress(display);
if (address != 0) {
int width = OS.CGDisplayPixelsWide(display);
int height = OS.CGDisplayPixelsHigh(display);
@@ -463,7 +464,6 @@ public void copyArea(Image image, int x, int y) {
case 16: bitmapInfo |= OS.kCGBitmapByteOrder16Host; break;
case 32: bitmapInfo |= OS.kCGBitmapByteOrder32Host; break;
}
- int srcImage = 0;
if (OS.__BIG_ENDIAN__() && OS.VERSION >= 0x1040) {
int context = OS.CGBitmapContextCreate(address, width, height, bps, bpr, data.device.colorspace, bitmapInfo);
srcImage = OS.CGBitmapContextCreateImage(context);
@@ -473,6 +473,10 @@ public void copyArea(Image image, int x, int y) {
srcImage = OS.CGImageCreate(width, height, bps, bpp, bpr, data.device.colorspace, bitmapInfo, provider, null, true, 0);
OS.CGDataProviderRelease(provider);
}
+ } else {
+ if (OS.VERSION >= 0x1060) srcImage = OS.CGDisplayCreateImage(display);
+ }
+ if (srcImage != 0) {
copyArea(image, x - (int)rect.x, y - (int)rect.y, srcImage);
if (srcImage != 0) OS.CGImageRelease(srcImage);
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
index 51b9e21f53..ea28083156 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/graphics/GC.java
@@ -488,7 +488,8 @@ public void copyArea(Image image, int x, int y) {
for (int i = 0; i < count[0]; i++) {
OS.memmove(display, displays + (i * 4), 4);
OS.CGDisplayBounds(display[0], rect);
- int /*long*/ address = OS.CGDisplayBaseAddress(display[0]);
+ int /*long*/ srcImage = 0;
+ int /*long*/ address = OS.VERSION >= 0x1070 ? 0 : OS.CGDisplayBaseAddress(display[0]);
if (address != 0) {
int /*long*/ width = OS.CGDisplayPixelsWide(display[0]);
int /*long*/ height = OS.CGDisplayPixelsHigh(display[0]);
@@ -500,7 +501,6 @@ public void copyArea(Image image, int x, int y) {
case 16: bitmapInfo |= OS.kCGBitmapByteOrder16Host; break;
case 32: bitmapInfo |= OS.kCGBitmapByteOrder32Host; break;
}
- int /*long*/ srcImage = 0;
if (OS.__BIG_ENDIAN__() && OS.VERSION >= 0x1040) {
int /*long*/ colorspace = OS.CGColorSpaceCreateDeviceRGB();
int /*long*/ context = OS.CGBitmapContextCreate(address, width, height, bps, bpr, colorspace, bitmapInfo);
@@ -514,8 +514,12 @@ public void copyArea(Image image, int x, int y) {
OS.CGColorSpaceRelease(colorspace);
OS.CGDataProviderRelease(provider);
}
+ } else {
+ if (OS.VERSION >= 0x1060) srcImage = OS.CGDisplayCreateImage(display[0]);
+ }
+ if (srcImage != 0) {
copyArea(image, x - (int)rect.origin.x, y - (int)rect.origin.y, srcImage);
- if (srcImage != 0) OS.CGImageRelease(srcImage);
+ OS.CGImageRelease(srcImage);
}
}
OS.free(displays);