-#include <stdlib.h>
-#include <stdio.h>
+// Copyright 2002 Adam Megacz, see the COPYING file for licensing [LGPL]
+
+// Inclusions /////////////////////////////////////////////////////////
+
#include <gcj/cni.h>
#include <gcj/array.h>
-#include "jpeglib.h"
-#include <setjmp.h>
+extern "C" {
-#include <java/lang/RuntimeException.h>
+// hack for broken Solaris headers
+#define _WCHAR_T
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <setjmp.h>
+#include "jpeglib.h"
+}
+#include <org/xwt/Platform.h>
+#include <org/xwt/Picture.h>
+#include <org/xwt/plat/GCJ.h>
#include <java/io/InputStream.h>
+#include <java/io/ByteArrayInputStream.h>
+#include <java/lang/RuntimeException.h>
#include <org/xwt/plat/GCJ.h>
-#include <org/xwt/plat/GCJ$JPEG.h>
+
+
+
+// builtin.xwar /////////////////////////////////////////////////////////
+
+extern unsigned char builtin_bytes[];
+extern int builtin_length;
+
+java::io::InputStream* org::xwt::plat::GCJ::_getBuiltinInputStream() {
+ jbyteArray ret = JvNewByteArray(builtin_length);
+ memcpy(elements(ret), builtin_bytes, builtin_length);
+ return new java::io::ByteArrayInputStream(ret);
+}
+
+
+
+// JPEG ////////////////////////////////////////////////////////////////
#define INPUT_BUF_SIZE (1024 * 16)
typedef struct {
struct jpeg_source_mgr pub;
+ /* FIXME
org::xwt::plat::GCJ$JPEG* myself;
+ */
} source_manager;
void jpeg_error_handler (j_common_ptr cinfo) {
void init_source (j_decompress_ptr cinfo) { }
boolean fill_input_buffer (j_decompress_ptr cinfo) {
+ /* FIXME
source_manager* src = (source_manager*)cinfo->src;
jint nbytes = src->myself->is->read(src->myself->buffer, 0, INPUT_BUF_SIZE);
if (nbytes <= 0) {
}
src->pub.next_input_byte = (JOCTET*)elements(src->myself->buffer);
src->pub.bytes_in_buffer = nbytes;
+ */
return 1;
}
}
}
-void org::xwt::plat::GCJ$JPEG::nativeDecompress() {
+org::xwt::Picture* org::xwt::plat::GCJ::_decodeJPEG(java::io::InputStream* is, jstring name) {
struct jpeg_decompress_struct cinfo;
+ jintArray data;
+ jint width;
+ jint height;
// set up our error handler
struct jpeg_error_mgr error_handler;
jpeg_create_decompress(&cinfo);
try {
source_manager src;
+ /*
buffer = JvNewByteArray(INPUT_BUF_SIZE);
+ */
src.pub.init_source = init_source;
src.pub.fill_input_buffer = fill_input_buffer;
src.pub.skip_input_data = skip_input_data;
src.pub.resync_to_restart = jpeg_resync_to_restart;
src.pub.term_source = term_source;
+ /*
src.myself = this;
src.pub.next_input_byte = (JOCTET*)elements(buffer);
+ */
src.pub.bytes_in_buffer = 0;
cinfo.src = (jpeg_source_mgr*)&src;
throw t;
}
jpeg_destroy_decompress(&cinfo);
+ return org::xwt::Platform::createPicture(data, width, height);
}
-
+// C++ new/delete operators (JvMalloc never fails)
+void* operator new(size_t size) { return JvMalloc(size); }
+void* operator new[](size_t size) { return JvMalloc(size);}
+void operator delete(void *p) { JvFree(p); }
+void operator delete[](void *p) { JvFree(p); }