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

ZLTextHighlighting.getBackgroundColor()

This commit is contained in:
Nikolay Pultsin 2013-04-30 16:36:03 +02:00
parent 18b720ba65
commit 0e8ea71169
6 changed files with 39 additions and 20 deletions

View file

@ -389,12 +389,12 @@ public final class FBView extends ZLTextView {
}
@Override
public ZLColor getSelectedBackgroundColor() {
public ZLColor getSelectionBackgroundColor() {
return myReader.getColorProfile().SelectionBackgroundOption.getValue();
}
@Override
public ZLColor getSelectedForegroundColor() {
public ZLColor getSelectionForegroundColor() {
return myReader.getColorProfile().SelectionForegroundOption.getValue();
}
@ -415,7 +415,7 @@ public final class FBView extends ZLTextView {
}
@Override
public ZLColor getHighlightingColor() {
public ZLColor getHighlightingBackgroundColor() {
return myReader.getColorProfile().HighlightingOption.getValue();
}

View file

@ -19,6 +19,8 @@
package org.geometerplus.zlibrary.text.view;
import org.geometerplus.zlibrary.core.util.ZLColor;
interface ZLTextHighlighting {
boolean clear();
@ -27,4 +29,6 @@ interface ZLTextHighlighting {
ZLTextPosition getEndPosition();
ZLTextElementArea getStartArea(ZLTextPage page);
ZLTextElementArea getEndArea(ZLTextPage page);
ZLColor getBackgroundColor();
}

View file

@ -19,10 +19,17 @@
package org.geometerplus.zlibrary.text.view;
import org.geometerplus.zlibrary.core.util.ZLColor;
class ZLTextManualHighlighting implements ZLTextHighlighting {
private final ZLTextView myView;
private ZLTextPosition myStartPosition;
private ZLTextPosition myEndPosition;
ZLTextManualHighlighting(ZLTextView view) {
myView = view;
}
void setup(ZLTextPosition start, ZLTextPosition end) {
myStartPosition = new ZLTextFixedPosition(start);
myEndPosition = new ZLTextFixedPosition(end);
@ -56,4 +63,8 @@ class ZLTextManualHighlighting implements ZLTextHighlighting {
public ZLTextElementArea getEndArea(ZLTextPage page) {
return page.TextElementMap.getLastBefore(myEndPosition);
}
public ZLColor getBackgroundColor() {
return myView.getHighlightingBackgroundColor();
}
}

View file

@ -19,6 +19,8 @@
package org.geometerplus.zlibrary.text.view;
import org.geometerplus.zlibrary.core.util.ZLColor;
class ZLTextSelection implements ZLTextHighlighting {
static class Point {
int X;
@ -261,6 +263,10 @@ class ZLTextSelection implements ZLTextHighlighting {
return cmp > 0 || (cmp == 0 && !lastPageArea.isLastInElement());
}
public ZLColor getBackgroundColor() {
return myView.getSelectionBackgroundColor();
}
private class Scroller implements Runnable {
private final ZLTextPage myPage;
private final boolean myScrollForward;

View file

@ -60,13 +60,11 @@ public abstract class ZLTextView extends ZLTextViewBase {
private ZLTextRegion.Soul mySelectedRegionSoul;
private boolean myHighlightSelectedRegion = true;
private ZLTextSelection mySelection;
private ZLTextManualHighlighting myHighlighting;
private final ZLTextSelection mySelection = new ZLTextSelection(this);
private final ZLTextManualHighlighting myHighlighting = new ZLTextManualHighlighting(this);
public ZLTextView(ZLApplication application) {
super(application);
mySelection = new ZLTextSelection(this);
myHighlighting = new ZLTextManualHighlighting();
}
public synchronized void setModel(ZLTextModel model) {
@ -743,14 +741,14 @@ public abstract class ZLTextView extends ZLTextViewBase {
}
private void drawBackgroung(
ZLTextHighlighting highligting, ZLColor color,
ZLTextHighlighting highlighting,
ZLTextPage page, ZLTextLineInfo info, int from, int to, int x, int y
) {
if (!highligting.isEmpty() && from != to) {
if (!highlighting.isEmpty() && from != to) {
final ZLTextElementArea fromArea = page.TextElementMap.get(from);
final ZLTextElementArea toArea = page.TextElementMap.get(to - 1);
final ZLTextElementArea selectionStartArea = highligting.getStartArea(page);
final ZLTextElementArea selectionEndArea = highligting.getEndArea(page);
final ZLTextElementArea selectionStartArea = highlighting.getStartArea(page);
final ZLTextElementArea selectionEndArea = highlighting.getEndArea(page);
if (selectionStartArea != null
&& selectionEndArea != null
&& selectionStartArea.compareTo(toArea) <= 0
@ -768,7 +766,7 @@ public abstract class ZLTextView extends ZLTextViewBase {
} else {
right = selectionEndArea.XEnd;
}
getContext().setFillColor(color);
getContext().setFillColor(highlighting.getBackgroundColor());
getContext().fillRectangle(left, top, right, bottom);
}
}
@ -776,8 +774,8 @@ public abstract class ZLTextView extends ZLTextViewBase {
private static final char[] SPACE = new char[] { ' ' };
private void drawTextLine(ZLTextPage page, ZLTextLineInfo info, int from, int to, int x, int y) {
drawBackgroung(mySelection, getSelectedBackgroundColor(), page, info, from, to, x, y);
drawBackgroung(myHighlighting, getHighlightingColor(), page, info, from, to, x, y);
drawBackgroung(mySelection, page, info, from, to, x, y);
drawBackgroung(myHighlighting, page, info, from, to, x, y);
final ZLPaintContext context = getContext();
final ZLTextParagraphCursor paragraph = info.ParagraphCursor;
@ -798,7 +796,7 @@ public abstract class ZLTextView extends ZLTextViewBase {
drawWord(
areaX, areaY, (ZLTextWord)element, charIndex, -1, false,
mySelection.isAreaSelected(area)
? getSelectedForegroundColor() : getTextColor(getTextStyle().Hyperlink)
? getSelectionForegroundColor() : getTextColor(getTextStyle().Hyperlink)
);
} else if (element instanceof ZLTextImageElement) {
final ZLTextImageElement imageElement = (ZLTextImageElement)element;
@ -836,7 +834,7 @@ public abstract class ZLTextView extends ZLTextViewBase {
area.XStart, area.YEnd - context.getDescent() - getTextStyle().getVerticalShift(),
word, start, len, area.AddHyphenationSign,
mySelection.isAreaSelected(area)
? getSelectedForegroundColor() : getTextColor(getTextStyle().Hyperlink)
? getSelectionForegroundColor() : getTextColor(getTextStyle().Hyperlink)
);
}
}

View file

@ -88,10 +88,10 @@ abstract class ZLTextViewBase extends ZLView {
public abstract ZLFile getWallpaperFile();
public abstract ZLPaintContext.WallpaperMode getWallpaperMode();
public abstract ZLColor getBackgroundColor();
public abstract ZLColor getSelectedBackgroundColor();
public abstract ZLColor getSelectedForegroundColor();
public abstract ZLColor getSelectionBackgroundColor();
public abstract ZLColor getSelectionForegroundColor();
public abstract ZLColor getHighlightingBackgroundColor();
public abstract ZLColor getTextColor(ZLTextHyperlink hyperlink);
public abstract ZLColor getHighlightingColor();
ZLPaintContext.Size getTextAreaSize() {
return new ZLPaintContext.Size(getTextColumnWidth(), getTextAreaHeight());
@ -319,7 +319,7 @@ abstract class ZLTextViewBase extends ZLView {
}
if (markStart < length) {
context.setFillColor(getHighlightingColor());
context.setFillColor(getHighlightingBackgroundColor());
int endPos = Math.min(markStart + markLen, length);
final int endX = x + context.getStringWidth(str, offset + markStart, endPos - markStart);
context.fillRectangle(x, y - context.getStringHeight(), endX - 1, y + context.getDescent());