summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets
diff options
context:
space:
mode:
authorSilenio Quarti <Silenio_Quarti@ca.ibm.com>2011-10-19 10:07:17 -0400
committerSilenio Quarti <Silenio_Quarti@ca.ibm.com>2011-10-19 10:13:37 -0400
commita3b02a04a381231f9082de077a6f17f8af5d2dad (patch)
treeddec64c5d38983933ab813feb8a2d9ba1c1907a3 /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets
parent641df66d77688c7d9893fc22d380993faf531414 (diff)
downloadeclipse.platform.swt-a3b02a04a381231f9082de077a6f17f8af5d2dad.tar.gz
eclipse.platform.swt-a3b02a04a381231f9082de077a6f17f8af5d2dad.tar.xz
eclipse.platform.swt-a3b02a04a381231f9082de077a6f17f8af5d2dad.zip
shared copies of Display.createPixbuf
shared copies of Display.createPixbuf
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java3
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java94
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ImageList.java154
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java1
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java4
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java4
6 files changed, 7 insertions, 253 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java
index 97f3422fba..19fa5cfde1 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Decorations.java
@@ -11,6 +11,7 @@
package org.eclipse.swt.widgets;
import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
import org.eclipse.swt.internal.gtk.*;
import org.eclipse.swt.graphics.*;
@@ -175,7 +176,7 @@ void _setImages (Image [] images) {
if (images != null) {
for (int i = 0; i < images.length; i++) {
Image image = images [i];
- int /*long*/ pixbuf = Display.createPixbuf (image);
+ int /*long*/ pixbuf = ImageList.createPixbuf (image);
pixbufs = OS.g_list_append (pixbufs, pixbuf);
}
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
index 094e3a9718..7385f7e81a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Display.java
@@ -1058,100 +1058,6 @@ Image createImage (String name) {
return new Image (this, imageData);
}
-static int /*long*/ createPixbuf(Image image) {
- int /*long*/ pixbuf;
- if (OS.USE_CAIRO_SURFACE) {
- Rectangle bounds = image.getBounds();
- int w = bounds.width, h = bounds.height;
- pixbuf = OS.gdk_pixbuf_new (OS.GDK_COLORSPACE_RGB, true, 8, w, h);
- if (pixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
- int stride = OS.gdk_pixbuf_get_rowstride (pixbuf);
- int /*long*/ pixels = OS.gdk_pixbuf_get_pixels (pixbuf);
- byte[] line = new byte[stride];
- int /*long*/ ptr = OS.malloc(4);
- OS.memmove(ptr, new int[]{1}, 4);
- OS.memmove(line, ptr, 1);
- OS.free(ptr);
- int oa, or, og, ob;
- boolean bigendian = line[0] == 0;
- if (bigendian) {
- oa = 0; or = 1; og = 2; ob = 3;
- } else {
- oa = 3; or = 2; og = 1; ob = 0;
- }
- int /*long*/ surfaceData = image.surfaceData;
- for (int y = 0; y < h; y++) {
- OS.memmove (line, surfaceData + (y * stride), stride);
- for (int x = 0, offset = 0; x < w; x++, offset += 4) {
- int a = line[offset + oa] & 0xFF;
- int r = line[offset + or] & 0xFF;
- int g = line[offset + og] & 0xFF;
- int b = line[offset + ob] & 0xFF;
- line[offset + 3] = (byte)a;
- if (a != 0) {
- line[offset + 0] = (byte)(((r) / (float)a) * 0xFF);
- line[offset + 1] = (byte)(((g) / (float)a) * 0xFF);
- line[offset + 2] = (byte)(((b) / (float)a) * 0xFF);
- }
- }
- OS.memmove (pixels + (y * stride), line, stride);
- }
- } else {
- int [] w = new int [1], h = new int [1];
- OS.gdk_drawable_get_size (image.pixmap, w, h);
- int /*long*/ colormap = OS.gdk_colormap_get_system ();
- boolean hasMask = image.mask != 0 && OS.gdk_drawable_get_depth (image.mask) == 1;
- if (hasMask) {
- pixbuf = OS.gdk_pixbuf_new (OS.GDK_COLORSPACE_RGB, true, 8, w [0], h [0]);
- if (pixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
- OS.gdk_pixbuf_get_from_drawable (pixbuf, image.pixmap, colormap, 0, 0, 0, 0, w [0], h [0]);
- int /*long*/ maskPixbuf = OS.gdk_pixbuf_new(OS.GDK_COLORSPACE_RGB, false, 8, w [0], h [0]);
- if (maskPixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
- OS.gdk_pixbuf_get_from_drawable(maskPixbuf, image.mask, 0, 0, 0, 0, 0, w [0], h [0]);
- int stride = OS.gdk_pixbuf_get_rowstride(pixbuf);
- int /*long*/ pixels = OS.gdk_pixbuf_get_pixels(pixbuf);
- byte[] line = new byte[stride];
- int maskStride = OS.gdk_pixbuf_get_rowstride(maskPixbuf);
- int /*long*/ maskPixels = OS.gdk_pixbuf_get_pixels(maskPixbuf);
- byte[] maskLine = new byte[maskStride];
- for (int y=0; y<h[0]; y++) {
- int /*long*/ offset = pixels + (y * stride);
- OS.memmove(line, offset, stride);
- int /*long*/ maskOffset = maskPixels + (y * maskStride);
- OS.memmove(maskLine, maskOffset, maskStride);
- for (int x=0; x<w[0]; x++) {
- if (maskLine[x * 3] == 0) {
- line[x * 4 + 3] = 0;
- }
- }
- OS.memmove(offset, line, stride);
- }
- OS.g_object_unref(maskPixbuf);
- } else {
- ImageData data = image.getImageData ();
- boolean hasAlpha = data.getTransparencyType () == SWT.TRANSPARENCY_ALPHA;
- pixbuf = OS.gdk_pixbuf_new (OS.GDK_COLORSPACE_RGB, hasAlpha, 8, w [0], h [0]);
- if (pixbuf == 0) SWT.error (SWT.ERROR_NO_HANDLES);
- OS.gdk_pixbuf_get_from_drawable (pixbuf, image.pixmap, colormap, 0, 0, 0, 0, w [0], h [0]);
- if (hasAlpha) {
- byte [] alpha = data.alphaData;
- int stride = OS.gdk_pixbuf_get_rowstride (pixbuf);
- int /*long*/ pixels = OS.gdk_pixbuf_get_pixels (pixbuf);
- byte [] line = new byte [stride];
- for (int y = 0; y < h [0]; y++) {
- int /*long*/ offset = pixels + (y * stride);
- OS.memmove (line, offset, stride);
- for (int x = 0; x < w [0]; x++) {
- line [x*4+3] = alpha [y*w [0]+x];
- }
- OS.memmove (offset, line, stride);
- }
- }
- }
- }
- return pixbuf;
-}
-
static void deregister (Display display) {
synchronized (Device.class) {
for (int i=0; i<Displays.length; i++) {
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ImageList.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ImageList.java
deleted file mode 100644
index f7a098e53e..0000000000
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ImageList.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2005 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.swt.widgets;
-
-
-import org.eclipse.swt.internal.gtk.*;
-import org.eclipse.swt.graphics.*;
-
-class ImageList {
- int /*long*/ [] pixbufs;
- int width = -1, height = -1;
- Image [] images;
-
-public ImageList() {
- images = new Image [4];
- pixbufs = new int /*long*/ [4];
-}
-
-public int add (Image image) {
- int index = 0;
- while (index < images.length) {
- if (images [index] != null) {
- if (images [index].isDisposed ()) {
- OS.g_object_unref (pixbufs [index]);
- images [index] = null;
- pixbufs [index] = 0;
- }
- }
- if (images [index] == null) break;
- index++;
- }
- if (index == images.length) {
- Image [] newImages = new Image [images.length + 4];
- System.arraycopy (images, 0, newImages, 0, images.length);
- images = newImages;
- int /*long*/ [] newPixbufs = new int /*long*/ [pixbufs.length + 4];
- System.arraycopy (pixbufs, 0, newPixbufs, 0, pixbufs.length);
- pixbufs = newPixbufs;
- }
- set (index, image);
- return index;
-}
-
-public void dispose () {
- if (pixbufs == null) return;
- for (int index=0; index<pixbufs.length; index++) {
- if (pixbufs [index] != 0) OS.g_object_unref (pixbufs [index]);
- }
- images = null;
- pixbufs = null;
-}
-
-public Image get (int index) {
- return images [index];
-}
-
-int /*long*/ getPixbuf (int index) {
- return pixbufs [index];
-}
-
-public int indexOf (Image image) {
- if (image == null) return -1;
- for (int index=0; index<images.length; index++) {
- if (image == images [index]) return index;
- }
- return -1;
-}
-
-int indexOf (int /*long*/ pixbuf) {
- if (pixbuf == 0) return -1;
- for (int index=0; index<images.length; index++) {
- if (pixbuf == pixbufs [index]) return index;
- }
- return -1;
-}
-
-public boolean isDisposed () {
- return images == null;
-}
-
-public void put (int index, Image image) {
- int count = images.length;
- if (!(0 <= index && index < count)) return;
- if (image != null) {
- set (index, image);
- } else {
- images [index] = null;
- if (pixbufs [index] != 0) OS.g_object_unref (pixbufs [index]);
- pixbufs [index] = 0;
- }
-}
-
-public void remove (Image image) {
- if (image == null) return;
- for (int index=0; index<images.length; index++) {
- if (image == images [index]){
- OS.g_object_unref (pixbufs [index]);
- images [index] = null;
- pixbufs [index] = 0;
- }
- }
-}
-
-void set (int index, Image image) {
- int /*long*/ pixbuf = Display.createPixbuf (image);
- int w = OS.gdk_pixbuf_get_width(pixbuf);
- int h = OS.gdk_pixbuf_get_height(pixbuf);
- if (width == -1 || height == -1) {
- width = w;
- height = h;
- }
- if (w != width || h != height) {
- int /*long*/ scaledPixbuf = OS.gdk_pixbuf_scale_simple(pixbuf, width, height, OS.GDK_INTERP_BILINEAR);
- OS.g_object_unref (pixbuf);
- pixbuf = scaledPixbuf;
- }
- int /*long*/ oldPixbuf = pixbufs [index];
- if (oldPixbuf != 0) {
- if (images [index] == image) {
- OS.gdk_pixbuf_copy_area (pixbuf, 0, 0, width, height, oldPixbuf, 0, 0);
- OS.g_object_unref (pixbuf);
- pixbuf = oldPixbuf;
- } else {
- OS.g_object_unref (oldPixbuf);
- }
- }
- pixbufs [index] = pixbuf;
- images [index] = image;
-}
-
-public int size () {
- int result = 0;
- for (int index=0; index<images.length; index++) {
- if (images [index] != null) {
- if (images [index].isDisposed ()) {
- OS.g_object_unref (pixbufs [index]);
- images [index] = null;
- pixbufs [index] = 0;
- }
- if (images [index] != null) result++;
- }
- }
- return result;
-}
-
-}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
index e09761c847..7302454dc9 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TabFolder.java
@@ -12,6 +12,7 @@ package org.eclipse.swt.widgets;
import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
import org.eclipse.swt.internal.gtk.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.events.*;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
index 771173ef41..cd3f6ee6d8 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Table.java
@@ -212,8 +212,8 @@ int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*lo
/* Give an image from the image list to make sure the row has
* the correct height.
*/
- if (imageList != null && imageList.pixbufs.length > 0) {
- if (isPixbuf) OS.g_object_set (cell, OS.pixbuf, imageList.pixbufs [0], 0);
+ if (imageList != null && imageList.size () > 0) {
+ if (isPixbuf) OS.g_object_set (cell, OS.pixbuf, imageList.getPixbuf (0), 0);
}
return 0;
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
index 513622771a..eb1bc40ad7 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Tree.java
@@ -257,8 +257,8 @@ int /*long*/ cellDataProc (int /*long*/ tree_column, int /*long*/ cell, int /*lo
/* Give an image from the image list to make sure the row has
* the correct height.
*/
- if (imageList != null && imageList.pixbufs.length > 0) {
- if (isPixbuf) OS.g_object_set (cell, OS.pixbuf, imageList.pixbufs [0], 0);
+ if (imageList != null && imageList.size () > 0) {
+ if (isPixbuf) OS.g_object_set (cell, OS.pixbuf, imageList.getPixbuf (0), 0);
}
return 0;
}