Kaydet (Commit) 81df594b authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

LOAndroid3: use device DPI, push more resp. to TileProvider

Change-Id: I603bf2697d9afbac7a9cb4eae9d1c0da92bb9e93
üst 27e86fe6
......@@ -17,15 +17,8 @@ public class LOKitShell {
private static final String LOGTAG = LOKitShell.class.getSimpleName();
public static int getDpi() {
return 96;
}
public static int getScreenDepth() {
return 24;
}
public static float computeRenderIntegrity() {
return 0.0f;
DisplayMetrics metrics = LibreOfficeMainActivity.mAppContext.getResources().getDisplayMetrics();
return (int) metrics.density * 200;
}
public static ByteBuffer allocateDirectBuffer(int size) {
......@@ -44,7 +37,6 @@ public class LOKitShell {
return directBuffer;
}
public static void freeDirectBuffer(ByteBuffer buffer) {
if (buffer == null) {
return;
......
......@@ -8,6 +8,7 @@ import android.graphics.Rect;
import android.util.JsonWriter;
import android.util.Log;
import org.mozilla.gecko.gfx.SubTile;
import org.mozilla.gecko.gfx.ViewportMetrics;
import java.io.IOException;
......@@ -47,15 +48,8 @@ public class LOKitThread extends Thread {
Log.i(LOGTAG, "Filling tiles..");
int x = 0;
int y = 0;
for (Bitmap bitmap : mTileProvider.getTileIterator()) {
application.getLayerClient().addTile(bitmap, x, y);
x += TILE_SIZE;
if (x > pageWidth) {
x = 0;
y += TILE_SIZE;
}
for (SubTile tile : mTileProvider.getTileIterator()) {
application.getLayerClient().addTile(tile);
}
Log.i(LOGTAG, "End Draw");
......
......@@ -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;
}
}
......
......@@ -3,13 +3,17 @@ package org.libreoffice;
import android.graphics.Bitmap;
import org.apache.http.MethodNotSupportedException;
import org.mozilla.gecko.gfx.BufferedCairoImage;
import org.mozilla.gecko.gfx.CairoImage;
import org.mozilla.gecko.gfx.LayerController;
import org.mozilla.gecko.gfx.SubTile;
import java.util.Iterator;
import java.util.List;
public class MockTileProvider implements TileProvider {
private final LayerController layerController;
private static final int TILE_SIZE = 256;
public MockTileProvider(LayerController layerController) {
this.layerController = layerController;
......@@ -29,11 +33,14 @@ public class MockTileProvider implements TileProvider {
return new MockTileIterator(layerController);
}
public class MockTileIterator implements TileIterator, Iterator<Bitmap> {
public class MockTileIterator implements TileIterator, Iterator<SubTile> {
private final LayerController layerController;
private int tileNumber = 1;
private int x = 0;
private int y = 0;
public MockTileIterator(LayerController layerController) {
this.layerController = layerController;
}
......@@ -44,11 +51,23 @@ public class MockTileProvider implements TileProvider {
}
@Override
public Bitmap next() {
public SubTile next() {
String imageName = "d" + tileNumber;
tileNumber++;
Bitmap bitmap = layerController.getDrawable(imageName);
return bitmap;
CairoImage image = new BufferedCairoImage(bitmap);
SubTile tile = new SubTile(image, x, y);
tile.beginTransaction();
x += TILE_SIZE;
if (x > getPageWidth()) {
x = 0;
y += TILE_SIZE;
}
return tile;
}
@Override
......@@ -57,7 +76,7 @@ public class MockTileProvider implements TileProvider {
}
@Override
public Iterator<Bitmap> iterator() {
public Iterator<SubTile> iterator() {
return this;
}
}
......
package org.libreoffice;
import android.graphics.Bitmap;
import org.mozilla.gecko.gfx.SubTile;
public interface TileIterator extends Iterable<Bitmap> {
public interface TileIterator extends Iterable<SubTile> {
}
package org.libreoffice;
import android.graphics.Bitmap;
import java.util.List;
public interface TileProvider {
public interface TileProvider {
int getPageWidth();
int getPageHeight();
TileIterator getTileIterator();
......
......@@ -139,9 +139,9 @@ public class GeckoSoftwareLayerClient extends GeckoLayerClient {
return TILE_SIZE;
}
public void addTile(Bitmap bitmap, int x, int y) {
public void addTile(SubTile tile) {
if (mTileLayer instanceof MultiTileLayer) {
((MultiTileLayer)mTileLayer).addTile(bitmap, x, y);
((MultiTileLayer)mTileLayer).addTile(tile);
}
}
}
......
......@@ -241,9 +241,7 @@ public class MultiTileLayer extends Layer {
return validRegion;
}
public void addTile(Bitmap bitmap, int x, int y) {
SubTile tile = new SubTile(new BufferedCairoImage(bitmap), x,y);
tile.beginTransaction();
public void addTile(SubTile tile) {
mTiles.add(tile);
}
}
......
package org.mozilla.gecko.gfx;
/**
* Created by quikee on 29.6.2014.
*/
public class SubTile extends SingleTileLayer {
public int x;
public int y;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment