package org.ebookdroid.core.curl; import org.ebookdroid.core.SinglePageController; /** * The Class SinglePageCurler. * * Used for drawing page curl animation * * @author Moritz 'Moss' Wundke (b.thax.dcg@gmail.com) * */ public class SinglePageDynamicCurler extends AbstractSinglePageCurler { public SinglePageDynamicCurler(final SinglePageController singlePageDocumentView) { super(PageAnimationType.CURLER_DYNAMIC, singlePageDocumentView); } /** * {@inheritDoc} * * @see org.ebookdroid.core.curl.AbstractPageAnimator#getInitialXForBackFlip(int) */ @Override protected int getInitialXForBackFlip(final int width) { return width << 1; } /** * {@inheritDoc} * * @see org.ebookdroid.core.curl.AbstractPageAnimator#updateValues() */ @Override protected void updateValues() { final int width = view.getWidth(); final int height = view.getHeight(); // F will follow the finger, we add a small displacement // So that we can see the edge mF.x = width - mMovement.x + 0.1f; mF.y = height - mMovement.y + 0.1f; // Set min points if (mA.x == 0) { mF.x = Math.min(mF.x, mOldF.x); mF.y = Math.max(mF.y, mOldF.y); } // Get diffs final float deltaX = width - mF.x; final float deltaY = height - mF.y; final float delta_sq = deltaX * deltaX + deltaY * deltaY; final float tangA = deltaY / deltaX; mA.x = width - (delta_sq / (2 * deltaX)); mA.y = height; mD.y = height - (delta_sq / (2 * deltaY)); mD.x = width; mA.x = Math.max(0, mA.x); if (mA.x == 0) { mOldF.x = mF.x; mOldF.y = mF.y; } // Get W mE.x = mD.x; mE.y = mD.y; // Correct if (mD.y < 0) { mD.x = width + tangA * mD.y; mE.y = 0; mE.x = width + 2 * mD.y * tangA / (1 - tangA * tangA); } } }