summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-07-23 12:40:58 +0200
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2014-08-03 22:42:17 +0200
commit90a87989721a2e115cd250f68f41f7a83c7d4a47 (patch)
tree54ac0c5b37bd59fea96786f52de29828285b2c49 /android
parent29fbaec862373d353dbad19ee108ddf5b4de1a0f (diff)
LODroid3: move GeckoSoftwareLayerClient into GeckoLayerClient
Change-Id: Ic0186be09fcca52f10ab67957db54efc9c72267c
Diffstat (limited to 'android')
-rw-r--r--android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java9
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java67
-rw-r--r--android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoSoftwareLayerClient.java115
3 files changed, 56 insertions, 135 deletions
diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
index a9d17aa42f47..888db323fe43 100644
--- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -1,7 +1,6 @@
package org.libreoffice;
import android.app.Activity;
-import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.DisplayMetrics;
@@ -11,7 +10,7 @@ import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
-import org.mozilla.gecko.gfx.GeckoSoftwareLayerClient;
+import org.mozilla.gecko.gfx.GeckoLayerClient;
import org.mozilla.gecko.gfx.LayerController;
public class LibreOfficeMainActivity extends Activity {
@@ -22,7 +21,7 @@ public class LibreOfficeMainActivity extends Activity {
private LinearLayout mMainLayout;
private RelativeLayout mGeckoLayout;
private static LayerController mLayerController;
- private static GeckoSoftwareLayerClient mLayerClient;
+ private static GeckoLayerClient mLayerClient;
private static LOKitThread sLOKitThread;
public static LibreOfficeMainActivity mAppContext;
@@ -81,7 +80,7 @@ public class LibreOfficeMainActivity extends Activity {
mLayerController = new LayerController(this);
Log.e(LOGTAG, "### Creating GeckoSoftwareLayerClient");
- mLayerClient = new GeckoSoftwareLayerClient(this);
+ mLayerClient = new GeckoLayerClient(this);
Log.e(LOGTAG, "### Done creating GeckoSoftwareLayerClient");
mLayerController.setLayerClient(mLayerClient);
@@ -98,7 +97,7 @@ public class LibreOfficeMainActivity extends Activity {
return sLOKitThread;
}
- public static GeckoSoftwareLayerClient getLayerClient() {
+ public static GeckoLayerClient getLayerClient() {
return mLayerClient;
}
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
index 3ed110440db4..bfac3a9d14be 100644
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
+++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoLayerClient.java
@@ -49,19 +49,22 @@ import org.libreoffice.LOKitShell;
import org.libreoffice.LibreOfficeMainActivity;
import org.mozilla.gecko.util.FloatUtils;
-public abstract class GeckoLayerClient {
+import java.util.List;
+
+public class GeckoLayerClient {
private static final String LOGTAG = "GeckoLayerClient";
private static final long MIN_VIEWPORT_CHANGE_DELAY = 25L;
+
+ private static final IntSize TILE_SIZE = new IntSize(256, 256);
+
protected IntSize mScreenSize;
protected Layer mTileLayer;
-
/* The viewport that Gecko is currently displaying. */
protected ViewportMetrics mGeckoViewport;
-
/* The viewport that Gecko will display when drawing is finished */
protected ViewportMetrics mNewGeckoViewport;
-
protected LayerController mLayerController;
+ private Context mContext;
private long mLastViewportChangeTime;
private boolean mPendingViewportAdjust;
private boolean mViewportSizeChanged;
@@ -74,14 +77,33 @@ public abstract class GeckoLayerClient {
private String mLastCheckerboardColor;
public GeckoLayerClient(Context context) {
+ mContext = context;
mScreenSize = new IntSize(0, 0);
}
- protected abstract boolean setupLayer();
+ protected boolean setupLayer() {
+ Log.i(LOGTAG, "Creating MultiTileLayer");
+ if (mTileLayer == null) {
+ mTileLayer = new MultiTileLayer(TILE_SIZE);
+ mLayerController.setRoot(mTileLayer);
+ }
- protected abstract void updateLayerAfterDraw();
+ // Force a resize event to be sent because the results of this
+ // are different depending on what tile system we're using
+ //sendResizeEventIfNecessary(true);
- protected abstract IntSize getTileSize();
+ return false;
+ }
+
+ protected void updateLayerAfterDraw() {
+ if (mTileLayer instanceof MultiTileLayer) {
+ ((MultiTileLayer) mTileLayer).invalidate();
+ }
+ }
+
+ protected IntSize getTileSize() {
+ return TILE_SIZE;
+ }
/**
* Attaches the root layer to the layer controller so that Gecko appears.
@@ -94,7 +116,7 @@ public abstract class GeckoLayerClient {
layerController.setViewportMetrics(mGeckoViewport);
}
- sendResizeEventIfNecessary();
+ sendResizeEventIfNecessary(false);
}
public boolean beginDrawing(ViewportMetrics viewportMetrics) {
@@ -155,24 +177,26 @@ public abstract class GeckoLayerClient {
DisplayMetrics metrics = new DisplayMetrics();
LibreOfficeMainActivity.mAppContext.getWindowManager().getDefaultDisplay().getMetrics(metrics);
+ IntSize newScreenSize = new IntSize(metrics.widthPixels, metrics.heightPixels);
+
// Return immediately if the screen size hasn't changed or the viewport
// size is zero (which indicates that the rendering surface hasn't been
// allocated yet).
- boolean screenSizeChanged = (metrics.widthPixels != mScreenSize.width || metrics.heightPixels != mScreenSize.height);
+ boolean screenSizeChanged = !mScreenSize.equals(newScreenSize);
boolean viewportSizeValid = (mLayerController != null && mLayerController.getViewportSize().isPositive());
if (!(force || (screenSizeChanged && viewportSizeValid))) {
return;
}
- mScreenSize = new IntSize(metrics.widthPixels, metrics.heightPixels);
- IntSize tileSize = getTileSize();
+ mScreenSize = newScreenSize;
- Log.e(LOGTAG, "### Screen-size changed to " + mScreenSize);
+ if (screenSizeChanged) {
+ Log.d(LOGTAG, "Screen-size changed to " + mScreenSize);
+ }
- LOEvent event = LOEvent.sizeChanged(
- metrics.widthPixels, metrics.heightPixels,
- tileSize.width, tileSize.height);
+ IntSize tileSize = getTileSize();
+ LOEvent event = LOEvent.sizeChanged(metrics.widthPixels, metrics.heightPixels, tileSize.width, tileSize.height);
LOKitShell.sendEvent(event);
}
@@ -236,4 +260,17 @@ public abstract class GeckoLayerClient {
private void sendResizeEventIfNecessary() {
sendResizeEventIfNecessary(false);
}
+
+ public void addTile(SubTile tile) {
+ if (mTileLayer instanceof MultiTileLayer) {
+ ((MultiTileLayer) mTileLayer).addTile(tile);
+ }
+ }
+
+ public List<SubTile> getTiles() {
+ if (mTileLayer instanceof MultiTileLayer) {
+ return ((MultiTileLayer) mTileLayer).getTiles();
+ }
+ return null;
+ }
} \ No newline at end of file
diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoSoftwareLayerClient.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoSoftwareLayerClient.java
deleted file mode 100644
index a8276fa57ba2..000000000000
--- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/GeckoSoftwareLayerClient.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
- * ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla Android code.
- *
- * The Initial Developer of the Original Code is Mozilla Foundation.
- * Portions created by the Initial Developer are Copyright (C) 2009-2010
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Patrick Walton <pcwalton@mozilla.com>
- * Chris Lord <chrislord.net@gmail.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-package org.mozilla.gecko.gfx;
-
-import android.content.Context;
-import android.util.Log;
-
-import java.util.List;
-
-
-/**
- * Transfers a software-rendered Gecko to an ImageLayer so that it can be rendered by our
- * compositor.
- *
- * TODO: Throttle down Gecko's priority when we pan and zoom.
- */
-public class GeckoSoftwareLayerClient extends GeckoLayerClient {
- private static final String LOGTAG = "GeckoSoftwareLayerClient";
-
- private static final IntSize TILE_SIZE = new IntSize(256, 256);
-
- public GeckoSoftwareLayerClient(Context context) {
- super(context);
- }
-
- public void setLayerController(LayerController layerController) {
- super.setLayerController(layerController);
-
- layerController.setRoot(mTileLayer);
-
- if (mGeckoViewport != null) {
- layerController.setViewportMetrics(mGeckoViewport);
- }
-
- sendResizeEventIfNecessary(false);
- }
-
- @Override
- protected boolean setupLayer() {
- Log.i(LOGTAG, "Creating MultiTileLayer");
- if(mTileLayer == null) {
- mTileLayer = new MultiTileLayer(TILE_SIZE);
- mLayerController.setRoot(mTileLayer);
- }
-
- // Force a resize event to be sent because the results of this
- // are different depending on what tile system we're using
- sendResizeEventIfNecessary(true);
-
- return false;
- }
-
- @Override
- protected void updateLayerAfterDraw() {
- if (mTileLayer instanceof MultiTileLayer) {
- ((MultiTileLayer)mTileLayer).invalidate();
- }
- }
-
-
- @Override
- protected IntSize getTileSize() {
- return TILE_SIZE;
- }
-
- public void addTile(SubTile tile) {
- if (mTileLayer instanceof MultiTileLayer) {
- ((MultiTileLayer)mTileLayer).addTile(tile);
- }
- }
-
- public List<SubTile> getTiles() {
- if (mTileLayer instanceof MultiTileLayer) {
- return ((MultiTileLayer)mTileLayer).getTiles();
- }
- return null;
- }
-}
-