summaryrefslogtreecommitdiff
path: root/platform/java/mupdf_native.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/java/mupdf_native.c')
-rw-r--r--platform/java/mupdf_native.c96
1 files changed, 65 insertions, 31 deletions
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 137a1c1a..7e88822c 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -1154,6 +1154,14 @@ static inline jobject to_Annotation_safe(fz_context *ctx, JNIEnv *env, fz_annot
return jannot;
}
+static inline jint to_ColorParams_safe(fz_context *ctx, JNIEnv *env, const fz_color_params *cp)
+{
+ if (!ctx || !cp)
+ return 0;
+
+ return (((!!cp->bp)<<5) | ((!!cp->op)<<6) || ((!!cp->opm)<<7) || (cp->ri & 31));
+}
+
static inline jobject to_ColorSpace_safe(fz_context *ctx, JNIEnv *env, fz_colorspace *cs)
{
jobject jcs;
@@ -1700,6 +1708,18 @@ static inline fz_buffer *from_Buffer_safe(JNIEnv *env, jobject jobj)
return CAST(fz_buffer *, (*env)->GetLongField(env, jobj, fid_Buffer_pointer));
}
+static inline fz_color_params from_ColorParams_safe(JNIEnv *env, jint params)
+{
+ fz_color_params p;
+
+ p.bp = (params>>5) & 1;
+ p.op = (params>>6) & 1;
+ p.opm = (params>>7) & 1;
+ p.ri = (params & 31);
+
+ return p;
+}
+
static inline fz_colorspace *from_ColorSpace_safe(JNIEnv *env, jobject jobj)
{
if (!jobj) return NULL;
@@ -1837,7 +1857,7 @@ typedef struct
fz_java_device;
static void
-fz_java_device_fill_path(fz_context *ctx, fz_device *dev, const fz_path *path, int even_odd, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha)
+fz_java_device_fill_path(fz_context *ctx, fz_device *dev, const fz_path *path, int even_odd, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1845,14 +1865,15 @@ fz_java_device_fill_path(fz_context *ctx, fz_device *dev, const fz_path *path, i
jobject jcs = to_ColorSpace(ctx, env, cs);
jobject jctm = to_Matrix(ctx, env, ctm);
jfloatArray jcolor = to_jfloatArray(ctx, env, color, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillPath, jpath, (jboolean)even_odd, jctm, jcs, jcolor, alpha);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillPath, jpath, (jboolean)even_odd, jctm, jcs, jcolor, alpha, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
static void
-fz_java_device_stroke_path(fz_context *ctx, fz_device *dev, const fz_path *path, const fz_stroke_state *state, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha)
+fz_java_device_stroke_path(fz_context *ctx, fz_device *dev, const fz_path *path, const fz_stroke_state *state, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1861,8 +1882,9 @@ fz_java_device_stroke_path(fz_context *ctx, fz_device *dev, const fz_path *path,
jobject jcs = to_ColorSpace(ctx, env, cs);
jobject jctm = to_Matrix(ctx, env, ctm);
jfloatArray jcolor = to_jfloatArray(ctx, env, color, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_strokePath, jpath, jstate, jctm, jcs, jcolor, alpha);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_strokePath, jpath, jstate, jctm, jcs, jcolor, alpha, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
@@ -1895,7 +1917,7 @@ fz_java_device_clip_stroke_path(fz_context *ctx, fz_device *dev, const fz_path *
}
static void
-fz_java_device_fill_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha)
+fz_java_device_fill_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1903,14 +1925,15 @@ fz_java_device_fill_text(fz_context *ctx, fz_device *dev, const fz_text *text, c
jobject jctm = to_Matrix(ctx, env, ctm);
jobject jcs = to_ColorSpace(ctx, env, cs);
jfloatArray jcolor = to_jfloatArray(ctx, env, color, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillText, jtext, jctm, jcs, jcolor, alpha);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillText, jtext, jctm, jcs, jcolor, alpha, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
static void
-fz_java_device_stroke_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz_stroke_state *state, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha)
+fz_java_device_stroke_text(fz_context *ctx, fz_device *dev, const fz_text *text, const fz_stroke_state *state, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1919,8 +1942,9 @@ fz_java_device_stroke_text(fz_context *ctx, fz_device *dev, const fz_text *text,
jobject jctm = to_Matrix(ctx, env, ctm);
jobject jcs = to_ColorSpace(ctx, env, cs);
jfloatArray jcolor = to_jfloatArray(ctx, env, color, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_strokeText, jtext, jstate, jctm, jcs, jcolor, alpha);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_strokeText, jtext, jstate, jctm, jcs, jcolor, alpha, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
@@ -1966,7 +1990,7 @@ fz_java_device_ignore_text(fz_context *ctx, fz_device *dev, const fz_text *text,
}
static void
-fz_java_device_fill_shade(fz_context *ctx, fz_device *dev, fz_shade *shd, const fz_matrix *ctm, float alpha)
+fz_java_device_fill_shade(fz_context *ctx, fz_device *dev, fz_shade *shd, const fz_matrix *ctm, float alpha, const fz_color_params *color_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1979,7 +2003,7 @@ fz_java_device_fill_shade(fz_context *ctx, fz_device *dev, fz_shade *shd, const
}
static void
-fz_java_device_fill_image(fz_context *ctx, fz_device *dev, fz_image *img, const fz_matrix *ctm, float alpha)
+fz_java_device_fill_image(fz_context *ctx, fz_device *dev, fz_image *img, const fz_matrix *ctm, float alpha, const fz_color_params *color_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -1992,7 +2016,7 @@ fz_java_device_fill_image(fz_context *ctx, fz_device *dev, fz_image *img, const
}
static void
-fz_java_device_fill_image_mask(fz_context *ctx, fz_device *dev, fz_image *img, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha)
+fz_java_device_fill_image_mask(fz_context *ctx, fz_device *dev, fz_image *img, const fz_matrix *ctm, fz_colorspace *cs, const float *color, float alpha, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
@@ -2000,8 +2024,9 @@ fz_java_device_fill_image_mask(fz_context *ctx, fz_device *dev, fz_image *img, c
jobject jctm = to_Matrix(ctx, env, ctm);
jobject jcs = to_ColorSpace(ctx, env, cs);
jfloatArray jcolor = to_jfloatArray(ctx, env, color, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillImageMask, jimg, jctm, jcs, jcolor, alpha);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_fillImageMask, jimg, jctm, jcs, jcolor, alpha, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
@@ -2031,15 +2056,16 @@ fz_java_device_pop_clip(fz_context *ctx, fz_device *dev)
}
static void
-fz_java_device_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *rect, int luminosity, fz_colorspace *cs, const float *bc)
+fz_java_device_begin_mask(fz_context *ctx, fz_device *dev, const fz_rect *rect, int luminosity, fz_colorspace *cs, const float *bc, const fz_color_params *cs_params)
{
fz_java_device *jdev = (fz_java_device *)dev;
JNIEnv *env = jdev->env;
jobject jrect = to_Rect(ctx, env, rect);
jobject jcs = to_ColorSpace(ctx, env, cs);
jfloatArray jbc = to_jfloatArray(ctx, env, bc, cs ? fz_colorspace_n(ctx, cs) : FZ_MAX_COLORS);
+ int jcp = to_ColorParams_safe(ctx, env, cs_params);
- (*env)->CallVoidMethod(env, jdev->self, mid_Device_beginMask, jrect, (jint)luminosity, jcs, jbc);
+ (*env)->CallVoidMethod(env, jdev->self, mid_Device_beginMask, jrect, (jint)luminosity, jcs, jbc, jcp);
if ((*env)->ExceptionCheck(env))
fz_throw_java(ctx, env);
}
@@ -2290,7 +2316,7 @@ FUN(NativeDevice_close)(JNIEnv *env, jobject self)
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha)
+FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
@@ -2299,6 +2325,7 @@ FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean ev
fz_colorspace *cs = from_ColorSpace(env, jcs);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
if (!ctx || !dev) return;
if (!path) { jni_throw_arg(env, "path must not be null"); return; }
@@ -2306,7 +2333,7 @@ FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean ev
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_fill_path(ctx, dev, path, even_odd, &ctm, cs, color, alpha);
+ fz_fill_path(ctx, dev, path, even_odd, &ctm, cs, color, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2314,7 +2341,7 @@ FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean ev
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha)
+FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
@@ -2322,6 +2349,7 @@ FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject j
fz_stroke_state *stroke = from_StrokeState(env, jstroke);
fz_matrix ctm = from_Matrix(env, jctm);
fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
@@ -2332,7 +2360,7 @@ FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject j
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_stroke_path(ctx, dev, path, stroke, &ctm, cs, color, alpha);
+ fz_stroke_path(ctx, dev, path, stroke, &ctm, cs, color, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2384,13 +2412,14 @@ FUN(NativeDevice_clipStrokePath)(JNIEnv *env, jobject self, jobject jpath, jobje
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha)
+FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
fz_text *text = from_Text(env, jtext);
fz_matrix ctm = from_Matrix(env, jctm);
fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
@@ -2400,7 +2429,7 @@ FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jct
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_fill_text(ctx, dev, text, &ctm, cs, color, alpha);
+ fz_fill_text(ctx, dev, text, &ctm, cs, color, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2408,7 +2437,7 @@ FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jct
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha)
+FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
@@ -2416,6 +2445,7 @@ FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject j
fz_stroke_state *stroke = from_StrokeState(env, jstroke);
fz_matrix ctm = from_Matrix(env, jctm);
fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
@@ -2426,7 +2456,7 @@ FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject j
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_stroke_text(ctx, dev, text, stroke, &ctm, cs, color, alpha);
+ fz_stroke_text(ctx, dev, text, stroke, &ctm, cs, color, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2499,12 +2529,13 @@ FUN(NativeDevice_ignoreText)(JNIEnv *env, jobject self, jobject jtext, jobject j
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshd, jobject jctm, jfloat alpha)
+FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshd, jobject jctm, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
fz_shade *shd = from_Shade(env, jshd);
fz_matrix ctm = from_Matrix(env, jctm);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
NativeDeviceInfo *info;
if (!ctx || !dev) return;
@@ -2512,7 +2543,7 @@ FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshd, jobject jct
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_fill_shade(ctx, dev, shd, &ctm, alpha);
+ fz_fill_shade(ctx, dev, shd, &ctm, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2520,12 +2551,13 @@ FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshd, jobject jct
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jfloat alpha)
+FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
fz_image *img = from_Image(env, jimg);
fz_matrix ctm = from_Matrix(env, jctm);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
NativeDeviceInfo *info;
if (!ctx || !dev) return;
@@ -2533,7 +2565,7 @@ FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jct
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_fill_image(ctx, dev, img, &ctm, alpha);
+ fz_fill_image(ctx, dev, img, &ctm, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2541,13 +2573,14 @@ FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jct
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_fillImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha)
+FUN(NativeDevice_fillImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
fz_image *img = from_Image(env, jimg);
fz_matrix ctm = from_Matrix(env, jctm);
fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
@@ -2557,7 +2590,7 @@ FUN(NativeDevice_fillImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_fill_image_mask(ctx, dev, img, &ctm, cs, color, alpha);
+ fz_fill_image_mask(ctx, dev, img, &ctm, cs, color, alpha, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -2604,12 +2637,13 @@ FUN(NativeDevice_popClip)(JNIEnv *env, jobject self)
}
JNIEXPORT void JNICALL
-FUN(NativeDevice_beginMask)(JNIEnv *env, jobject self, jobject jrect, jboolean luminosity, jobject jcs, jfloatArray jcolor)
+FUN(NativeDevice_beginMask)(JNIEnv *env, jobject self, jobject jrect, jboolean luminosity, jobject jcs, jfloatArray jcolor, jint jcp)
{
fz_context *ctx = get_context(env);
fz_device *dev = from_Device(env, self);
fz_rect rect = from_Rect(env, jrect);
fz_colorspace *cs = from_ColorSpace(env, jcs);
+ fz_color_params cp = from_ColorParams_safe(env, jcp);
float color[FZ_MAX_COLORS];
NativeDeviceInfo *info;
@@ -2618,7 +2652,7 @@ FUN(NativeDevice_beginMask)(JNIEnv *env, jobject self, jobject jrect, jboolean l
info = lockNativeDevice(env, self);
fz_try(ctx)
- fz_begin_mask(ctx, dev, &rect, luminosity, cs, color);
+ fz_begin_mask(ctx, dev, &rect, luminosity, cs, color, &cp);
fz_always(ctx)
unlockNativeDevice(env, info);
fz_catch(ctx)
@@ -8123,7 +8157,7 @@ FUN(PDFGraftMap_graftObject)(JNIEnv *env, jobject self, jobject jobj)
/* PDFPage interface */
JNIEXPORT jobject JNICALL
-FUN(PDFPage_createAnnotation)(JNIEnv *env, jobject self, int subtype)
+FUN(PDFPage_createAnnotation)(JNIEnv *env, jobject self, jint subtype)
{
fz_context *ctx = get_context(env);
pdf_page *page = from_PDFPage(env, self);