package org.ebookdroid.droids.mupdf.codec; import org.ebookdroid.core.codec.OutlineLink; import android.graphics.RectF; import java.util.ArrayList; import java.util.List; public class MuPdfOutline { private static final float[] temp = new float[4]; private long docHandle; public List<OutlineLink> getOutline(final long dochandle) { final List<OutlineLink> ls = new ArrayList<OutlineLink>(); docHandle = dochandle; final long outline = open(dochandle); ttOutline(ls, outline, 0); free(dochandle); return ls; } private void ttOutline(final List<OutlineLink> ls, long outline, final int level) { while (outline > 0) { final String title = getTitle(outline); final String link = getLink(outline, docHandle); if (title != null) { final OutlineLink outlineLink = new OutlineLink(title, link, level); if (outlineLink.targetPage != -1) { int flags = fillLinkTargetPoint(docHandle, outline, temp); outlineLink.targetRect = new RectF(); outlineLink.targetRect.left = temp[0]; outlineLink.targetRect.top = temp[1]; MuPdfDocument.normalizeLinkTargetRect(docHandle, outlineLink.targetPage, outlineLink.targetRect, flags); } ls.add(outlineLink); } final long child = getChild(outline); ttOutline(ls, child, level + 1); outline = getNext(outline); } } private static native String getTitle(long outlinehandle); private static native String getLink(long outlinehandle, long dochandle); private static native int fillLinkTargetPoint(long dochandle, long outlinehandle, float[] point); private static native long getNext(long outlinehandle); private static native long getChild(long outlinehandle); private static native long open(long dochandle); private static native void free(long dochandle); }