diff --git a/ChangeLog b/ChangeLog index e0b9af55c..bd8165464 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,10 @@ ===== 1.0 (Mar ??, 2011) ===== -* Differnt (and configurable) actions for short and long Back button press (original code by Steffen Siebert) +* Different (and configurable) actions for short and long Back button press (original code by Steffen Siebert) * SlovoEd dictionaries support has been fixed * Czech translation has been updated (by Marek Pavelka) * No OutOfMemoryErrors in image loading * Float series index parsing has been fixed -* Separate color for visited hyperlinks (original code by Steffen Siebert) +* Different colors for visited and non-visited hyperlinks (original code by Steffen Siebert) * Removed menubar.xml: menu list is moved into the code * Proguard obfuscation has been added; package size decreased diff --git a/src/org/geometerplus/zlibrary/ui/android/view/AnimationProvider.java b/src/org/geometerplus/zlibrary/ui/android/view/AnimationProvider.java index 4200abe54..732d9a3bc 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/AnimationProvider.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/AnimationProvider.java @@ -21,6 +21,8 @@ package org.geometerplus.zlibrary.ui.android.view; import android.graphics.*; +import org.geometerplus.zlibrary.core.view.ZLView; + abstract class AnimationProvider { protected final Paint myPaint; protected int myStartX; @@ -29,6 +31,9 @@ abstract class AnimationProvider { protected int myEndY; protected boolean myHorizontal; + protected int myWidth; + protected int myHeight; + protected AnimationProvider(Paint paint) { myPaint = paint; } @@ -37,13 +42,17 @@ abstract class AnimationProvider { return myHorizontal ? myEndX - myStartX : myEndY - myStartY; } - void setup(int startX, int startY, int endX, int endY, boolean horizontal) { + void setup(int startX, int startY, int endX, int endY, boolean horizontal, int width, int height) { myStartX = startX; myStartY = startY; myEndX = endX; myEndY = endY; myHorizontal = horizontal; + myWidth = width; + myHeight = height; } abstract void draw(Canvas canvas, Bitmap bgBitmap, Bitmap fgBitmap); + + abstract ZLView.PageIndex getPageToScrollTo(); } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/CurlAnimationProvider.java b/src/org/geometerplus/zlibrary/ui/android/view/CurlAnimationProvider.java index 5480c3315..db5666e73 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/CurlAnimationProvider.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/CurlAnimationProvider.java @@ -21,6 +21,8 @@ package org.geometerplus.zlibrary.ui.android.view; import android.graphics.*; +import org.geometerplus.zlibrary.core.view.ZLView; + class CurlAnimationProvider extends AnimationProvider { private final Paint myEdgePaint = new Paint(); @@ -32,27 +34,24 @@ class CurlAnimationProvider extends AnimationProvider { public void draw(Canvas canvas, Bitmap bgBitmap, Bitmap fgBitmap) { canvas.drawBitmap(bgBitmap, 0, 0, myPaint); - final int w = fgBitmap.getWidth(); - final int h = fgBitmap.getHeight(); - - final int cornerX = myStartX > w / 2 ? w : 0; - final int cornerY = myStartY > h / 2 ? h : 0; - final int oppositeX = Math.abs(w - cornerX); - final int oppositeY = Math.abs(h - cornerY); + final int cornerX = myStartX > myWidth / 2 ? myWidth : 0; + final int cornerY = myStartY > myHeight / 2 ? myHeight : 0; + final int oppositeX = Math.abs(myWidth - cornerX); + final int oppositeY = Math.abs(myHeight - cornerY); final int x, y; if (myHorizontal) { - x = Math.max(1, Math.min(w - 1, myEndX)); + x = Math.max(1, Math.min(myWidth - 1, myEndX)); if (cornerY == 0) { - y = Math.max(1, Math.min(h / 2, myEndY)); + y = Math.max(1, Math.min(myHeight / 2, myEndY)); } else { - y = Math.max(h / 2, Math.min(h - 1, myEndY)); + y = Math.max(myHeight / 2, Math.min(myHeight - 1, myEndY)); } } else { - y = Math.max(1, Math.min(h - 1, myEndY)); + y = Math.max(1, Math.min(myHeight - 1, myEndY)); if (cornerX == 0) { - x = Math.max(1, Math.min(w / 2, myEndX)); + x = Math.max(1, Math.min(myWidth / 2, myEndX)); } else { - x = Math.max(w / 2, Math.min(w - 1, myEndX)); + x = Math.max(myWidth / 2, Math.min(myWidth - 1, myEndX)); } } final int dX = Math.abs(x - cornerX); @@ -87,4 +86,10 @@ class CurlAnimationProvider extends AnimationProvider { path.lineTo(cornerX, y1); canvas.drawPath(path, myEdgePaint); } + + ZLView.PageIndex getPageToScrollTo() { + return myHorizontal + ? (myStartX < myWidth / 2 ? ZLView.PageIndex.previous : ZLView.PageIndex.next) + : (myStartY < myHeight / 2 ? ZLView.PageIndex.previous : ZLView.PageIndex.next); + } } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/ShiftAnimationProvider.java b/src/org/geometerplus/zlibrary/ui/android/view/ShiftAnimationProvider.java index 6b8a27881..95121f2fd 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/ShiftAnimationProvider.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/ShiftAnimationProvider.java @@ -28,26 +28,24 @@ class ShiftAnimationProvider extends SimpleAnimationProvider { @Override public void draw(Canvas canvas, Bitmap bgBitmap, Bitmap fgBitmap) { - final int w = fgBitmap.getWidth(); - final int h = fgBitmap.getHeight(); myPaint.setColor(Color.rgb(127, 127, 127)); if (myHorizontal) { final int dX = myEndX - myStartX; - canvas.drawBitmap(bgBitmap, dX > 0 ? dX - w : dX + w, 0, myPaint); + canvas.drawBitmap(bgBitmap, dX > 0 ? dX - myWidth : dX + myWidth, 0, myPaint); canvas.drawBitmap(fgBitmap, dX, 0, myPaint); - if (dX > 0 && dX < w) { - canvas.drawLine(dX, 0, dX, h + 1, myPaint); - } else if (dX < 0 && dX > -w) { - canvas.drawLine(dX + w, 0, dX + w, h + 1, myPaint); + if (dX > 0 && dX < myWidth) { + canvas.drawLine(dX, 0, dX, myHeight + 1, myPaint); + } else if (dX < 0 && dX > -myWidth) { + canvas.drawLine(dX + myWidth, 0, dX + myWidth, myHeight + 1, myPaint); } } else { final int dY = myEndY - myStartY; - canvas.drawBitmap(bgBitmap, 0, dY > 0 ? dY - h : dY + h, myPaint); + canvas.drawBitmap(bgBitmap, 0, dY > 0 ? dY - myHeight : dY + myHeight, myPaint); canvas.drawBitmap(fgBitmap, 0, dY, myPaint); - if (dY > 0 && dY < h) { - canvas.drawLine(0, dY, w + 1, dY, myPaint); - } else if (dY < 0 && dY > -h) { - canvas.drawLine(0, dY + h, w + 1, dY + h, myPaint); + if (dY > 0 && dY < myHeight) { + canvas.drawLine(0, dY, myWidth + 1, dY, myPaint); + } else if (dY < 0 && dY > -myHeight) { + canvas.drawLine(0, dY + myHeight, myWidth + 1, dY + myHeight, myPaint); } } } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/SimpleAnimationProvider.java b/src/org/geometerplus/zlibrary/ui/android/view/SimpleAnimationProvider.java index 3411cd59c..601af4125 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/SimpleAnimationProvider.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/SimpleAnimationProvider.java @@ -21,8 +21,16 @@ package org.geometerplus.zlibrary.ui.android.view; import android.graphics.Paint; +import org.geometerplus.zlibrary.core.view.ZLView; + abstract class SimpleAnimationProvider extends AnimationProvider { SimpleAnimationProvider(Paint paint) { super(paint); } + + ZLView.PageIndex getPageToScrollTo() { + return myHorizontal + ? (myStartX < myEndX ? ZLView.PageIndex.previous : ZLView.PageIndex.next) + : (myStartY < myEndY ? ZLView.PageIndex.previous : ZLView.PageIndex.next); + } } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/SlideAnimationProvider.java b/src/org/geometerplus/zlibrary/ui/android/view/SlideAnimationProvider.java index 2b1848f2e..0eba4eb5b 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/SlideAnimationProvider.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/SlideAnimationProvider.java @@ -29,24 +29,22 @@ class SlideAnimationProvider extends SimpleAnimationProvider { @Override public void draw(Canvas canvas, Bitmap bgBitmap, Bitmap fgBitmap) { canvas.drawBitmap(bgBitmap, 0, 0, myPaint); - final int w = fgBitmap.getWidth(); - final int h = fgBitmap.getHeight(); myPaint.setColor(Color.rgb(127, 127, 127)); if (myHorizontal) { final int dX = myEndX - myStartX; canvas.drawBitmap(fgBitmap, dX, 0, myPaint); - if (dX > 0 && dX < w) { - canvas.drawLine(dX, 0, dX, h + 1, myPaint); - } else if (dX < 0 && dX > -w) { - canvas.drawLine(dX + w, 0, dX + w, h + 1, myPaint); + if (dX > 0 && dX < myWidth) { + canvas.drawLine(dX, 0, dX, myHeight + 1, myPaint); + } else if (dX < 0 && dX > -myWidth) { + canvas.drawLine(dX + myWidth, 0, dX + myWidth, myHeight + 1, myPaint); } } else { final int dY = myEndY - myStartY; canvas.drawBitmap(fgBitmap, 0, dY, myPaint); - if (dY > 0 && dY < h) { - canvas.drawLine(0, dY, w + 1, dY, myPaint); - } else if (dY < 0 && dY > -h) { - canvas.drawLine(0, dY + h, w + 1, dY + h, myPaint); + if (dY > 0 && dY < myHeight) { + canvas.drawLine(0, dY, myWidth + 1, dY, myPaint); + } else if (dY < 0 && dY > -myHeight) { + canvas.drawLine(0, dY + myHeight, myWidth + 1, dY + myHeight, myPaint); } } } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidWidget.java b/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidWidget.java index efcbdc854..e66b7e040 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidWidget.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidWidget.java @@ -207,7 +207,8 @@ public class ZLAndroidWidget extends View implements View.OnLongClickListener { getAnimationProvider().setup( myStartX, myStartY, myEndX, myEndY, - myScrollHorizontally + myScrollHorizontally, + getWidth(), getMainAreaHeight() ); getAnimationProvider().draw( canvas, @@ -230,25 +231,24 @@ public class ZLAndroidWidget extends View implements View.OnLongClickListener { } public void scrollManually(int startX, int startY, int endX, int endY, boolean horizontally) { - myScrollingState = ScrollingState.ManualScrolling; - - myScrollHorizontally = horizontally; - final int shift = horizontally ? endX - startX : endY - startY; - if (myMainBitmap == null) { return; } - if ((shift > 0 && getAnimationProvider().getScrollingShift() <= 0) || - (shift < 0 && getAnimationProvider().getScrollingShift() >= 0)) { - mySecondaryBitmapIsUpToDate = false; - } + myScrollingState = ScrollingState.ManualScrolling; + myScrollHorizontally = horizontally; myStartX = startX; myStartY = startY; myEndX = endX; myEndY = endY; - setPageToScrollTo(shift < 0 ? ZLView.PageIndex.next : ZLView.PageIndex.previous); + getAnimationProvider().setup( + startX, startY, + endX, endY, + horizontally, + getHeight(), getMainAreaHeight() + ); + setPageToScrollTo(getAnimationProvider().getPageToScrollTo()); drawOnBitmap(mySecondaryBitmap); postInvalidate(); }