This is the mail archive of the java-discuss@sourceware.cygnus.com mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Awt implementation in libgcj?


On Mon, Dec 13, 1999 at 06:52:44PM -0800, Anthony Green wrote:
>[...] 
> This looks really cool.  I tried building it with a recent gcj/libgcj.
> There are some issues in your code, and some in libgcj...
> 
> In PackedColorModel.java...
> 
>     public PackedColorModel(ColorSpace cspace, int pixelBits,
> 			    int[] colorMaskArray, int alphaMask,
> 			    boolean isAlphaPremultiplied,
> 			    int transparency,
> 			    int transferType) {
> 	
> 	super(pixelBits, initMasks(colorMaskArray, alphaMask), cspace,
> 	      (alphaMask != 0), isAlphaPremultiplied, transparency,
> 	      transferType);
>
> 
> The call to initMasks is really a reference to `this', which can't
> appear before the call to the super constructor.  Older versions of
> gcj didn't catch this - but current ones do (as does SUn's javac).

Silly mistake. The patch below fixes this. 
 
> natWindow.cc includes two files that we don't currently install:
> config.h and jvm.h.  They don't appear to be required by natWindow.cc
> (at least, with a recent libgcj), so you should probably remove them.

They are not required. I really don't remember why I put them in
there.

> The linker is complaining that _Jv_Throw doesn't exist.  I tried this
> on a platform that uses sjlj exceptions.  cni.h says:
> 
> #ifdef SJLJ_EXCEPTIONS
> #define _Jv_Throw _Jv_Sjlj_Throw
> #endif
> 
> SJLJ_EXCEPTIONS is defined in config.h, which we don't install or
> include in this file.  What should we do about this - Tom?  Andrew?

I was using an old version of libgcj where I didn't encounter this
problem. Am I using JvThrow(..) in an unusual manner, or is this a general
problem with new versions of libgcj?


diff -ur jcnix-19991211/java/awt/image/PackedColorModel.java jcnix-19991214/java/awt/image/PackedColorModel.java
--- jcnix-19991211/java/awt/image/PackedColorModel.java	Wed Oct 13 14:17:55 1999
+++ jcnix-19991214/java/awt/image/PackedColorModel.java	Tue Dec 14 12:29:18 1999
@@ -18,9 +18,10 @@
 			    int transparency,
 			    int transferType) {
 	
-	super(pixelBits, initMasks(colorMaskArray, alphaMask), cspace,
-	      (alphaMask != 0), isAlphaPremultiplied, transparency,
+	super(pixelBits, calcBitsPerComponent(colorMaskArray, alphaMask),
+	      cspace, (alphaMask != 0), isAlphaPremultiplied, transparency,
 	      transferType);
+	initMasks(colorMaskArray, alphaMask);
 	if ((pixelBits<1) || (pixelBits>32)) {
 	    throw new IllegalArgumentException("pixels per bits must be " +
 					       "in the range [1, 32]");
@@ -28,13 +29,31 @@
     }
     
     
+    private static int[] calcBitsPerComponent(int[] colorMaskArray,
+					      int alphaMask) {
+	int numComponents = colorMaskArray.length;
+	if (alphaMask != 0) numComponents++;
+
+	int[] bitsPerComponent = new int[numComponents];
+
+	BitMaskExtent extent = new BitMaskExtent();
+	for (int b=0; b<colorMaskArray.length; b++) {
+	    extent.setMask(colorMaskArray[b]);
+	    bitsPerComponent[b] = extent.bitWidth;
+	}
+	if (alphaMask != 0) {
+	    extent.setMask(alphaMask);
+	    bitsPerComponent[numComponents-1] = extent.bitWidth;
+	}
+	return bitsPerComponent;
+    }
+
     /** Initializes the masks.
 	
 	@return an array containing the number of bits per color
 	component.  */
     
-    private int[] initMasks(int[] colorMaskArray, int alphaMask) {
-
+    private void initMasks(int[] colorMaskArray, int alphaMask) {
 	int numComponents = colorMaskArray.length;
 	if (alphaMask == 0) {
 	    masks = colorMaskArray;
@@ -46,7 +65,6 @@
 	    masks[numComponents++] = alphaMask;
 	}
 	
-	int[] bitsPerComponent = new int[numComponents];
 	shifts = new int[numComponents];
 	
 	/* This code is similar to the code in
@@ -56,11 +74,8 @@
 	BitMaskExtent extent = new BitMaskExtent();
 	for (int b=0; b<numComponents; b++) {
 	    extent.setMask(colorMaskArray[b]);
-	    bitsPerComponent[b] = extent.bitWidth;
 	    shifts[b] = extent.leastSignificantBit;
 	}
-
-	return bitsPerComponent;
     }
     
     public PackedColorModel(ColorSpace cspace, int pixelBits,
diff -ur jcnix-19991211/no/rwr/x/natWindow.cc jcnix-19991214/no/rwr/x/natWindow.cc
--- jcnix-19991211/no/rwr/x/natWindow.cc	Sun Sep 19 23:06:35 1999
+++ jcnix-19991214/no/rwr/x/natWindow.cc	Tue Dec 14 12:12:25 1999
@@ -1,11 +1,9 @@
 
 #include <vector>
-#include <config.h>
 
 #include <X11/Xlib.h>
 
 #include <cni.h>
-#include <jvm.h>
 #include "java/awt/Rectangle.h"
 #include "no/rwr/x/Display.h"
 #include "no/rwr/x/Window.h"


-- 
Rolf W. Rasmussen
        Smith's Law: "Any sufficiently optimistic statement is
                      indistinguishable from sarcasm." -- Eric Smith

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]