diff --git a/src/org/geometerplus/zlibrary/text/view/BookElementsHolder.java b/src/org/geometerplus/zlibrary/text/view/BookElementsHolder.java index 92e00d298..096da9ce1 100644 --- a/src/org/geometerplus/zlibrary/text/view/BookElementsHolder.java +++ b/src/org/geometerplus/zlibrary/text/view/BookElementsHolder.java @@ -22,11 +22,22 @@ package org.geometerplus.zlibrary.text.view; import java.util.*; class BookElementsHolder { - private static final Map,List> ourCache = + private final Runnable myScreenRefresher; + private final Map,List> myCache = new HashMap,List>(); + private Timer myTimer; - static synchronized List getElements(Map data) { - List elements = ourCache.get(data); + BookElementsHolder(final ZLTextView view) { + myScreenRefresher = new Runnable() { + public void run() { + view.Application.getViewWidget().reset(); + view.Application.getViewWidget().repaint(); + } + }; + } + + synchronized List getElements(Map data) { + List elements = myCache.get(data); if (elements == null) { try { final int count = Integer.valueOf(data.get("size")); @@ -38,12 +49,12 @@ class BookElementsHolder { } catch (Throwable t) { return Collections.emptyList(); } - ourCache.put(data, elements); + myCache.put(data, elements); } return Collections.unmodifiableList(elements); } - private static void startLoading(final String url, final List elements) { + private void startLoading(final String url, final List elements) { new Thread() { public void run() { } diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextParagraphCursor.java b/src/org/geometerplus/zlibrary/text/view/ZLTextParagraphCursor.java index cc29ad335..78762c49c 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextParagraphCursor.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextParagraphCursor.java @@ -29,6 +29,7 @@ import org.geometerplus.zlibrary.text.model.*; public final class ZLTextParagraphCursor { private static final class Processor { + private final ZLTextView myView; private final ZLTextParagraph myParagraph; private final LineBreaker myLineBreaker; private final ArrayList myElements; @@ -37,7 +38,8 @@ public final class ZLTextParagraphCursor { private int myLastMark; private final List myMarks; - private Processor(ZLTextParagraph paragraph, LineBreaker lineBreaker, List marks, int paragraphIndex, ArrayList elements) { + private Processor(ZLTextView view, ZLTextParagraph paragraph, LineBreaker lineBreaker, List marks, int paragraphIndex, ArrayList elements) { + myView = view; myParagraph = paragraph; myLineBreaker = lineBreaker; myElements = elements; @@ -51,7 +53,7 @@ public final class ZLTextParagraphCursor { } myFirstMark = i; myLastMark = myFirstMark; - for (; (myLastMark != myMarks.size()) && (((ZLTextMark)myMarks.get(myLastMark)).ParagraphIndex == paragraphIndex); myLastMark++); + for (; myLastMark != myMarks.size() && ((ZLTextMark)myMarks.get(myLastMark)).ParagraphIndex == paragraphIndex; myLastMark++); myOffset = 0; } @@ -110,7 +112,7 @@ public final class ZLTextParagraphCursor { { final FBReaderSpecialEntry entry = it.getFBReaderSpecialEntry(); if ("opds".equals(entry.Type)) { - elements.addAll(BookElementsHolder.getElements(entry.Data)); + elements.addAll(myView.Holder.getElements(entry.Data)); } break; } @@ -223,7 +225,7 @@ public final class ZLTextParagraphCursor { ZLTextParagraph paragraph = Model.getParagraph(Index); switch (paragraph.getKind()) { case ZLTextParagraph.Kind.TEXT_PARAGRAPH: - new Processor(paragraph, new LineBreaker(Model.getLanguage()), Model.getMarks(), Index, myElements).fill(); + new Processor(View, paragraph, new LineBreaker(Model.getLanguage()), Model.getMarks(), Index, myElements).fill(); break; case ZLTextParagraph.Kind.EMPTY_LINE_PARAGRAPH: myElements.add(new ZLTextWord(SPACE_ARRAY, 0, 1, 0)); diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java index 1f136b02b..1a77ee88d 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java @@ -68,6 +68,8 @@ public abstract class ZLTextView extends ZLTextViewBase { private final ZLTextParagraphCursorCache myCursorCache = new ZLTextParagraphCursorCache(); + final BookElementsHolder Holder = new BookElementsHolder(this); + public ZLTextView(ZLApplication application) { super(application); } @@ -957,6 +959,17 @@ public abstract class ZLTextView extends ZLTextViewBase { ZLPaintContext.ColorAdjustingMode.NONE ); } else { + context.setLineColor(getTextColor(ZLTextHyperlink.NO_LINK)); + context.setFillColor(getTextColor(ZLTextHyperlink.NO_LINK), 0x33); + final int xStart = area.XStart + hMargin; + final int xEnd = area.XEnd - hMargin; + final int yStart = area.YStart + vMargin; + final int yEnd = area.YEnd - vMargin; + context.fillRectangle(xStart, yStart, xEnd, yEnd); + context.drawLine(xStart, yStart, xStart, yEnd); + context.drawLine(xStart, yEnd, xEnd, yEnd); + context.drawLine(xEnd, yEnd, xEnd, yStart); + context.drawLine(xEnd, yStart, xStart, yStart); } } else if (element == ZLTextElement.HSpace) { final int cw = context.getSpaceWidth();