package ar.rulosoft.mimanganu.componentes.readers.continuos;
import android.content.Context;
import android.view.MotionEvent;
/**
* Created by Raul on 25/10/2015.
*
*/
public class R2LReader extends HorizontalReader {
public R2LReader(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 = 0; i < pages.size(); 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;
pagesLoaded = true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, final float velocityX, final float velocityY) {
//Log.d("R2LRe",""+e1.getX()+" "+e2.getX()+" xS: "+xScroll+" yS: "+yScroll);
if (readerListener != null && e1.getX() - e2.getX() > 100 && (xScroll == (((totalWidth * mScaleFactor) - screenWidth)) / mScaleFactor)) {
readerListener.onEndOver();
return true;
} else if (readerListener != null && e2.getX() - e1.getX() > 100 && (xScroll < 0.1)) {
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).init_visibility;
} else if (page < pages.size()) {
if (pages.get(page).scaled_width * mScaleFactor > screenWidth) {
return pages.get(page).init_visibility;
} else {
int add = (int) (pages.get(page).scaled_width * mScaleFactor - screenWidth) / 2;
return pages.get(page).init_visibility + add;
}
} else {
return pages.get(pages.size() - 1).end_visibility;
}
} else {
return 0;
}
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
if (e.getX() < getWidth() / 4) {
if (currentPage == 0)
readerListener.onStartOver();
else
goToPage(currentPage);
} else if (e.getX() > getWidth() / 4 * 3) {
if (isLastPageVisible())
readerListener.onEndOver();
else
goToPage(currentPage + 2);
} else {
readerListener.onMenuRequired();
}
return false;
}
}