diff --git a/assets/wallpapers/leather.jpg b/assets/wallpapers/leather.jpg index a82266649..73566c800 100644 Binary files a/assets/wallpapers/leather.jpg and b/assets/wallpapers/leather.jpg differ diff --git a/assets/wallpapers/sepia.jpg b/assets/wallpapers/sepia.jpg index 9882e2224..47d8eb5b1 100644 Binary files a/assets/wallpapers/sepia.jpg and b/assets/wallpapers/sepia.jpg differ diff --git a/assets/wallpapers/wood.jpg b/assets/wallpapers/wood.jpg index 6c4836dda..01ac7b183 100644 Binary files a/assets/wallpapers/wood.jpg and b/assets/wallpapers/wood.jpg differ diff --git a/src/org/geometerplus/fbreader/fbreader/FBView.java b/src/org/geometerplus/fbreader/fbreader/FBView.java index fb1e4ecb4..d0560433c 100644 --- a/src/org/geometerplus/fbreader/fbreader/FBView.java +++ b/src/org/geometerplus/fbreader/fbreader/FBView.java @@ -26,6 +26,7 @@ import org.geometerplus.zlibrary.core.util.ZLColor; import org.geometerplus.zlibrary.core.library.ZLibrary; import org.geometerplus.zlibrary.core.view.ZLPaintContext; import org.geometerplus.zlibrary.core.filesystem.ZLFile; +import org.geometerplus.zlibrary.core.filesystem.ZLResourceFile; import org.geometerplus.zlibrary.text.model.ZLTextModel; import org.geometerplus.zlibrary.text.view.*; @@ -550,7 +551,7 @@ public final class FBView extends ZLTextView { final int infoWidth = context.getStringWidth(infoString); final ZLFile wallpaper = getWallpaperFile(); if (wallpaper != null) { - context.clear(wallpaper); + context.clear(wallpaper, wallpaper instanceof ZLResourceFile); } else { context.clear(getBackgroundColor()); } diff --git a/src/org/geometerplus/zlibrary/core/view/DummyPaintContext.java b/src/org/geometerplus/zlibrary/core/view/DummyPaintContext.java index e76797365..fb4333e7c 100644 --- a/src/org/geometerplus/zlibrary/core/view/DummyPaintContext.java +++ b/src/org/geometerplus/zlibrary/core/view/DummyPaintContext.java @@ -29,7 +29,7 @@ final class DummyPaintContext extends ZLPaintContext { DummyPaintContext() { } - public void clear(ZLFile wallpaperFile) { + public void clear(ZLFile wallpaperFile, boolean doMirror) { } public void clear(ZLColor color) { diff --git a/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java b/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java index 76e31edd1..c65119e90 100644 --- a/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java +++ b/src/org/geometerplus/zlibrary/core/view/ZLPaintContext.java @@ -41,7 +41,7 @@ abstract public class ZLPaintContext { protected ZLPaintContext() { } - abstract public void clear(ZLFile wallpaperFile); + abstract public void clear(ZLFile wallpaperFile, boolean doMirror); abstract public void clear(ZLColor color); private boolean myResetFont = true; diff --git a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java index 12ef908e3..6c27620ab 100644 --- a/src/org/geometerplus/zlibrary/text/view/ZLTextView.java +++ b/src/org/geometerplus/zlibrary/text/view/ZLTextView.java @@ -24,6 +24,7 @@ import java.util.*; import org.geometerplus.zlibrary.core.application.ZLApplication; import org.geometerplus.zlibrary.core.view.ZLPaintContext; import org.geometerplus.zlibrary.core.filesystem.ZLFile; +import org.geometerplus.zlibrary.core.filesystem.ZLResourceFile; import org.geometerplus.zlibrary.text.model.*; import org.geometerplus.zlibrary.text.hyphenation.*; @@ -256,7 +257,7 @@ public abstract class ZLTextView extends ZLTextViewBase { myContext = context; final ZLFile wallpaper = getWallpaperFile(); if (wallpaper != null) { - context.clear(wallpaper); + context.clear(wallpaper, wallpaper instanceof ZLResourceFile); } else { context.clear(getBackgroundColor()); } diff --git a/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidPaintContext.java b/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidPaintContext.java index 83f51a09b..3911d0291 100644 --- a/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidPaintContext.java +++ b/src/org/geometerplus/zlibrary/ui/android/view/ZLAndroidPaintContext.java @@ -67,20 +67,39 @@ public final class ZLAndroidPaintContext extends ZLPaintContext { private ZLFile myWallpaperFile; private Bitmap myWallpaper; @Override - public void clear(ZLFile wallpaperFile) { + public void clear(ZLFile wallpaperFile, boolean doMirror) { if (!wallpaperFile.equals(myWallpaperFile)) { myWallpaperFile = wallpaperFile; + myWallpaper = null; try { - myWallpaper = new BitmapFactory().decodeStream(wallpaperFile.getInputStream()); + final Bitmap fileBitmap = + new BitmapFactory().decodeStream(wallpaperFile.getInputStream()); + if (doMirror) { + final int w = fileBitmap.getWidth(); + final int h = fileBitmap.getHeight(); + final Bitmap wallpaper = Bitmap.createBitmap(2 * w, 2 * h, fileBitmap.getConfig()); + for (int i = 0; i < w; ++i) { + for (int j = 0; j < h; ++j) { + int color = fileBitmap.getPixel(i, j); + wallpaper.setPixel(i, j, color); + wallpaper.setPixel(i, 2 * h - j - 1, color); + wallpaper.setPixel(2 * w - i - 1, j, color); + wallpaper.setPixel(2 * w - i - 1, 2 * h - j - 1, color); + } + } + myWallpaper = wallpaper; + } else { + myWallpaper = fileBitmap; + } } catch (Throwable t) { - myWallpaper = null; + t.printStackTrace(); } } if (myWallpaper != null) { final int w = myWallpaper.getWidth(); final int h = myWallpaper.getHeight(); - for (int cw = 0; cw < myWidth; cw += w) { - for (int ch = 0; ch < myHeight; ch += h) { + for (int cw = 0, iw = 1; cw < myWidth; cw += w, ++iw) { + for (int ch = 0, ih = 1; ch < myHeight; ch += h, ++ih) { myCanvas.drawBitmap(myWallpaper, cw, ch, myFillPaint); } }