diff options
author | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-07-23 12:40:58 +0200 |
---|---|---|
committer | Tomaž Vajngerl <tomaz.vajngerl@collabora.com> | 2014-08-03 22:42:17 +0200 |
commit | 90a87989721a2e115cd250f68f41f7a83c7d4a47 (patch) | |
tree | 54ac0c5b37bd59fea96786f52de29828285b2c49 | |
parent | 29fbaec862373d353dbad19ee108ddf5b4de1a0f (diff) |
LODroid3: move GeckoSoftwareLayerClient into GeckoLayerClient
Change-Id: Ic0186be09fcca52f10ab67957db54efc9c72267c
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; - } -} - |