package org.ebookdroid.core;
import android.graphics.RectF;
import java.util.Comparator;
import org.emdev.utils.CompareUtils;
public class PageTreeNodeComparator implements Comparator<PageTreeNode> {
final ViewState viewState;
final RectF bounds1 = new RectF();
final RectF bounds2 = new RectF();
public PageTreeNodeComparator(final ViewState viewState) {
this.viewState = viewState;
}
@Override
public int compare(final PageTreeNode node1, final PageTreeNode node2) {
final int cp = viewState.pages.currentIndex;
final int viewIndex1 = node1.page.index.viewIndex;
final int viewIndex2 = node2.page.index.viewIndex;
viewState.getBounds(node1.page, bounds1);
viewState.getBounds(node2.page, bounds2);
final boolean v1 = viewState.isNodeVisible(node1, bounds1);
final boolean v2 = viewState.isNodeVisible(node2, bounds2);
final RectF s1 = node1.pageSliceBounds;
final RectF s2 = node2.pageSliceBounds;
int res = 0;
if (viewIndex1 == cp && viewIndex2 == cp) {
res = CompareUtils.compare(s1.top, s2.top);
if (res == 0) {
res = CompareUtils.compare(s1.left, s2.left);
}
} else if (v1 && !v2) {
res = -1;
} else if (!v1 && v2) {
res = 1;
} else {
final float d1 = viewIndex1 + s1.centerY() - (cp + 0.5f);
final float d2 = viewIndex2 + s2.centerY() - (cp + 0.5f);
final int dist1 = Math.abs((int) (d1 * node1.level.zoom));
final int dist2 = Math.abs((int) (d2 * node2.level.zoom));
res = CompareUtils.compare(dist1, dist2);
if (res == 0) {
res = -CompareUtils.compare(viewIndex1, viewIndex2);
}
}
return res;
}
}