diff --git a/src/org/geometerplus/fbreader/fbreader/BookElement.java b/src/org/geometerplus/fbreader/fbreader/BookElement.java index 8d965ade3..1d57f8d68 100644 --- a/src/org/geometerplus/fbreader/fbreader/BookElement.java +++ b/src/org/geometerplus/fbreader/fbreader/BookElement.java @@ -21,11 +21,18 @@ package org.geometerplus.fbreader.fbreader; import org.geometerplus.zlibrary.core.image.ZLImageData; import org.geometerplus.zlibrary.core.library.ZLibrary; +import org.geometerplus.zlibrary.core.util.ZLColor; import org.geometerplus.zlibrary.core.view.ZLPaintContext; import org.geometerplus.zlibrary.text.view.*; public final class BookElement extends ExtensionElement { + private final FBView myView; + + BookElement(FBView view) { + myView = view; + } + public boolean isInitialized() { return false; } @@ -35,19 +42,19 @@ public final class BookElement extends ExtensionElement { } @Override - protected int getWidth(ZLTextViewBase view) { + protected int getWidth() { // 1/\phi (= 0.618) inch width + 1/10 inch left & right margin - return Math.min(ZLibrary.Instance().getDisplayDPI() * 818 / 1000, view.getTextColumnWidth()); + return Math.min(ZLibrary.Instance().getDisplayDPI() * 818 / 1000, myView.getTextColumnWidth()); } @Override - protected int getHeight(ZLTextViewBase view) { + protected int getHeight() { // 1 inch height + 1/15 inch top & bottom margin return ZLibrary.Instance().getDisplayDPI() * 17 / 15; } @Override - protected void draw(ZLPaintContext context, ZLTextView view, ZLTextElementArea area) { + protected void draw(ZLPaintContext context, ZLTextElementArea area) { final int vMargin = ZLibrary.Instance().getDisplayDPI() / 15; final int hMargin = ZLibrary.Instance().getDisplayDPI() / 10; final ZLImageData imageData = getImageData(); @@ -63,8 +70,9 @@ public final class BookElement extends ExtensionElement { ZLPaintContext.ColorAdjustingMode.NONE ); } else { - context.setLineColor(view.getTextColor(ZLTextHyperlink.NO_LINK)); - context.setFillColor(view.getTextColor(ZLTextHyperlink.NO_LINK), 0x33); + final ZLColor color = myView.getTextColor(ZLTextHyperlink.NO_LINK); + context.setLineColor(color); + context.setFillColor(color, 0x33); final int xStart = area.XStart + hMargin; final int xEnd = area.XEnd - hMargin; final int yStart = area.YStart + vMargin; diff --git a/src/org/geometerplus/fbreader/fbreader/BookElementManager.java b/src/org/geometerplus/fbreader/fbreader/BookElementManager.java index 0c3073fab..0e7244a55 100644 --- a/src/org/geometerplus/fbreader/fbreader/BookElementManager.java +++ b/src/org/geometerplus/fbreader/fbreader/BookElementManager.java @@ -29,16 +29,18 @@ import org.geometerplus.zlibrary.text.view.ExtensionElementManager; import org.geometerplus.fbreader.network.opds.*; class BookElementManager extends ExtensionElementManager { + private final FBView myView; private final Runnable myScreenRefresher; private final Map,List> myCache = new HashMap,List>(); private Timer myTimer; - BookElementManager(final FBReaderApp reader) { + BookElementManager(final FBView view) { + myView = view; myScreenRefresher = new Runnable() { public void run() { - reader.getViewWidget().reset(); - reader.getViewWidget().repaint(); + view.Application.getViewWidget().reset(); + view.Application.getViewWidget().repaint(); } }; } @@ -55,7 +57,7 @@ class BookElementManager extends ExtensionElementManager { final int count = Integer.valueOf(data.get("size")); elements = new ArrayList(count); for (int i = 0; i < count; ++i) { - elements.add(new BookElement()); + elements.add(new BookElement(myView)); } startLoading(data.get("src"), elements); } catch (Throwable t) { diff --git a/src/org/geometerplus/fbreader/fbreader/FBView.java b/src/org/geometerplus/fbreader/fbreader/FBView.java index 3d060ba51..2dc0afb47 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBView.java +++ b/src/org/geometerplus/fbreader/fbreader/FBView.java @@ -46,7 +46,7 @@ public final class FBView extends ZLTextView { super(reader); myReader = reader; myViewOptions = reader.ViewOptions; - myBookElementManager = new BookElementManager(reader); + myBookElementManager = new BookElementManager(this); } public void setModel(ZLTextModel model) { diff --git a/src/org/geometerplus/zlibrary/text/view/ExtensionElement.java b/src/org/geometerplus/zlibrary/text/view/ExtensionElement.java index b3ae58e71..ed47d2c7f 100644 --- a/src/org/geometerplus/zlibrary/text/view/ExtensionElement.java +++ b/src/org/geometerplus/zlibrary/text/view/ExtensionElement.java @@ -22,8 +22,8 @@ package org.geometerplus.zlibrary.text.view; import org.geometerplus.zlibrary.core.view.ZLPaintContext; public abstract class ExtensionElement extends ZLTextElement { - protected abstract int getWidth(ZLTextViewBase view); - protected abstract int getHeight(ZLTextViewBase view); + protected abstract int getWidth(); + protected abstract int getHeight(); - protected abstract void draw(ZLPaintContext context, ZLTextView view, ZLTextElementArea area); + protected abstract void draw(ZLPaintContext context, ZLTextElementArea area); } diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java index b7bed6968..2d92ccd32 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java @@ -942,7 +942,7 @@ public abstract class ZLTextView extends ZLTextViewBase { context.setFillColor(new ZLColor(196, 196, 196)); context.fillPolygon(new int[] { l, l, r }, new int[] { t, b, c }); } else if (element instanceof ExtensionElement) { - ((ExtensionElement)element).draw(context, this, area); + ((ExtensionElement)element).draw(context, area); } else if (element == ZLTextElement.HSpace) { final int cw = context.getSpaceWidth(); /* diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextViewBase.java b/src/org/geometerplus/zlibrary/text/view/ZLTextViewBase.java index fff20d39e..fcd6d7c74 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextViewBase.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextViewBase.java @@ -102,7 +102,7 @@ abstract class ZLTextViewBase extends ZLView { return getContextHeight() - getTopMargin() - getBottomMargin(); } - int getTextColumnWidth() { + public int getTextColumnWidth() { return twoColumnView() ? (getContextWidth() - getLeftMargin() - getSpaceBetweenColumns() - getRightMargin()) / 2 : getContextWidth() - getLeftMargin() - getRightMargin(); @@ -200,7 +200,7 @@ abstract class ZLTextViewBase extends ZLView { } else if (element instanceof ZLTextVideoElement) { return Math.min(300, getTextColumnWidth()); } else if (element instanceof ExtensionElement) { - return ((ExtensionElement)element).getWidth(this); + return ((ExtensionElement)element).getWidth(); } else if (element == ZLTextElement.Indent) { return myTextStyle.getFirstLineIndent(metrics()); } else if (element instanceof ZLTextFixedHSpaceElement) { @@ -225,7 +225,7 @@ abstract class ZLTextViewBase extends ZLView { } else if (element instanceof ZLTextVideoElement) { return Math.min(Math.min(200, getTextAreaHeight()), getTextColumnWidth() * 2 / 3); } else if (element instanceof ExtensionElement) { - return ((ExtensionElement)element).getHeight(this); + return ((ExtensionElement)element).getHeight(); } return 0; }