2003/07/09 10:59:17
[org.ibex.core.git] / src / org / xwt / plat / GCJ.java
index 34c89ea..5814bbc 100644 (file)
@@ -2,6 +2,8 @@
 package org.xwt.plat;
 
 import org.xwt.*;
+import org.xwt.util.*;
+import java.io.*;
 
 /** common superclass for all platforms that use GCJ to compile a native binary */
 public abstract class GCJ extends Platform {
@@ -14,11 +16,40 @@ public abstract class GCJ extends Platform {
     private static Class c5 = gnu.gcj.convert.Input_8859_1.class;
     private static Class c6 = gnu.java.locale.LocaleInformation.class;
     private static Class c7 = gnu.gcj.convert.Output_ASCII.class;
+    private static Class c8 = gnu.java.locale.Calendar_en.class;
+    private static Class c9 = gnu.java.locale.Calendar_en_US.class;
 
     protected org.xwt.Weak _getWeak(Object o) { return new Java2Weak(o); }
+    protected native InputStream _getBuiltinInputStream(); 
+
     private static class Java2Weak extends java.lang.ref.WeakReference implements org.xwt.Weak {
         public Java2Weak(Object o) { super(o); }
     }
         
+    // FIXME
+    protected ImageDecoder _decodeJPEG(InputStream is, String name) {
+        try {
+            return new JPEG(is);
+        } catch (Exception e) {
+            Log.log(this, "Exception while decoding JPEG image " + name);
+            Log.log(this, e);
+            return null;
+        }
+    }
+
+    /** Converts an InputStream carrying a JPEG image into an ARGB int[] */
+    private static class JPEG implements ImageDecoder {
+        int[] data;
+        byte[] buffer;
+        int width, height;
+        InputStream is;
+        
+        public final int[] getData() { return data; }
+        public final int getWidth() { return width; }
+        public final int getHeight() { return height; }
+        private JPEG(InputStream is) { this.is = is; nativeDecompress(); buffer = null; }
+        private native void nativeDecompress();
+    }
+
 }