summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-16 15:39:31 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-09-18 23:05:03 +0200
commit1a42c78a594d8ea26eb2cc767772d614cb4c1285 (patch)
treec15e5f12a4132067360f5870e4967eede13e361c
parent116fd0620137c2b2320b53c5949f99d46c050231 (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
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java36
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java5
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java5
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();
}