diff --git a/res/raw/rollo.c b/res/raw/rollo.c index 2b15d7f553..e60b8a2711 100644 --- a/res/raw/rollo.c +++ b/res/raw/rollo.c @@ -19,11 +19,31 @@ float g_DT; int g_LastTime; int g_PageCount; float g_Zoom; -float g_ZoomTarget; // Drawing constants, should be parameters ====== #define VIEW_ANGLE 1.28700222f +float g_OldPosPage; +float g_OldPosVelocity; +float g_OldZoom; + +void updateReadback() { + if ((g_OldPosPage != g_PosPage) || + (g_OldPosVelocity != g_PosVelocity) || + (g_OldZoom != g_Zoom)) { + + g_OldPosPage = g_PosPage; + g_OldPosVelocity = g_PosVelocity; + g_OldZoom = g_Zoom; + + int i[3]; + i[0] = g_PosPage * (1 << 16); + i[1] = g_PosVelocity * (1 << 16); + i[2] = g_OldZoom * (1 << 16); + sendToClient(&i[0], 1, 12, 1); + } +} + void init() { g_AttractionTable[0] = 6.5f; g_AttractionTable[1] = 6.5f; @@ -50,7 +70,6 @@ void init() { g_LastTouchDown = 0; g_LastPositionX = 0; g_Zoom = 0; - g_ZoomTarget = 0; } void move() { @@ -97,16 +116,6 @@ void touchUp() { g_LastTouchDown = 0; } -void setZoomTarget() { - g_ZoomTarget = state->zoomTarget; - //debugF("zoom target", g_ZoomTarget); -} - -void setZoom() { - readback->zoom = g_Zoom = g_ZoomTarget = state->zoom; - //debugF("zoom", g_ZoomTarget); -} - int count_pages(int iconCount) { @@ -301,8 +310,8 @@ main(int launchID) g_LastTime = newTime; //debugF("zoom", g_Zoom); - if (g_Zoom != g_ZoomTarget) { - float dz = (g_ZoomTarget - g_Zoom) * g_DT * 5; + if (g_Zoom != state->zoomTarget) { + float dz = (state->zoomTarget - g_Zoom) * g_DT * 5; if (dz && (fabsf(dz) < 0.03f)) { if (dz > 0) { dz = 0.03f; @@ -310,22 +319,22 @@ main(int launchID) dz = -0.03f; } } - if (fabsf(g_Zoom - g_ZoomTarget) < fabsf(dz)) { - g_Zoom = g_ZoomTarget; + if (fabsf(g_Zoom - state->zoomTarget) < fabsf(dz)) { + g_Zoom = state->zoomTarget; } else { g_Zoom += dz; } - readback->zoom = g_Zoom; + updateReadback(); } // Set clear value to dim the background based on the zoom position. - if (g_Zoom < 0.001f) { + if ((g_Zoom < 0.001f) && (state->zoomTarget < 0.001f)) { pfClearColor(0.0f, 0.0f, 0.0f, 0.0f); // When we're zoomed out and not tracking motion events, reset the pos to 0. if (!g_LastTouchDown) { g_PosPage = 0; } - return 1; // 0; + return 1;//0; } else if (g_Zoom < 0.85f) { pfClearColor(0.0f, 0.0f, 0.0f, g_Zoom); } else { @@ -337,8 +346,7 @@ main(int launchID) g_PageCount = count_pages(iconCount); updatePos(0.1f); - readback->posX = g_PosPage; - readback->velocity = g_PosVelocity; + updateReadback(); //debugF(" draw g_PosPage", g_PosPage); @@ -393,6 +401,6 @@ main(int launchID) // Bug workaround where the last frame is not always displayed // So we keep rendering until the bug is fixed. - return 1; //(g_PosVelocity != 0) || fracf(g_PosPage) || g_Zoom != g_ZoomTarget); + return 1;//(g_PosVelocity != 0) || fracf(g_PosPage) || (g_Zoom != state->zoomTarget); } diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java index 93a6701d11..4cd017b0bb 100644 --- a/src/com/android/launcher2/AllAppsView.java +++ b/src/com/android/launcher2/AllAppsView.java @@ -45,7 +45,6 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.util.AttributeSet; @@ -95,12 +94,10 @@ public class AllAppsView extends RSSurfaceView private int mMotionDownRawY; private int mHomeButtonTop; private long mTouchTime; - private boolean mZoomSwipeInProgress; static class Defines { public static final int ALLOC_PARAMS = 0; public static final int ALLOC_STATE = 1; - public static final int ALLOC_READBACK = 2; public static final int ALLOC_ICON_IDS = 3; public static final int ALLOC_LABEL_IDS = 4; public static final int ALLOC_X_BORDERS = 5; @@ -224,7 +221,6 @@ public class AllAppsView extends RSSurfaceView mMotionDownRawX = (int)ev.getRawX(); mMotionDownRawY = (int)ev.getRawY(); mLastMotionX = x; - mRollo.mReadback.read(); mRollo.mState.newPositionX = ev.getRawX() / mDefines.SCREEN_WIDTH_PX; mRollo.mState.newTouchDown = 1; @@ -232,7 +228,7 @@ public class AllAppsView extends RSSurfaceView if (!mRollo.checkClickOK()) { mRollo.clearSelectedIcon(); } else { - mRollo.selectIcon(x, y, mRollo.mReadback.posX); + mRollo.selectIcon(x, y, mRollo.mMessageProc.mPosX); } mRollo.mState.save(); mRollo.mInvokeMove.execute(); @@ -276,17 +272,12 @@ public class AllAppsView extends RSSurfaceView mRollo.mState.newTouchDown = 0; mRollo.mState.newPositionX = ev.getRawX() / mDefines.SCREEN_WIDTH_PX; - if (!mZoomSwipeInProgress) { - mVelocity.computeCurrentVelocity(1000 /* px/sec */, mMaxFlingVelocity); - mRollo.mState.flingVelocityX - = mVelocity.getXVelocity() / mDefines.SCREEN_WIDTH_PX; - mRollo.clearSelectedIcon(); - mRollo.mState.save(); - mRollo.mInvokeFling.execute(); - } else { - mRollo.mState.save(); - mRollo.mInvokeMove.execute(); - } + mVelocity.computeCurrentVelocity(1000 /* px/sec */, mMaxFlingVelocity); + mRollo.mState.flingVelocityX + = mVelocity.getXVelocity() / mDefines.SCREEN_WIDTH_PX; + mRollo.clearSelectedIcon(); + mRollo.mState.save(); + mRollo.mInvokeFling.execute(); mLastMotionX = -10000; if (mVelocity != null) { @@ -316,7 +307,7 @@ public class AllAppsView extends RSSurfaceView return true; } int index = mRollo.mState.selectedIconIndex; - Log.d(TAG, "long click! velocity=" + mRollo.mReadback.velocity + " index=" + index); + Log.d(TAG, "long click! velocity=" + mRollo.mMessageProc.mVelocity + " index=" + index); if (mRollo.checkClickOK() && index >= 0 && index < mAllAppsList.size()) { ApplicationInfo app = mAllAppsList.get(index); @@ -348,7 +339,7 @@ public class AllAppsView extends RSSurfaceView * @param amount [0..1] 0 is hidden, 1 is open * @param animate Whether to animate. */ - public void zoom(float amount, boolean animate) { + public void zoom(float amount) { if (mRollo == null) { return; } @@ -357,43 +348,18 @@ public class AllAppsView extends RSSurfaceView mRollo.clearSelectedIcon(); if (amount > 0.001f) { // set in readback, so we're correct even before the next frame - mRollo.mReadback.zoom = mRollo.mState.zoomTarget = amount; - if (!animate) { - mRollo.mState.zoom = amount; - mRollo.mReadback.save(); - } + mRollo.mState.zoomTarget = amount; } else { mRollo.mState.zoomTarget = 0; - if (!animate) { - mRollo.mReadback.zoom = mRollo.mState.zoom = 0; - mRollo.mReadback.save(); - } } mRollo.mState.save(); - if (!animate) { - mRollo.mInvokeSetZoom.execute(); - } else { - mRollo.mInvokeSetZoomTarget.execute(); - } - mReadZoom.removeMessages(1); - mReadZoom.sendEmptyMessageDelayed(1, 1000); } - Handler mReadZoom = new Handler() { - public void handleMessage(Message msg) { - if(mRollo != null && mRollo.mReadback != null) { - // FIXME: These checks may indicate other problems. - mRollo.mReadback.read(); - } - } - }; - public boolean isVisible() { if (mRollo == null) { return false; } - //mRollo.mReadback.read(); - return mRollo.mReadback.zoom > 0.001f; + return mRollo.mMessageProc.mZoom > 0.001f; } @Override @@ -444,8 +410,6 @@ public class AllAppsView extends RSSurfaceView private Script.Invokable mInvokeMove; private Script.Invokable mInvokeFling; - private Script.Invokable mInvokeSetZoomTarget; - private Script.Invokable mInvokeSetZoom; private Script.Invokable mInvokeTouchUp; private ProgramStore mPSIcons; @@ -478,7 +442,6 @@ public class AllAppsView extends RSSurfaceView Params mParams; State mState; - Readback mReadback; class BaseAlloc { Allocation mAlloc; @@ -489,10 +452,23 @@ public class AllAppsView extends RSSurfaceView } } + class AAMessage extends RenderScript.RSMessage { + public void run() { + mPosX = ((float)mData[0]) / (1 << 16); + mVelocity = ((float)mData[1]) / (1 << 16); + mZoom = ((float)mData[2]) / (1 << 16); + //Log.d("rs", "new msg " + mPosX + " " + mVelocity + " " + mZoom); + } + float mZoom; + float mPosX; + float mVelocity; + } + AAMessage mMessageProc; + private boolean checkClickOK() { //android.util.Log.e("rs", "check click " + Float.toString(mReadback.velocity) + ", " + Float.toString(mReadback.posX)); - return (Math.abs(mReadback.velocity) < 0.1f) && - (Math.abs(mReadback.posX - Math.round(mReadback.posX)) < 0.1f); + return (Math.abs(mMessageProc.mVelocity) < 0.1f) && + (Math.abs(mMessageProc.mPosX - Math.round(mMessageProc.mPosX)) < 0.1f); } class Params extends BaseAlloc { @@ -521,7 +497,6 @@ public class AllAppsView extends RSSurfaceView public int selectedIconIndex = -1; public int selectedIconTexture; public float zoomTarget; - public float zoom; State() { mType = Type.createFromClass(mRS, State.class, 1, "StateClass"); @@ -530,24 +505,6 @@ public class AllAppsView extends RSSurfaceView } } - class Readback extends BaseAlloc { - public float posX; - public float velocity; - public float zoom; - - Readback() { - mType = Type.createFromClass(mRS, Readback.class, 1, "ReadbackClass"); - mAlloc = Allocation.createTyped(mRS, mType); - save(); - } - - void read() { - if(mAlloc != null) { - mAlloc.read(this); - } - } - } - public RolloRS() { } @@ -670,6 +627,7 @@ public class AllAppsView extends RSSurfaceView private void initProgramStore() { ProgramStore.Builder bs = new ProgramStore.Builder(mRS, null, null); bs.setDepthFunc(ProgramStore.DepthFunc.ALWAYS); + bs.setColorMask(true,true,true,false); bs.setDitherEnable(true); bs.setBlendFunc(ProgramStore.BlendSrcFunc.SRC_ALPHA, ProgramStore.BlendDstFunc.ONE_MINUS_SRC_ALPHA); @@ -696,7 +654,6 @@ public class AllAppsView extends RSSurfaceView private void initData() { mParams = new Params(); mState = new State(); - mReadback = new Readback(); final Utilities.BubbleText bubble = new Utilities.BubbleText(getContext()); @@ -716,7 +673,6 @@ public class AllAppsView extends RSSurfaceView mParams.save(); mState.save(); - mReadback.save(); mSelectionBitmap = Bitmap.createBitmap(Defines.ICON_TEXTURE_WIDTH_PX, Defines.ICON_TEXTURE_HEIGHT_PX, Bitmap.Config.ARGB_8888); @@ -734,23 +690,21 @@ public class AllAppsView extends RSSurfaceView sb.addDefines(mDefines); sb.setType(mParams.mType, "params", Defines.ALLOC_PARAMS); sb.setType(mState.mType, "state", Defines.ALLOC_STATE); - sb.setType(mReadback.mType, "readback", Defines.ALLOC_READBACK); mInvokeMove = sb.addInvokable("move"); mInvokeFling = sb.addInvokable("fling"); - mInvokeSetZoomTarget = sb.addInvokable("setZoomTarget"); - mInvokeSetZoom = sb.addInvokable("setZoom"); mInvokeTouchUp = sb.addInvokable("touchUp"); mScript = sb.create(); mScript.setClearColor(0.0f, 0.0f, 0.0f, 0.0f); mScript.bindAllocation(mParams.mAlloc, Defines.ALLOC_PARAMS); mScript.bindAllocation(mState.mAlloc, Defines.ALLOC_STATE); - mScript.bindAllocation(mReadback.mAlloc, Defines.ALLOC_READBACK); mScript.bindAllocation(mAllocIconID, Defines.ALLOC_ICON_IDS); mScript.bindAllocation(mAllocLabelID, Defines.ALLOC_LABEL_IDS); mScript.bindAllocation(mAllocTouchXBorders, Defines.ALLOC_X_BORDERS); mScript.bindAllocation(mAllocTouchYBorders, Defines.ALLOC_Y_BORDERS); + mMessageProc = new AAMessage(); + mRS.mMessageCallback = mMessageProc; mRS.contextBindRootScript(mScript); } diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java index 9360113032..8f03402384 100644 --- a/src/com/android/launcher2/Launcher.java +++ b/src/com/android/launcher2/Launcher.java @@ -1595,7 +1595,7 @@ public final class Launcher extends Activity } void showAllApps() { - mAllAppsGrid.zoom(1.0f, true); + mAllAppsGrid.zoom(1.0f); //mWorkspace.hide(); // TODO: fade these two too @@ -1605,7 +1605,7 @@ public final class Launcher extends Activity void closeAllApps(boolean animated) { if (mAllAppsGrid.isVisible()) { - mAllAppsGrid.zoom(0.0f, animated); + mAllAppsGrid.zoom(0.0f); mWorkspace.getChildAt(mWorkspace.getCurrentScreen()).requestFocus(); // TODO: fade these two too