1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 10:49:24 +02:00

hide link border after visiting

This commit is contained in:
Nikolay Pultsin 2011-04-02 22:57:21 +01:00
parent 01594d8cf9
commit c147a8cf87
3 changed files with 77 additions and 43 deletions

View file

@ -53,6 +53,8 @@ class ProcessHyperlinkAction extends FBAction {
public void run() { public void run() {
final ZLTextElementRegion region = Reader.getTextView().getSelectedRegion(); final ZLTextElementRegion region = Reader.getTextView().getSelectedRegion();
if (region instanceof ZLTextHyperlinkRegion) { if (region instanceof ZLTextHyperlinkRegion) {
Reader.getTextView().hideSelectedRegionBorder();
Reader.repaintView();
final ZLTextHyperlink hyperlink = ((ZLTextHyperlinkRegion)region).Hyperlink; final ZLTextHyperlink hyperlink = ((ZLTextHyperlinkRegion)region).Hyperlink;
switch (hyperlink.Type) { switch (hyperlink.Type) {
case FBHyperlinkType.EXTERNAL: case FBHyperlinkType.EXTERNAL:
@ -67,8 +69,9 @@ class ProcessHyperlinkAction extends FBAction {
Reader.tryOpenFootnote(hyperlink.Id); Reader.tryOpenFootnote(hyperlink.Id);
break; break;
} }
return;
} else if (region instanceof ZLTextImageRegion) { } else if (region instanceof ZLTextImageRegion) {
Reader.getTextView().hideSelectedRegionBorder();
Reader.repaintView();
final String uriString = ((ZLTextImageRegion)region).ImageElement.URI; final String uriString = ((ZLTextImageRegion)region).ImageElement.URI;
if (uriString != null) { if (uriString != null) {
try { try {

View file

@ -328,7 +328,7 @@ public abstract class ZLTextView extends ZLTextViewBase {
} }
final ZLTextElementRegion selectedElementRegion = getCurrentElementRegion(page); final ZLTextElementRegion selectedElementRegion = getCurrentElementRegion(page);
if (selectedElementRegion != null) { if (selectedElementRegion != null && myHighlightSelectedRegion) {
selectedElementRegion.draw(context); selectedElementRegion.draw(context);
} }
} }
@ -1307,6 +1307,12 @@ public abstract class ZLTextView extends ZLTextViewBase {
} }
private ZLTextElementRegion mySelectedRegion; private ZLTextElementRegion mySelectedRegion;
private boolean myHighlightSelectedRegion = true;
public void hideSelectedRegionBorder() {
System.err.println("set to false");
myHighlightSelectedRegion = false;
}
private ZLTextElementRegion getCurrentElementRegion(ZLTextPage page) { private ZLTextElementRegion getCurrentElementRegion(ZLTextPage page) {
final ArrayList<ZLTextElementRegion> elementRegions = page.TextElementMap.ElementRegions; final ArrayList<ZLTextElementRegion> elementRegions = page.TextElementMap.ElementRegions;
@ -1337,11 +1343,17 @@ public abstract class ZLTextView extends ZLTextViewBase {
} }
protected void selectRegion(ZLTextElementRegion region) { protected void selectRegion(ZLTextElementRegion region) {
if (region == null || !region.equals(mySelectedRegion)) {
System.err.println("set to true 1");
myHighlightSelectedRegion = true;
}
mySelectedRegion = region; mySelectedRegion = region;
} }
public void resetRegionPointer() { public void resetRegionPointer() {
mySelectedRegion = null; mySelectedRegion = null;
System.err.println("set to true 2");
myHighlightSelectedRegion = true;
} }
protected ZLTextElementRegion currentRegion() { protected ZLTextElementRegion currentRegion() {

View file

@ -145,7 +145,16 @@ class CurlAnimationProvider extends AnimationProvider {
y = Math.max(y, 4 * h / 5); y = Math.max(y, 4 * h / 5);
} }
} }
super.startAutoScrolling(forward, Math.abs(speed), direction, w, h, x, y); if (x == null && y == null) {
if (direction.IsHorizontal) {
x = speed < 0 ? w - 3 : 3;
y = 1;
} else {
x = 1;
y = speed < 0 ? h - 3 : 3;
}
}
super.startAutoScrolling(forward, speed, direction, w, h, x, y);
} }
@Override @Override
@ -154,56 +163,66 @@ class CurlAnimationProvider extends AnimationProvider {
return; return;
} }
final int cornerX = myStartX > myWidth / 2 ? myWidth : 0; final int speed = (int)Math.abs(mySpeed);
final int cornerY = myStartY > myHeight / 2 ? myHeight : 0;
final int speed = (int)mySpeed;
mySpeed *= 1.5; mySpeed *= 1.5;
final int cornerX = myStartX > myWidth / 2 ? myWidth : 0;
final int cornerY = myStartY > myHeight / 2 ? myHeight : 0;
final int boundX, boundY; final int boundX, boundY;
final boolean xOver, yOver;
if (getMode() == Mode.AutoScrollingForward) { if (getMode() == Mode.AutoScrollingForward) {
if (cornerX == 0) { boundX = cornerX == 0 ? 2 * myWidth : -myWidth;
myEndX += speed; boundY = cornerY == 0 ? 2 * myHeight : -myHeight;
boundX = 2 * myWidth;
xOver = myEndX >= boundX;
} else {
myEndX -= speed;
boundX = - myWidth;
xOver = myEndX <= boundX;
}
if (cornerY == 0) {
myEndY += speed;
boundY = 2 * myHeight;
yOver = myEndY >= boundY;
} else {
myEndY -= speed;
boundY = - myHeight;
yOver = myEndY <= boundY;
}
} else { } else {
boundX = cornerX; boundX = cornerX;
boundY = cornerY; boundY = cornerY;
if (cornerX == 0) { }
myEndX -= speed;
xOver = myEndX <= boundX; final int deltaX = Math.abs(myEndX - cornerX);
} else { final int deltaY = Math.abs(myEndY - cornerY);
myEndX += speed; final int speedX, speedY;
xOver = myEndX >= boundX; if (deltaX == 0 || deltaY == 0) {
speedX = speed;
speedY = speed;
} else if (deltaX < deltaY) {
speedX = speed;
speedY = speed * deltaY / deltaX;
} else {
speedX = speed * deltaX / deltaY;
speedY = speed;
}
final boolean xSpeedIsPositive, ySpeedIsPositive;
if (getMode() == Mode.AutoScrollingForward) {
xSpeedIsPositive = cornerX == 0;
ySpeedIsPositive = cornerY == 0;
} else {
xSpeedIsPositive = cornerX != 0;
ySpeedIsPositive = cornerY != 0;
}
if (xSpeedIsPositive) {
myEndX += speedX;
if (myEndX >= boundX) {
terminate();
} }
if (cornerY == 0) { } else {
myEndY -= speed; myEndX -= speedX;
yOver = myEndY <= boundY; if (myEndX <= boundX) {
} else { terminate();
myEndY += speed;
yOver = myEndY >= boundY;
} }
} }
if (xOver && yOver) {
terminate(); if (ySpeedIsPositive) {
} else if (xOver) { myEndY += speedY;
myEndX = boundX; if (myEndY >= boundY) {
} else if (yOver) { terminate();
myEndY = boundY; }
} else {
myEndY -= speedY;
if (myEndY <= boundY) {
terminate();
}
} }
} }
} }