summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio>2004-05-28 15:38:53 +0000
committerSilenio Quarti <silenio>2004-05-28 15:38:53 +0000
commitba456bc3459bbfe3ebe7b7f98ce0c3032335e33c (patch)
tree176ff1b2194cac3922fd4c9ec05ce6f9f2805719
parent7d76cc622a15faf17862e315d91aaa4dbfe8f148 (diff)
downloadeclipse.platform.swt-ba456bc3459bbfe3ebe7b7f98ce0c3032335e33c.tar.gz
eclipse.platform.swt-ba456bc3459bbfe3ebe7b7f98ce0c3032335e33c.tar.xz
eclipse.platform.swt-ba456bc3459bbfe3ebe7b7f98ce0c3032335e33c.zip
53358
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/carbon/org/eclipse/swt/graphics/GC.java55
1 files changed, 54 insertions, 1 deletions
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 ea85766395..4fe0d07b48 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
@@ -170,7 +170,60 @@ public void copyArea(Image image, int x, int y) {
if (handle == 0) SWT.error(SWT.ERROR_GRAPHIC_DISPOSED);
if (image == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
if (image.type != SWT.BITMAP || image.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
- //NOT IMPLEMENTED
+ if (data.control != 0) {
+ int[] offscreen = new int[1];
+ OS.HIViewCreateOffscreenImage(data.control, 0, null, offscreen);
+ copyArea(image, x, y, offscreen[0]);
+ if (offscreen[0] != 0) OS.CGImageRelease(offscreen[0]);
+ } else if (data.image != null) {
+ copyArea(image, x, y, data.image.handle);
+ } else if (data.window != 0) {
+// int imageHandle = image.handle;
+// CGRect rect = new CGRect();
+// rect.x = x;
+// rect.y = y;
+// rect.width = OS.CGImageGetWidth(imageHandle);
+// rect.height = OS.CGImageGetHeight(imageHandle);
+// int[] displays = new int[16];
+// int[] count = new int[1];
+// if (OS.CGGetDisplaysWithRect(rect, displays.length, displays, count) != 0) return;
+// for (int i = 0; i < count[0]; i++) {
+// int display = displays[i];
+// if (OS.CGDisplayCapture(display) == 0) {
+// int address = OS.CGDisplayAddressForPosition (display, x, y);
+// System.out.println(address);
+// int colorspace = data.device.colorspace;
+// int provider = OS.CGDataProviderCreateWithData(0, data, dataSize, 0);
+// int srcImage = OS.CGImageCreate(width, height, 8, 32, bpr, colorspace, OS.kCGImageAlphaNoneSkipFirst, provider, null, false, 0);
+// OS.CGDataProviderRelease(provider);
+// copyArea(image, x, y, srcImage);
+// if (srcImage != 0) OS.CGImageRelease(srcImage);
+// OS.CGDisplayRelease(display);
+// }
+// }
+ }
+}
+
+void copyArea (Image image, int x, int y, int srcImage) {
+ if (srcImage == 0) return;
+ int imageHandle = image.handle;
+ int bpc = OS.CGImageGetBitsPerComponent(imageHandle);
+ int width = OS.CGImageGetWidth(imageHandle);
+ int height = OS.CGImageGetHeight(imageHandle);
+ int bpr = OS.CGImageGetBytesPerRow(imageHandle);
+ int alphaInfo = OS.CGImageGetAlphaInfo(imageHandle);
+ int context = OS.CGBitmapContextCreate(image.data, width, height, bpc, bpr, data.device.colorspace, alphaInfo);
+ if (context != 0) {
+ CGRect rect = new CGRect();
+ rect.x = -x;
+ rect.y = -y;
+ rect.width = OS.CGImageGetWidth(srcImage);
+ rect.height = OS.CGImageGetHeight(srcImage);
+ OS.CGContextScaleCTM(context, 1, -1);
+ OS.CGContextTranslateCTM(context, 0, -height);
+ OS.CGContextDrawImage(context, rect, srcImage);
+ OS.CGContextRelease(context);
+ }
}
/**