diff --git a/res/raw/rollo.c b/res/raw/rollo.c index d7df6b96e7..5ff3308851 100644 --- a/res/raw/rollo.c +++ b/res/raw/rollo.c @@ -5,40 +5,15 @@ #define PI 3.14159f -// Variables from java ====== - -// Parameters ====== -#define PARAM_BUBBLE_WIDTH 0 -#define PARAM_BUBBLE_HEIGHT 1 -#define PARAM_BUBBLE_BITMAP_WIDTH 2 -#define PARAM_BUBBLE_BITMAP_HEIGHT 3 -#define PARAM_SCROLL_HANDLE_ID 4 -#define PARAM_SCROLL_HANDLE_TEX_WIDTH 5 -#define PARAM_SCROLL_HANDLE_TEX_HEIGHT 6 - -// State ====== -#define STATE_ICON_COUNT 0 -#define STATE_SCROLL_X 1 -#define STATE_FLING_TIME 2 -#define STATE_FLING_VELOCITY_X 3 -#define STATE_ADJUSTED_DECELERATION 4 - -/* with fling offset applied */ -#define STATE_CURRENT_SCROLL_X 5 - -#define STATE_FLING_DURATION 6 -#define STATE_FLING_END_POS 7 - -#define STATE_START_SCROLL_X 8 -#define STATE_SELECTED_ICON_INDEX 9 -#define STATE_SELECTED_ICON_TEXTURE 10 - -#define STATE_VISIBLE 11 -#define STATE_ZOOM 12 +float deceleration; // Drawing constants, should be parameters ====== #define VIEW_ANGLE 1.28700222f +void init() { + deceleration = 0; +} + int g_lastFrameTime = 0; void print_frame_rate() { @@ -78,7 +53,7 @@ draw_page(int icon, int lastIcon, float centerAngle) int row; int col; - float scale = 1.0f - loadI32(ALLOC_STATE, STATE_ZOOM)/100000.0f; + float scale = 1.0f - state->zoom; float iconTextureWidth = ICON_WIDTH_PX / (float)ICON_TEXTURE_WIDTH_PX; float iconTextureHeight = ICON_HEIGHT_PX / (float)ICON_TEXTURE_HEIGHT_PX; @@ -91,16 +66,11 @@ draw_page(int icon, int lastIcon, float centerAngle) float farIconTextureSize = far_size(2 * ICON_TEXTURE_WIDTH_PX / (float)SCREEN_WIDTH_PX); - float labelWidthPx = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_WIDTH); - float labelHeightPx = loadI32(ALLOC_PARAMS, PARAM_BUBBLE_HEIGHT); - - float normalizedLabelWidth = 2 * labelWidthPx / (float)SCREEN_WIDTH_PX; + float normalizedLabelWidth = 2 * params->bubbleWidth / (float)SCREEN_WIDTH_PX; float farLabelWidth = far_size(normalizedLabelWidth); - float farLabelHeight = far_size(labelHeightPx * (normalizedLabelWidth / labelWidthPx)); - float labelTextureWidth = labelWidthPx / loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_WIDTH); - float labelTextureHeight = labelHeightPx / loadI32(ALLOC_PARAMS, PARAM_BUBBLE_BITMAP_HEIGHT); - - int selectedIconIndex = loadI32(ALLOC_STATE, STATE_SELECTED_ICON_INDEX); + float farLabelHeight = far_size(params->bubbleHeight * (normalizedLabelWidth / params->bubbleWidth)); + float labelTextureWidth = (float)params->bubbleWidth / params->bubbleBitmapWidth; + float labelTextureHeight = (float)params->bubbleHeight / params->bubbleBitmapHeight; for (row=0; rowselectedIconIndex == icon) { + bindTexture(NAMED_PF, 0, state->selectedIconTexture); drawQuadTexCoords( iconLeftX, iconTextureTop, iconLeftZ, 0.0f, 0.0f, iconRightX, iconTextureTop, iconRightZ, 1.0f, 0.0f, @@ -173,15 +143,15 @@ main(int launchID) pfClearColor(0.0f, 0.0f, 0.0f, 0.0f); // If we're not supposed to be showing, don't do anything. - if (!loadI32(ALLOC_STATE, STATE_VISIBLE)) { + if (!state->visible) { return 0; } // icons & labels - int iconCount = loadI32(ALLOC_STATE, STATE_ICON_COUNT); + int iconCount = state->iconCount; int pageCount = count_pages(iconCount); - float scrollXPx = loadI32(ALLOC_STATE, STATE_SCROLL_X); + float scrollXPx = state->scrollX; float maxScrollXPx = -(pageCount-1) * SCREEN_WIDTH_PX; int done = 0; @@ -194,11 +164,10 @@ main(int launchID) } // If we've been given a velocity, start a fling - float flingVelocityPxMs = loadI32(ALLOC_STATE, STATE_FLING_VELOCITY_X); + float flingVelocityPxMs = state->flingVelocityX; if (flingVelocityPxMs != 0) { // how many screens will this velocity do? TODO: use long // G * ppi * friction // why G? // friction = 0.015 - float deceleration = loadF(ALLOC_STATE, STATE_ADJUSTED_DECELERATION); float flingDurationMs; if (deceleration == 0) { // On the first frame, calculate which animation we're going to do. If it's @@ -264,18 +233,16 @@ main(int launchID) endPos = scrollXPx + (flingVelocityPxMs*flingDurationMs) + ((deceleration*flingDurationMs*flingDurationMs)/2); - storeF(ALLOC_STATE, STATE_ADJUSTED_DECELERATION, deceleration); - storeF(ALLOC_STATE, STATE_FLING_DURATION, flingDurationMs); - storeF(ALLOC_STATE, STATE_FLING_END_POS, endPos); + state->flingDuration = flingDurationMs; + state->flingEndPos = endPos; } else { - flingDurationMs = loadF(ALLOC_STATE, STATE_FLING_DURATION); + flingDurationMs = state->flingDuration; } // adjust the deceleration so we always hit a page boundary - int flingTime = loadI32(ALLOC_STATE, STATE_FLING_TIME); int now = uptimeMillis(); - float elapsedTime = (now - flingTime) / 1000.0f; + float elapsedTime = (now - state->flingTimeMs) / 1000.0f; int animEndTime = -flingVelocityPxMs / deceleration; int flingOffsetPx = (flingVelocityPxMs * elapsedTime) @@ -283,7 +250,7 @@ main(int launchID) scrollXPx += flingOffsetPx; if (elapsedTime > flingDurationMs) { - scrollXPx = loadF(ALLOC_STATE, STATE_FLING_END_POS); + scrollXPx = state->flingEndPos; done = 1; } } else { @@ -297,12 +264,12 @@ main(int launchID) if (scrollXPx < maxScrollXPx) { scrollXPx = maxScrollXPx; } - - storeI32(ALLOC_STATE, STATE_CURRENT_SCROLL_X, scrollXPx); + + state->currentScrollX = scrollXPx; if (done) { - storeI32(ALLOC_STATE, STATE_SCROLL_X, scrollXPx); - storeI32(ALLOC_STATE, STATE_FLING_VELOCITY_X, 0); - storeF(ALLOC_STATE, STATE_ADJUSTED_DECELERATION, 0); + state->scrollX = scrollXPx; + state->flingVelocityX = 0; + deceleration = 0.f; } // Draw the icons ======================================== @@ -324,7 +291,7 @@ main(int launchID) draw_page(icon, lastIcon, -VIEW_ANGLE*currentPagePosition); draw_page(icon+iconsPerPage, lastIcon, (-VIEW_ANGLE*currentPagePosition)+VIEW_ANGLE); - + // Draw the border lines for debugging ======================================== /* bindProgramVertex(NAMED_PVOrtho); diff --git a/src/com/android/launcher2/AllAppsView.java b/src/com/android/launcher2/AllAppsView.java index 2199432d10..7c7de152a1 100644 --- a/src/com/android/launcher2/AllAppsView.java +++ b/src/com/android/launcher2/AllAppsView.java @@ -28,6 +28,7 @@ import android.renderscript.RenderScript; import android.renderscript.ProgramVertex; import android.renderscript.Element; import android.renderscript.Allocation; +import android.renderscript.Type; import android.renderscript.Script; import android.renderscript.ScriptC; import android.renderscript.ProgramFragment; @@ -104,7 +105,7 @@ public class AllAppsView extends RSSurfaceView public static final int COLUMNS_PER_PAGE = 4; public static final int ROWS_PER_PAGE = 4; - + public static final float RADIUS = 4.0f; public static final int SCREEN_WIDTH_PX = 480; @@ -199,7 +200,6 @@ public class AllAppsView extends RSSurfaceView (-mRollo.mState.startScrollX / Defines.SCREEN_WIDTH_PX)); } mRollo.mState.flingVelocityX = 0; - mRollo.mState.adjustedDeceleration = 0; mRollo.mState.save(); mVelocity = VelocityTracker.obtain(); mVelocity.addMovement(ev); @@ -282,15 +282,13 @@ public class AllAppsView extends RSSurfaceView public void onDropCompleted(View target, boolean success) { } - private static final int SCALE_SCALE = 100000; - public void setScale(float amount) { cancelLongPress(); mRollo.mState.read(); mRollo.clearSelectedIcon(); if (amount > 0.001f) { mRollo.mState.visible = 1; - mRollo.mState.zoom = (int)(SCALE_SCALE*amount); + mRollo.mState.zoom = amount; } else { mRollo.mState.visible = 0; mRollo.mState.zoom = 0; @@ -390,36 +388,53 @@ public class AllAppsView extends RSSurfaceView Params mParams; State mState; - class Params extends IntAllocation { - Params(RenderScript rs) { - super(rs); + class BaseAlloc { + Allocation mAlloc; + Type mType; + + void save() { + mAlloc.data(this); + } + + void read() { + mAlloc.read(this); } - @AllocationIndex(0) public int bubbleWidth; - @AllocationIndex(1) public int bubbleHeight; - @AllocationIndex(2) public int bubbleBitmapWidth; - @AllocationIndex(3) public int bubbleBitmapHeight; - @AllocationIndex(4) public int scrollHandleId; - @AllocationIndex(5) public int scrollHandleTextureWidth; - @AllocationIndex(6) public int scrollHandleTextureHeight; } - class State extends IntAllocation { - State(RenderScript rs) { - super(rs); + class Params extends BaseAlloc { + Params() { + mType = Type.createFromClass(mRS, Params.class, 1, "ParamsClass"); + mAlloc = Allocation.createTyped(mRS, mType); + save(); + } + public int bubbleWidth; + public int bubbleHeight; + public int bubbleBitmapWidth; + public int bubbleBitmapHeight; + public int scrollHandleId; + public int scrollHandleTextureWidth; + public int scrollHandleTextureHeight; + } + + class State extends BaseAlloc { + public int iconCount; + public int scrollX; + public int flingTimeMs; + public float flingVelocityX; + public int currentScrollX; + public int flingDuration; + public int flingEndPos; + public int startScrollX; + public int selectedIconIndex = -1; + public int selectedIconTexture; + public int visible; + public float zoom; + + State() { + mType = Type.createFromClass(mRS, State.class, 1, "StateClass"); + mAlloc = Allocation.createTyped(mRS, mType); + save(); } - @AllocationIndex(0) public int iconCount; - @AllocationIndex(1) public int scrollX; - @AllocationIndex(2) public int flingTimeMs; - @AllocationIndex(3) public int flingVelocityX; - @AllocationIndex(4) public int adjustedDeceleration; - @AllocationIndex(5) public int currentScrollX; - @AllocationIndex(6) public int flingDuration; - @AllocationIndex(7) public int flingEndPos; - @AllocationIndex(8) public int startScrollX; - @AllocationIndex(9) public int selectedIconIndex = -1; - @AllocationIndex(10) public int selectedIconTexture; - @AllocationIndex(11) public int visible; - @AllocationIndex(12) public int zoom; } public RolloRS() { @@ -510,10 +525,10 @@ public class AllAppsView extends RSSurfaceView Log.e("rs", "Done loading named"); } - + private void initData() { - mParams = new Params(mRS); - mState = new State(mRS); + mParams = new Params(); + mState = new State(); final Utilities.BubbleText bubble = new Utilities.BubbleText(getContext()); @@ -547,11 +562,13 @@ public class AllAppsView extends RSSurfaceView sb.setScript(mRes, R.raw.rollo); sb.setRoot(true); sb.addDefines(Defines.class); + sb.setType(mParams.mType, "params", Defines.ALLOC_PARAMS); + sb.setType(mState.mType, "state", Defines.ALLOC_STATE); mScript = sb.create(); mScript.setClearColor(0.0f, 0.0f, 0.0f, 0.0f); - mScript.bindAllocation(mParams.getAllocation(), Defines.ALLOC_PARAMS); - mScript.bindAllocation(mState.getAllocation(), Defines.ALLOC_STATE); + mScript.bindAllocation(mParams.mAlloc, Defines.ALLOC_PARAMS); + mScript.bindAllocation(mState.mAlloc, Defines.ALLOC_STATE); mScript.bindAllocation(mAllocIconID, Defines.ALLOC_ICON_IDS); mScript.bindAllocation(mAllocLabelID, Defines.ALLOC_LABEL_IDS); mScript.bindAllocation(mAllocTouchXBorders, Defines.ALLOC_X_BORDERS); @@ -628,7 +645,7 @@ public class AllAppsView extends RSSurfaceView mTouchYBorders[4] = centerY + (int)(2.4f * cellHeight); mAllocTouchYBorders.data(mTouchYBorders); - + int centerX = (width / 2); mTouchXBorders[0] = centerX - (2 * cellWidth); mTouchXBorders[1] = centerX - (int)(0.83f * cellWidth);; @@ -660,7 +677,7 @@ public class AllAppsView extends RSSurfaceView return -1; } - return (currentPage * Defines.ROWS_PER_PAGE * Defines.COLUMNS_PER_PAGE) + return (currentPage * Defines.ROWS_PER_PAGE * Defines.COLUMNS_PER_PAGE) + (row * Defines.ROWS_PER_PAGE) + col; }