diff options
author | Silenio Quarti <silenio> | 2004-05-28 15:38:53 +0000 |
---|---|---|
committer | Silenio Quarti <silenio> | 2004-05-28 15:38:53 +0000 |
commit | ba456bc3459bbfe3ebe7b7f98ce0c3032335e33c (patch) | |
tree | 176ff1b2194cac3922fd4c9ec05ce6f9f2805719 | |
parent | 7d76cc622a15faf17862e315d91aaa4dbfe8f148 (diff) | |
download | eclipse.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.java | 55 |
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); + } } /** |