summaryrefslogtreecommitdiff
path: root/platform/java
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2016-03-30 17:49:04 +0200
committerTor Andersson <tor.andersson@artifex.com>2016-03-31 13:00:41 +0200
commitd68576c3785572c1f5d41f83015b8fe6bbcbe9e8 (patch)
tree431a86edfac640864ba7f406611e8fe9929908cd /platform/java
parent32cdb2246eeb9e8109a712ec2a5dd2938e30e9b6 (diff)
downloadmupdf-d68576c3785572c1f5d41f83015b8fe6bbcbe9e8.tar.xz
Reorganize java and android source.
platform/java and platform/android are reorganized: platform/java The new JNI Java classes, mupdf_native.{c,h}, Makefile and Makejar. platform/java/example The example desktop viewer classes. platform/android/viewer The original demo viewer. ndk-build is used to build libmupdf_java.so, making reference to mupdf_native.{c,h} in platform/java.
Diffstat (limited to 'platform/java')
-rw-r--r--platform/java/Makefile70
-rw-r--r--platform/java/Makejar2
-rw-r--r--platform/java/example/PageCanvas.java (renamed from platform/java/PageCanvas.java)2
-rw-r--r--platform/java/example/TraceDevice.java (renamed from platform/java/TraceDevice.java)2
-rw-r--r--platform/java/example/Viewer.java (renamed from platform/java/Viewer.java)103
-rw-r--r--platform/java/mupdf_native.c4
6 files changed, 148 insertions, 35 deletions
diff --git a/platform/java/Makefile b/platform/java/Makefile
index 3e7df255..fc889c1a 100644
--- a/platform/java/Makefile
+++ b/platform/java/Makefile
@@ -1,22 +1,44 @@
-default: libmupdf_java.so libmupdf.jar
+OS ?= $(shell uname)
-MUPDF_CORE = ../../build/java/libmupdf.a ../../build/java/libmupdfthird.a
+ifeq "$(OS)" "Darwin"
+MUPDF_JAVA := libmupdf_java.jnilib
+JAVA_CFLAGS := \
+ -I /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/include \
+ -I /Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/include/darwin
+else
+MUPDF_JAVA := libmupdf_java.so
+JAVA_CFLAGS := \
+ -I /usr/lib/jvm/java-7-openjdk-i386/include \
+ -I /usr/lib/jvm/java-7-openjdk-i386/include/linux \
+ -I /usr/lib/jvm/java-7-openjdk-amd64/include \
+ -I /usr/lib/jvm/java-7-openjdk-amd64/include/linux
+JAVA_LIBS := \
+ $(shell pkg-config --cflags freetype2) -lz
+endif
+
+default: $(MUPDF_JAVA) libmupdf.jar
+
+MUPDF_CORE := ../../build/java/libmupdf.a ../../build/java/libmupdfthird.a
+ifeq "$(OS)" "Linux"
+$(MUPDF_CORE) :
+ $(MAKE) -C ../.. OUT=build/java XCFLAGS=-fPIC FREETYPE_DIR=/foo ZLIB_DIR=/foo build=release libs
+else
+$(MUPDF_CORE) :
+ $(MAKE) -C ../.. OUT=build/java XCFLAGS=-fPIC build=release libs
+endif
LIBRARY_JAVA_SOURCES := $(sort $(wildcard com/artifex/mupdf/fitz/*.java))
LIBRARY_JAVA_OBJECTS := $(LIBRARY_JAVA_SOURCES:%.java=%.class)
LIBRARY_JAVA_CLASSES := $(subst com/artifex/mupdf/fitz/,com.artifex.mupdf.fitz.,$(LIBRARY_JAVA_SOURCES:%.java=%))
-VIEWER_JAVA_SOURCES := $(sort $(wildcard *.java))
-VIEWER_JAVA_OBJECTS := $(VIEWER_JAVA_SOURCES:%.java=%.class)
+$(LIBRARY_JAVA_OBJECTS) : $(LIBRARY_JAVA_SOURCES)
+ javac -source 1.7 -target 1.7 $^
-$(MUPDF_CORE) :
- $(MAKE) -C ../.. OUT=build/java XCFLAGS=-fPIC \
- FREETYPE_DIR=/use/system/library \
- ZLIB_DIR=/use/system/library \
- build=release libs
+EXAMPLE_JAVA_SOURCES := $(sort $(wildcard example/*.java))
+EXAMPLE_JAVA_OBJECTS := $(EXAMPLE_JAVA_SOURCES:%.java=%.class)
-$(LIBRARY_JAVA_OBJECTS) : $(LIBRARY_JAVA_SOURCES)
- javac $^
+$(EXAMPLE_JAVA_OBJECTS) : $(EXAMPLE_JAVA_SOURCES)
+ javac -source 1.7 -target 1.7 $^
libmupdf.jar : $(LIBRARY_JAVA_OBJECTS)
rm -f $@
@@ -27,30 +49,22 @@ mupdf_native.h : $(LIBRARY_JAVA_OBJECTS)
javah -o $@ $(LIBRARY_JAVA_CLASSES)
mupdf_native.o : mupdf_native.c mupdf_native.h
- $(CC) -g -fPIC -Wall -Wextra -Wno-unused-parameter \
- -I /usr/lib/jvm/java-7-openjdk-i386/include \
- -I /usr/lib/jvm/java-7-openjdk-i386/include/linux \
- -I /usr/lib/jvm/java-7-openjdk-amd64/include \
- -I /usr/lib/jvm/java-7-openjdk-amd64/include/linux \
- -I ../../include \
- -o $@ -c $<
-
-libmupdf_java.so : mupdf_native.o $(MUPDF_CORE)
- $(CC) -shared -o $@ $^ -lfreetype -lz
+ $(CC) -g -o $@ -c $< -fPIC -Wall -Wextra -Wno-unused-parameter -I ../../include \
+ $(JAVA_CFLAGS)
-$(VIEWER_JAVA_OBJECTS) : $(VIEWER_JAVA_SOURCES)
- javac $^
+$(MUPDF_JAVA) : mupdf_native.o $(MUPDF_CORE)
+ $(CC) -shared -o $(MUPDF_JAVA) $^ $(JAVA_LIBS)
-viewer: libmupdf_java.so $(LIBRARY_JAVA_OBJECTS) $(VIEWER_JAVA_OBJECTS)
- LD_LIBRARY_PATH=. java Viewer
+viewer: $(MUPDF_JAVA) $(EXAMPLE_JAVA_OBJECTS)
+ LD_LIBRARY_PATH=. java example.Viewer
clean:
rm -f com/artifex/mupdf/fitz/*.class
- rm -f *.class
+ rm -f example/*.class
rm -f mupdf_native.o
- rm -f libmupdf_java.so
+ rm -f $(MUPDF_JAVA)
nuke: clean
- $(MAKE) -C ../.. build=release OUT=build/java clean
+ $(MAKE) -C ../.. OUT=build/java clean
.NOTPARALLEL : # disable -j option (it breaks since javac compiles all class files in one command)
diff --git a/platform/java/Makejar b/platform/java/Makejar
index 7ab3e40f..3f98127a 100644
--- a/platform/java/Makejar
+++ b/platform/java/Makejar
@@ -1,3 +1,3 @@
default:
- javac com/artifex/mupdf/fitz/*.java
+ javac -source 1.7 -target 1.7 com/artifex/mupdf/fitz/*.java
jar cf libmupdf.jar com/artifex/mupdf/fitz/*.class
diff --git a/platform/java/PageCanvas.java b/platform/java/example/PageCanvas.java
index bf20afa8..9de1abdb 100644
--- a/platform/java/PageCanvas.java
+++ b/platform/java/example/PageCanvas.java
@@ -1,3 +1,5 @@
+package example;
+
import com.artifex.mupdf.fitz.*;
import java.awt.*;
import java.awt.image.*;
diff --git a/platform/java/TraceDevice.java b/platform/java/example/TraceDevice.java
index 36ed6cd3..49c97532 100644
--- a/platform/java/TraceDevice.java
+++ b/platform/java/example/TraceDevice.java
@@ -1,3 +1,5 @@
+package example;
+
import com.artifex.mupdf.fitz.*;
public class TraceDevice extends Device implements PathWalker, TextWalker
diff --git a/platform/java/Viewer.java b/platform/java/example/Viewer.java
index a118e3d4..91b0fa1d 100644
--- a/platform/java/Viewer.java
+++ b/platform/java/example/Viewer.java
@@ -1,5 +1,9 @@
+package example;
+
import com.artifex.mupdf.fitz.*;
+import java.io.File;
+
import java.awt.Frame;
import java.awt.Label;
import java.awt.Button;
@@ -11,6 +15,10 @@ import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
+import javax.swing.JFileChooser;
+import javax.swing.filechooser.FileFilter;
+import javax.swing.JOptionPane;
+
public class Viewer extends Frame implements WindowListener, ActionListener
{
protected Document doc;
@@ -100,9 +108,96 @@ public class Viewer extends Frame implements WindowListener, ActionListener
public void windowOpened(WindowEvent event) { }
public void windowClosed(WindowEvent event) { }
- public static void main(String[] args) {
- Document doc = new Document("pdfref17.pdf");
- Viewer app = new Viewer(doc);
- app.setVisible(true);
+ public static void main(String[] args)
+ {
+ JFileChooser fileChooser = new JFileChooser();
+ fileChooser.setDialogTitle("Choose a file to open");
+ fileChooser.setFileFilter(new FileFilter()
+ {
+ public String getDescription()
+ {
+ return "Supported files (*.pdf, *,xps, *.jpg, *.jpeg, *.png, *.epub, *.cbz, *.cbr)";
+ }
+
+ public boolean accept(File f)
+ {
+ if (f.isDirectory())
+ return true;
+
+ String filename = f.getName().toLowerCase();
+ if (filename.endsWith(".pdf"))
+ return true;
+ if (filename.endsWith(".xps"))
+ return true;
+ if (filename.endsWith(".jpg"))
+ return true;
+ if (filename.endsWith(".jpeg"))
+ return true;
+ if (filename.endsWith(".png"))
+ return true;
+ if (filename.endsWith(".epub"))
+ return true;
+ if (filename.endsWith(".cbz"))
+ return true;
+ if (filename.endsWith(".cbr"))
+ return true;
+
+ return false;
+ }
+ });
+
+ while (true)
+ {
+ try
+ {
+ // get a file to open
+ int result = fileChooser.showOpenDialog(null);
+ if (result == JFileChooser.APPROVE_OPTION)
+ {
+ // user selects a file
+ File selectedFile = fileChooser.getSelectedFile();
+ if (selectedFile != null)
+ {
+ Document doc = new Document(selectedFile.getAbsolutePath());
+ if (doc != null)
+ {
+ Viewer app = new Viewer(doc);
+ if (app != null)
+ {
+ app.setVisible(true);
+ return;
+ }
+ else
+ {
+ infoBox("Cannot create Viewer for "+selectedFile.getAbsolutePath(),"Error");
+ }
+ }
+ else
+ {
+ infoBox("Cannot open "+selectedFile.getAbsolutePath(),"Error");
+ }
+ }
+ else
+ {
+ infoBox("Selected file not found.","Error");
+ }
+ }
+ else
+ {
+ infoBox("File selection cancelled.","Error");
+ return;
+ }
+
+ }
+ catch (Exception e)
+ {
+ infoBox("Exception: "+e.getMessage(),"Error");
+ }
+ }
+ }
+
+ private static void infoBox(String infoMessage, String titleBar)
+ {
+ JOptionPane.showMessageDialog(null, infoMessage, "InfoBox: " + titleBar, JOptionPane.INFORMATION_MESSAGE);
}
}
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c
index 38bd077b..55cb428f 100644
--- a/platform/java/mupdf_native.c
+++ b/platform/java/mupdf_native.c
@@ -2191,8 +2191,8 @@ FUN(Font_newNative)(JNIEnv *env, jobject self, jstring jname, jint index)
fz_try(ctx)
{
- unsigned char *data;
- unsigned int size;
+ const char *data;
+ int size;
data = fz_lookup_base14_font(ctx, name, &size);
if (data)
font = fz_new_font_from_memory(ctx, name, data, size, index, 0);