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 SinglePageSimpleCurler extends AbstractSinglePageCurler {
public SinglePageSimpleCurler(final SinglePageController singlePageDocumentView) {
super(PageAnimationType.CURLER, singlePageDocumentView);
}
/**
* {@inheritDoc}
*
* @see org.ebookdroid.core.curl.AbstractPageAnimator#getInitialXForBackFlip(int)
*/
@Override
protected int getInitialXForBackFlip(final int width) {
return width;
}
/**
* {@inheritDoc}
*
* @see org.ebookdroid.core.curl.AbstractPageAnimator#updateValues()
*/
@Override
protected void updateValues() {
final int width = view.getWidth();
final int height = view.getHeight();
// Calculate point A
mA.x = width - mMovement.x;
mA.y = height;
// Calculate point D
mD.x = 0;
mD.y = 0;
if (mA.x > width / 2) {
mD.x = width;
mD.y = height - (width - mA.x) * height / mA.x;
} else {
mD.x = 2 * mA.x;
mD.y = 0;
}
// Now calculate E and F taking into account that the line
// AD is perpendicular to FB and EC. B and C are fixed points.
final float tanA = (height - mD.y) / (mD.x + mMovement.x - width);
final float _cos = (1 - tanA * tanA) / (1 + tanA * tanA);
final float _sin = 2 * tanA / (1 + tanA * tanA);
// And get F
mF.x = (float) (width - mMovement.x + _cos * mMovement.x);
mF.y = (float) (height - _sin * mMovement.x);
// If the x position of A is above half of the page we are still not
// folding the upper-right edge and so E and D are equal.
if (mA.x > width / 2) {
mE.x = mD.x;
mE.y = mD.y;
} else {
// So get E
mE.x = (float) (mD.x + _cos * (width - mD.x));
mE.y = (float) -(_sin * (width - mD.x));
}
}
}