summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorevrhel <ethanvrhel@gmail.com>2020-07-14 15:52:22 -0700
committerevrhel <ethanvrhel@gmail.com>2020-09-23 13:28:56 -0700
commitec640e5cc4aea236b9d8fdd170ab9164a35cf09c (patch)
tree17f5a16dc6e2cfd6a31c75f271743066aeaa7660
parent4283bf3be5ad3e3e077e6666b5b3135f04a1d430 (diff)
downloadghostpdl-ec640e5cc4aea236b9d8fdd170ab9164a35cf09c.tar.gz
Fixed how display_callback was being passed to Ghostscript
The display_callback device did not have the correct values regarding its size, major version, and minor version. Furthermore, the display_device structure was not being dynamically allocated and ended up being freed too early.
-rw-r--r--demos/java/gsjava/src/com/artifex/gsjava/Main.java2
-rw-r--r--demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdErrFunction.java8
-rw-r--r--demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdInFunction.java8
-rw-r--r--demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdOutFunction.java9
-rw-r--r--demos/java/jni/gs_jni/callbacks.cpp2
-rw-r--r--demos/java/jni/gs_jni/com_artifex_gsjava_GSAPI.cpp36
6 files changed, 45 insertions, 20 deletions
diff --git a/demos/java/gsjava/src/com/artifex/gsjava/Main.java b/demos/java/gsjava/src/com/artifex/gsjava/Main.java
index fae1c3ed4..4e2a81e58 100644
--- a/demos/java/gsjava/src/com/artifex/gsjava/Main.java
+++ b/demos/java/gsjava/src/com/artifex/gsjava/Main.java
@@ -66,7 +66,7 @@ public class Main {
final File ofile = new File("image.tiff");
- String[] gargs = { "gs", "-dNOPAUSE", "-dSAFER",
+ final String[] gargs = { "gs", "-dNOPAUSE", "-dSAFER",
"-I%rom%Resource%/Init/",
"-dBATCH", "-r72", "-sDEVICE=display",
"-dDisplayFormat=" + format,
diff --git a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdErrFunction.java b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdErrFunction.java
index 03140944b..5001b9c50 100644
--- a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdErrFunction.java
+++ b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdErrFunction.java
@@ -3,5 +3,13 @@ package com.artifex.gsjava.callbacks;
@FunctionalInterface
public interface IStdErrFunction {
+ /**
+ * Called when something should be written to the standard error stream.
+ *
+ * @param callerHandle The caller handle.
+ * @param str The string to write.
+ * @param len The length of bytes to be written.
+ * @return The amount of bytes written, must be <code>len</code>.
+ */
public int onStdErr(long callerHandle, byte[] str, int len);
}
diff --git a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdInFunction.java b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdInFunction.java
index f14162efe..c6d97e940 100644
--- a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdInFunction.java
+++ b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdInFunction.java
@@ -3,5 +3,13 @@ package com.artifex.gsjava.callbacks;
@FunctionalInterface
public interface IStdInFunction {
+ /**
+ *
+ *
+ * @param callerHandle The caller handle.
+ * @param buf A string.
+ * @param len The number of bytes to read.
+ * @return The number of bytes read, must be <code>len</code>/
+ */
public int onStdIn(long callerHandle, byte[] buf, int len);
}
diff --git a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdOutFunction.java b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdOutFunction.java
index 17ab0fa39..c3635f544 100644
--- a/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdOutFunction.java
+++ b/demos/java/gsjava/src/com/artifex/gsjava/callbacks/IStdOutFunction.java
@@ -3,5 +3,14 @@ package com.artifex.gsjava.callbacks;
@FunctionalInterface
public interface IStdOutFunction {
+ /**
+ * Called when something should be written to the standard
+ * output stream.
+ *
+ * @param callerHandle The caller handle.
+ * @param str The string to write.
+ * @param len The number of bytes to write.
+ * @return The number of bytes written, must be <code>len</code>.
+ */
public int onStdOut(long callerHandle, byte[] str, int len);
}
diff --git a/demos/java/jni/gs_jni/callbacks.cpp b/demos/java/jni/gs_jni/callbacks.cpp
index 95a181ae8..ea78128e9 100644
--- a/demos/java/jni/gs_jni/callbacks.cpp
+++ b/demos/java/jni/gs_jni/callbacks.cpp
@@ -197,7 +197,7 @@ int callbacks::display::displaySizeFunction(void *handle, void *device, int widt
int code = 0;
if (g_env && g_displayCallback)
{
- jsize len = width * height * format;
+ jsize len = height * raster;
jbyteArray byteArray = g_env->NewByteArray(len);
g_env->SetByteArrayRegion(byteArray, 0, len, (signed char *)pimage);
code = callIntMethod(g_env, g_displayCallback, "onDisplaySize", DISPLAY_SIZE_SIG, (jlong)handle,
diff --git a/demos/java/jni/gs_jni/com_artifex_gsjava_GSAPI.cpp b/demos/java/jni/gs_jni/com_artifex_gsjava_GSAPI.cpp
index 122acea5c..f925af214 100644
--- a/demos/java/jni/gs_jni/com_artifex_gsjava_GSAPI.cpp
+++ b/demos/java/jni/gs_jni/com_artifex_gsjava_GSAPI.cpp
@@ -97,26 +97,26 @@ JNIEXPORT jint JNICALL Java_com_artifex_gsjava_GSAPI_gsapi_1set_1poll
JNIEXPORT jint JNICALL Java_com_artifex_gsjava_GSAPI_gsapi_1set_1display_1callback
(JNIEnv *env, jclass, jlong instance, jobject displayCallback)
{
- display_callback cb;
- cb.size = sizeof(display_callback);
- cb.version_major = 1;
- cb.version_minor = 0;
+ display_callback *cb = new display_callback;
+ cb->size = sizeof(display_callback);
+ cb->version_major = DISPLAY_VERSION_MAJOR;
+ cb->version_minor = DISPLAY_VERSION_MINOR;
- cb.display_open = callbacks::display::displayOpenFunction;
- cb.display_preclose = callbacks::display::displayPrecloseFunction;
- cb.display_close = callbacks::display::displayCloseFunction;
- cb.display_presize = callbacks::display::displayPresizeFunction;
- cb.display_size = callbacks::display::displaySizeFunction;
- cb.display_sync = callbacks::display::displaySyncFunction;
- cb.display_page = callbacks::display::displayPageFunction;
- cb.display_update = callbacks::display::displayUpdateFunction;
- cb.display_memalloc = NULL;
- cb.display_memfree = NULL;
- cb.display_separation = callbacks::display::displaySeparationFunction;
- cb.display_adjust_band_height = callbacks::display::displayAdjustBandHeightFunction;
- cb.display_rectangle_request = callbacks::display::displayRectangleRequestFunction;
+ cb->display_open = callbacks::display::displayOpenFunction;
+ cb->display_preclose = callbacks::display::displayPrecloseFunction;
+ cb->display_close = callbacks::display::displayCloseFunction;
+ cb->display_presize = callbacks::display::displayPresizeFunction;
+ cb->display_size = callbacks::display::displaySizeFunction;
+ cb->display_sync = callbacks::display::displaySyncFunction;
+ cb->display_page = callbacks::display::displayPageFunction;
+ cb->display_update = callbacks::display::displayUpdateFunction;
+ cb->display_memalloc = NULL;
+ cb->display_memfree = NULL;
+ cb->display_separation = callbacks::display::displaySeparationFunction;
+ cb->display_adjust_band_height = callbacks::display::displayAdjustBandHeightFunction;
+ cb->display_rectangle_request = callbacks::display::displayRectangleRequestFunction;
- int code = gsapi_set_display_callback((void *)instance, &cb);
+ int code = gsapi_set_display_callback((void *)instance, cb);
if (code == 0)
{
callbacks::setJNIEnv(env);