summaryrefslogtreecommitdiff
path: root/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
diff options
context:
space:
mode:
Diffstat (limited to 'android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java57
1 files changed, 39 insertions, 18 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
index 4b6d8faac932..e43e40165efa 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java
@@ -3,6 +3,8 @@ package org.libreoffice;
import android.graphics.Bitmap;
import android.util.Log;
+import org.mozilla.gecko.gfx.BufferedCairoImage;
+import org.mozilla.gecko.gfx.CairoImage;
import org.mozilla.gecko.gfx.LayerController;
import java.nio.ByteBuffer;
@@ -11,6 +13,7 @@ import java.util.Iterator;
import org.libreoffice.kit.LibreOfficeKit;
import org.libreoffice.kit.Office;
import org.libreoffice.kit.Document;
+import org.mozilla.gecko.gfx.SubTile;
public class LOKitTileProvider implements TileProvider {
private final LayerController mLayerController;
@@ -20,8 +23,19 @@ public class LOKitTileProvider implements TileProvider {
public final Office mOffice;
public final Document mDocument;
+ private double mDPI;
+
+ private double twipToPixel(double input, double dpi) {
+ return input / 1440.0 * dpi;
+ }
+
+ private double pixelToTwip(double input, double dpi) {
+ return (input / dpi) * 1440.0;
+ }
+
public LOKitTileProvider(LayerController layerController) {
- this.mLayerController = layerController;
+ mLayerController = layerController;
+ mDPI = (double) LOKitShell.getDpi();
LibreOfficeKit.putenv("SAL_LOG=+WARN+INFO-INFO.legacy.osl-INFO.i18nlangtag");
LibreOfficeKit.init(LibreOfficeMainActivity.mAppContext);
@@ -32,62 +46,69 @@ public class LOKitTileProvider implements TileProvider {
@Override
public int getPageWidth() {
- return (int) (mDocument.getDocumentWidth() / 1440.0 * LOKitShell.getDpi());
+ return (int) twipToPixel(mDocument.getDocumentWidth(), mDPI);
}
@Override
public int getPageHeight() {
- return (int) (mDocument.getDocumentHeight() / 1440.0 * LOKitShell.getDpi());
+ return (int) twipToPixel(mDocument.getDocumentHeight(), mDPI);
}
public TileIterator getTileIterator() {
return new LoKitTileIterator();
}
- public class LoKitTileIterator implements TileIterator, Iterator<Bitmap> {
+ public class LoKitTileIterator implements TileIterator, Iterator<SubTile> {
private final double mTileWidth;
private final double mTileHeight;
- private boolean mShouldContinue = true;
-
private double mPositionWidth = 0;
private double mPositionHeight = 0;
+ private int mX = 0;
+ private int mY = 0;
private double mPageWidth;
private double mPageHeight;
public LoKitTileIterator() {
- mTileWidth = (TILE_SIZE / (double) LOKitShell.getDpi()) * 1440.0;
- mTileHeight = (TILE_SIZE / (double) LOKitShell.getDpi()) * 1440.0;
+ mTileWidth = pixelToTwip(TILE_SIZE, mDPI);
+ mTileHeight = pixelToTwip(TILE_SIZE, mDPI);
+
mPageWidth = mDocument.getDocumentWidth();
mPageHeight = mDocument.getDocumentHeight();
}
@Override
public boolean hasNext() {
- return mShouldContinue;
+ return mPositionHeight <= mPageHeight;
}
@Override
- public Bitmap next() {
+ public SubTile next() {
ByteBuffer buffer = ByteBuffer.allocateDirect(TILE_SIZE * TILE_SIZE * 4);
Bitmap bitmap = Bitmap.createBitmap(TILE_SIZE, TILE_SIZE, Bitmap.Config.ARGB_8888);
- mDocument.paintTile(buffer, TILE_SIZE, TILE_SIZE, (int) mPositionWidth, (int) mPositionHeight, (int) mTileWidth, (int) mTileHeight);
+ mDocument.paintTile(buffer, TILE_SIZE, TILE_SIZE, (int) Math.round(mPositionWidth), (int) Math.round(mPositionHeight), (int) Math.round(mTileWidth + pixelToTwip(1, mDPI)), (int) Math.round(mTileHeight+ pixelToTwip(1, mDPI)));
+
+
+ bitmap.copyPixelsFromBuffer(buffer);
+
+ CairoImage image = new BufferedCairoImage(bitmap);
+ SubTile tile = new SubTile(image, mX, mY);
+ tile.beginTransaction();
mPositionWidth += mTileWidth;
+ mX += TILE_SIZE;
if (mPositionWidth > mPageWidth) {
mPositionHeight += mTileHeight;
- mPositionWidth = 0;
- }
+ mY += TILE_SIZE;
- if (mPositionHeight > mPageHeight || mPositionHeight > 20000) {
- mShouldContinue = false;
+ mPositionWidth = 0;
+ mX = 0;
}
- bitmap.copyPixelsFromBuffer(buffer);
- return bitmap;
+ return tile;
}
@Override
@@ -96,7 +117,7 @@ public class LOKitTileProvider implements TileProvider {
}
@Override
- public Iterator<Bitmap> iterator() {
+ public Iterator<SubTile> iterator() {
return this;
}
}