diff options
4 files changed, 19 insertions, 16 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java index c51b4452f48f..04afd804011f 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOEvent.java @@ -7,6 +7,7 @@ import android.view.MotionEvent; import org.mozilla.gecko.gfx.ComposedTileLayer; import org.mozilla.gecko.gfx.IntSize; +import org.mozilla.gecko.gfx.SubTile; public class LOEvent implements Comparable<LOEvent> { public static final int SIZE_CHANGED = 1; @@ -28,7 +29,7 @@ public class LOEvent implements Comparable<LOEvent> { public String mTypeString; public int mPartIndex; public String mFilename; - public TileIdentifier mTileId; + public SubTile mTile; public ComposedTileLayer mComposedTileLayer; public String mTouchType; public MotionEvent mMotionEvent; @@ -46,11 +47,11 @@ public class LOEvent implements Comparable<LOEvent> { mTypeString = "Size Changed: " + widthPixels + " " + heightPixels; } - public LOEvent(int type, ComposedTileLayer composedTileLayer, TileIdentifier tileId) { + public LOEvent(int type, ComposedTileLayer composedTileLayer, SubTile tile) { mType = type; mTypeString = "Tile Request"; mComposedTileLayer = composedTileLayer; - mTileId = tileId; + mTile = tile; } public LOEvent(int type, String filename) { diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java index fd54bbfb5b09..fab30b2c4813 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitShell.java @@ -11,6 +11,7 @@ import android.view.MotionEvent; import org.mozilla.gecko.gfx.ComposedTileLayer; import org.mozilla.gecko.gfx.LayerView; +import org.mozilla.gecko.gfx.SubTile; public class LOKitShell { @@ -122,9 +123,8 @@ public class LOKitShell { LOKitShell.sendEvent(new LOEvent(LOEvent.REDRAW)); } - public static void sendTileRequestEvent(ComposedTileLayer composedTileLayer, TileIdentifier tileID, boolean forceRedraw, int priority) { - LOEvent event = new LOEvent(LOEvent.TILE_REQUEST, composedTileLayer, tileID); - event.mPriority = priority; + public static void sendTileRequestEvent(ComposedTileLayer composedTileLayer, SubTile tile, boolean forceRedraw, int priority) { + LOEvent event = new LOEvent(LOEvent.TILE_REQUEST, composedTileLayer, tile); LOKitShell.sendEvent(event); } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java index d5b07815ef00..3265fa7d754e 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitThread.java @@ -44,23 +44,20 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation } } - private void tileRequest(ComposedTileLayer composedTileLayer, TileIdentifier tileId) { + private void tileRequest(ComposedTileLayer composedTileLayer, SubTile tile) { if (mTileProvider == null) { return; } - if (composedTileLayer.isStillValid(tileId)) { + if (composedTileLayer.isStillValid(tile.id)) { + TileIdentifier tileId = tile.id; CairoImage image = mTileProvider.createTile(tileId.x, tileId.y, tileId.size, tileId.zoom); if (image != null) { mLayerClient.beginDrawing(); - SubTile tile = new SubTile(tileId); tile.setImage(image); - composedTileLayer.addTile(tile); mLayerClient.endDrawing(); mLayerClient.forceRender(); } - } else { - composedTileLayer.cleanupInvalidTile(tileId); } } @@ -174,7 +171,7 @@ public class LOKitThread extends Thread implements TileProvider.TileInvalidation changePart(event.mPartIndex); break; case LOEvent.TILE_REQUEST: - tileRequest(event.mComposedTileLayer, event.mTileId); + tileRequest(event.mComposedTileLayer, event.mTile); break; case LOEvent.TILE_INVALIDATION: tileInvalidation(event.mInvalidationRect); diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java index 1dee5de1cd34..ae7f98ae45ca 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/ComposedTileLayer.java @@ -27,7 +27,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba protected float currentZoom; private final ReadWriteLock tilesReadWriteLock = new ReentrantReadWriteLock(); - private final Lock tilesReadLock = tilesReadWriteLock.readLock(); + private final Lock tilesReadLock = tilesReadWriteLock.readLock(); private final Lock tilesWriteLock = tilesReadWriteLock.writeLock(); public ComposedTileLayer(Context context) { @@ -177,6 +177,7 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba } private void addNewTiles(RectF pageRect) { + beginTransaction(); for (float y = currentViewport.top; y < currentViewport.bottom; y += tileSize.height) { if (y > pageRect.height()) { continue; @@ -187,10 +188,12 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba } if (!containsTilesMatching(x, y, currentZoom)) { TileIdentifier tileId = new TileIdentifier((int) x, (int) y, currentZoom, tileSize); - LOKitShell.sendTileRequestEvent(this, tileId, true, getTilePriority()); + SubTile tile = createNewTile(tileId); + LOKitShell.sendTileRequestEvent(this, tile, true, getTilePriority()); } } } + endTransaction(); } private void clearMarkedTiles() { @@ -228,11 +231,13 @@ public abstract class ComposedTileLayer extends Layer implements ComponentCallba currentViewport = new RectF(); } - public void addTile(SubTile tile) { + private SubTile createNewTile(TileIdentifier tileId) { + SubTile tile = new SubTile(tileId); tile.beginTransaction(); tilesWriteLock.lock(); tiles.add(tile); tilesWriteLock.unlock(); + return tile; } public boolean isStillValid(TileIdentifier tileId) { |