package ar.rulosoft.mimanganu.componentes.readers.continuos;
import android.content.Context;
import android.view.MotionEvent;
/**
* Created by Raul on 25/10/2015.
*/
public class L2RReader extends HorizontalReader {
float totalWidth = 0;
boolean firstTime = false;
public L2RReader(Context context) {
super(context);
}
@Override
public void relativeScroll(double distanceX, double distanceY) {
if (xScroll + distanceX > (((totalWidth * mScaleFactor) - screenWidth)) / mScaleFactor) {
xScroll = ((totalWidth * mScaleFactor) - screenWidth) / mScaleFactor;
stopAnimationOnHorizontalOver = true;
} else if (xScroll + distanceX > 0) {
xScroll += distanceX;
} else {
xScroll = 0;
stopAnimationOnHorizontalOver = true;
}
if (mScaleFactor >= 1) {
if (yScroll + distanceY > (((screenHeight * mScaleFactor) - screenHeight)) / mScaleFactor) {
yScroll = ((screenHeight * mScaleFactor) - screenHeight) / mScaleFactor;
stopAnimationOnVerticalOver = true;
} else if (yScroll + distanceY < 0) {
yScroll = 0;
} else {
yScroll += distanceY;
stopAnimationOnVerticalOver = true;
}
} else {
yScroll = (screenHeightSS - screenHeight) / 2;
stopAnimationOnVerticalOver = true;
}
}
@Override
public void absoluteScroll(float x, float y) {
if (x > (((totalWidth * mScaleFactor) - screenWidth)) / mScaleFactor) {
xScroll = ((totalWidth * mScaleFactor) - screenWidth) / mScaleFactor;
stopAnimationOnHorizontalOver = true;
} else if (x > 0) {
xScroll = x;
} else {
xScroll = 0;
stopAnimationOnHorizontalOver = true;
}
if (mScaleFactor >= 1) {
if (y > (((screenHeight * mScaleFactor) - screenHeight)) / mScaleFactor) {
yScroll = ((screenHeight * mScaleFactor) - screenHeight) / mScaleFactor;
stopAnimationOnVerticalOver = true;
} else if (y < 0) {
yScroll = 0;
} else {
yScroll = y;
stopAnimationOnVerticalOver = true;
}
} else {
yScroll = (screenHeightSS - screenHeight) / 2;
stopAnimationOnVerticalOver = true;
}
}
@Override
protected void calculateVisibilities() {
float acc = 0;
for (int i = pages.size() - 1; i >= 0; i--) {
Page d = pages.get(i);
d.init_visibility = (float) Math.floor(acc);
acc += d.scaled_width;
acc = (float) Math.floor(acc);
d.end_visibility = acc;
}
totalWidth = acc;
if (firstTime) {
xScroll = getPagePosition(0);
firstTime = false;
}
pagesLoaded = true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, final float velocityX, final float velocityY) {
//Log.d("L2RRe", "" + e1.getX() + " " + e2.getX() + " xS: " + xScroll + " yS: " + yScroll);
if (readerListener != null && e2.getX() - e1.getX() > 100 && (xScroll < 0.1)) {
readerListener.onEndOver();
return true;
} else if (readerListener != null && e1.getX() - e2.getX() > 100 && (xScroll == (((totalWidth * mScaleFactor) - screenWidth)) / mScaleFactor)) {
readerListener.onStartOver();
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
/*
* Starting from 0
*/
@Override
public float getPagePosition(int page) {
if (pages != null && pages.size() > 1) {
if (page < 0) {
return pages.get(0).end_visibility;
} else if (page < pages.size()) {
if (pages.get(page).scaled_width * mScaleFactor > screenWidth) {
return (pages.get(page).end_visibility - (screenWidth / mScaleFactor));
} else {
int add = (int) (pages.get(page).scaled_width * mScaleFactor - screenWidth) / 2;
return (pages.get(page).end_visibility - (screenWidth / mScaleFactor)) - add;
}
} else {
return pages.get(pages.size() - 1).end_visibility - (screenWidth / mScaleFactor);
}
} else {
return 0;
}
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (readerListener != null)
if (e.getX() < getWidth() / 4) {
if (isLastPageVisible())
readerListener.onEndOver();
else
goToPage(currentPage + 2);
} else if (e.getX() > getWidth() / 4 * 3) {
if (currentPage == 0)
readerListener.onStartOver();
else
goToPage(currentPage);
} else {
readerListener.onMenuRequired();
}
return false;
}
}