package org.ebookdroid.droids.mupdf.codec; import org.ebookdroid.common.settings.AppSettings; import org.ebookdroid.core.codec.AbstractCodecDocument; import org.ebookdroid.core.codec.CodecPage; import org.ebookdroid.core.codec.CodecPageInfo; import org.ebookdroid.core.codec.OutlineLink; import android.graphics.RectF; import java.util.List; public class MuPdfDocument extends AbstractCodecDocument { public static final int FORMAT_PDF = 0; public static final int FORMAT_XPS = 1; public static final int FORMAT_CBZ = 2; public static final int FORMAT_EPUB = 3; MuPdfDocument(final MuPdfContext context, final int format, final String fname, final String pwd) { super(context, open(AppSettings.current().pdfStorageSize << 20, format, fname, pwd)); } @Override public List<OutlineLink> getOutline() { final MuPdfOutline ou = new MuPdfOutline(); return ou.getOutline(documentHandle); } @Override public CodecPage getPage(final int pageNumber) { return MuPdfPage.createPage(documentHandle, pageNumber + 1); } @Override public int getPageCount() { return getPageCount(documentHandle); } @Override public CodecPageInfo getPageInfo(final int pageNumber) { final CodecPageInfo info = new CodecPageInfo(); final int res = getPageInfo(documentHandle, pageNumber + 1, info); if (res == -1) { return null; } else { // Check rotation info.rotation = (360 + info.rotation) % 360; return info; } } @Override protected void freeDocument() { free(documentHandle); } static void normalizeLinkTargetRect(final long docHandle, final int targetPage, final RectF targetRect, final int flags) { final CodecPageInfo cpi = new CodecPageInfo(); MuPdfDocument.getPageInfo(docHandle, targetPage, cpi); final float left = targetRect.left; final float top = targetRect.top; if (((cpi.rotation / 90) % 2) != 0) { targetRect.right = targetRect.left = left / cpi.height; targetRect.bottom = targetRect.top = top / cpi.width; } else { targetRect.right = targetRect.left = left / cpi.width; targetRect.bottom = targetRect.top = top / cpi.height; } } native static int getPageInfo(long docHandle, int pageNumber, CodecPageInfo cpi); private static native long open(int storememory, int format, String fname, String pwd); private static native void free(long handle); private static native int getPageCount(long handle); }