diff options
Diffstat (limited to 'android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java')
-rw-r--r-- | android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java | 57 |
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; } } |