diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-09-16 15:39:31 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-09-18 23:05:03 +0200 |
commit | 1a42c78a594d8ea26eb2cc767772d614cb4c1285 (patch) | |
tree | c15e5f12a4132067360f5870e4967eede13e361c /android | |
parent | 116fd0620137c2b2320b53c5949f99d46c050231 (diff) |
android: create thumbnail with "paintTile" LOKit function
Additionally remember the document dimensions, so there is no
continuous call to "getDocumentWidth" and "getDocumentHeight"
Change-Id: I269b47178a25da28de8df98d0bd45211fb64797d
Diffstat (limited to 'android')
3 files changed, 43 insertions, 3 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java index 8085d022429f..5a906c906886 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java @@ -21,7 +21,10 @@ public class LOKitTileProvider implements TileProvider { private final LayerController mLayerController; private final double mTileWidth; private final double mTileHeight; + private double mDPI; + private double mWidthTwip; + private double mHeightTwip; public LOKitTileProvider(LayerController layerController, String input) { mLayerController = layerController; @@ -75,7 +78,10 @@ public class LOKitTileProvider implements TileProvider { return false; } - if (mDocument.getDocumentWidth() == 0 && mDocument.getDocumentHeight() == 0) { + mWidthTwip = mDocument.getDocumentWidth(); + mHeightTwip = mDocument.getDocumentHeight(); + + if (mWidthTwip == 0 && mHeightTwip == 0) { Log.e(LOGTAG, "Document size zero - last error: " + mOffice.getError()); } else { Log.i(LOGTAG, "Document size: " + mDocument.getDocumentWidth() + " x " + mDocument.getDocumentHeight()); @@ -86,12 +92,12 @@ public class LOKitTileProvider implements TileProvider { @Override public int getPageWidth() { - return (int) twipToPixel(mDocument.getDocumentWidth(), mDPI); + return (int) twipToPixel(mWidthTwip, mDPI); } @Override public int getPageHeight() { - return (int) twipToPixel(mDocument.getDocumentHeight(), mDPI); + return (int) twipToPixel(mHeightTwip, mDPI); } @Override @@ -99,6 +105,7 @@ public class LOKitTileProvider implements TileProvider { return mDocument != null; } + @Override public SubTile createTile(int x, int y) { ByteBuffer buffer = ByteBuffer.allocateDirect(TILE_SIZE * TILE_SIZE * 4); Bitmap bitmap = Bitmap.createBitmap(TILE_SIZE, TILE_SIZE, Bitmap.Config.ARGB_8888); @@ -114,6 +121,29 @@ public class LOKitTileProvider implements TileProvider { } @Override + public Bitmap thumbnail() { + ByteBuffer buffer = ByteBuffer.allocateDirect(TILE_SIZE * TILE_SIZE * 4); + Bitmap bitmap = Bitmap.createBitmap(TILE_SIZE, TILE_SIZE, Bitmap.Config.ARGB_8888); + + int widthPixel = getPageWidth(); + int heightPixel = getPageHeight(); + + if (widthPixel > heightPixel) { + double ratio = heightPixel / (double) widthPixel; + widthPixel = 1000; + heightPixel = (int) (widthPixel * ratio); + } else { + double ratio = widthPixel / (double) heightPixel; + heightPixel = 1000; + widthPixel = (int) (heightPixel * ratio); + } + + mDocument.paintTile(buffer, widthPixel, heightPixel, 0, 0, (int) mWidthTwip, (int) mHeightTwip); + + return bitmap; + } + + @Override public void changePart(int partIndex) { mDocument.setPart(partIndex); } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java index 8de60d6abd34..60abbdf96960 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java @@ -62,6 +62,11 @@ public class MockTileProvider implements TileProvider { } @Override + public Bitmap thumbnail() { + return null; + } + + @Override public void changePart(int partIndex) { } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java index 63e358d7d984..4202d28ad98e 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java @@ -1,10 +1,13 @@ package org.libreoffice; +import android.graphics.Bitmap; + import org.mozilla.gecko.gfx.SubTile; public interface TileProvider { int getPageWidth(); + int getPageHeight(); boolean isReady(); @@ -12,4 +15,6 @@ public interface TileProvider { SubTile createTile(int x, int y); void changePart(int partIndex); + + Bitmap thumbnail(); } |