package org.ebookdroid.droids.mupdf.codec;
import org.ebookdroid.core.codec.PageLink;
import android.graphics.RectF;
import java.util.ArrayList;
import java.util.List;
public class MuPdfLinks {
private static final int FZ_LINK_NONE = 0;
private static final int FZ_LINK_GOTO = 1;
private static final int FZ_LINK_URI = 2;
private static final float[] temp = new float[4];
static List<PageLink> getPageLinks(final long docHandle, final long pageHandle, final RectF pageBounds) {
final List<PageLink> links = new ArrayList<PageLink>();
for (long linkHandle = getFirstPageLink(docHandle, pageHandle); linkHandle != 0; linkHandle = getNextPageLink(linkHandle)) {
final PageLink link = new PageLink();
final int type = getPageLinkType(docHandle, linkHandle);
link.rectType = 1;
if (fillPageLinkSourceRect(linkHandle, temp)) {
link.sourceRect = new RectF();
link.sourceRect.left = (temp[0] - pageBounds.left) / pageBounds.width();
link.sourceRect.top = (temp[1] - pageBounds.top) / pageBounds.height();
link.sourceRect.right = (temp[2] - pageBounds.left) / pageBounds.width();
link.sourceRect.bottom = (temp[3] - pageBounds.top) / pageBounds.height();
}
if (type == FZ_LINK_URI) {
link.url = getPageLinkUrl(linkHandle);
links.add(link);
} else if (type == FZ_LINK_GOTO) {
link.targetPage = getPageLinkTargetPage(docHandle, linkHandle);
if (link.targetPage > 0) {
int flags = fillPageLinkTargetPoint(docHandle, linkHandle, temp);
link.targetRect = new RectF();
link.targetRect.left = temp[0];
link.targetRect.top = temp[1];
MuPdfDocument.normalizeLinkTargetRect(docHandle, link.targetPage, link.targetRect, flags);
}
links.add(link);
}
}
return links;
}
private static native long getFirstPageLink(long dochandle, long pagehandle);
private static native long getNextPageLink(long linkhandle);
private static native int getPageLinkType(long dochandle, long linkhandle);
private static native String getPageLinkUrl(long linkhandle);
private static native boolean fillPageLinkSourceRect(long linkhandle, float[] bounds);
private static native int getPageLinkTargetPage(long dochandle, long linkhandle);
private static native int fillPageLinkTargetPoint(long dochandle, long linkhandle, float[] point);
}