diff options
Diffstat (limited to 'src/com/android/launcher2/CellLayout.java')
-rw-r--r-- | src/com/android/launcher2/CellLayout.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/com/android/launcher2/CellLayout.java b/src/com/android/launcher2/CellLayout.java index 667df8bec..0d80d16e6 100644 --- a/src/com/android/launcher2/CellLayout.java +++ b/src/com/android/launcher2/CellLayout.java @@ -32,10 +32,13 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.graphics.PointF; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Region; import android.graphics.drawable.Drawable; +import android.graphics.drawable.NinePatchDrawable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -88,6 +91,7 @@ public class CellLayout extends ViewGroup { private ArrayList<FolderRingAnimator> mFolderOuterRings = new ArrayList<FolderRingAnimator>(); private int[] mFolderLeaveBehindCell = {-1, -1}; + private int mForegroundAlpha = 0; private float mBackgroundAlpha; private float mBackgroundAlphaMultiplier = 1.0f; @@ -98,10 +102,15 @@ public class CellLayout extends ViewGroup { private Drawable mNormalGlowBackgroundMini; private Drawable mActiveBackgroundMini; private Drawable mActiveGlowBackgroundMini; + private Drawable mOverScrollForegroundDrawable; + private Drawable mOverScrollLeft; + private Drawable mOverScrollRight; private Rect mBackgroundRect; + private Rect mForegroundRect; private Rect mGlowBackgroundRect; private float mGlowBackgroundScale; private float mGlowBackgroundAlpha; + private int mForegroundPadding; private boolean mAcceptsDrops = true; // If we're actively dragging something over this screen, mIsDragOverlapping is true @@ -180,6 +189,10 @@ public class CellLayout extends ViewGroup { mNormalGlowBackgroundMini = res.getDrawable(R.drawable.homescreen_small_blue_strong); mActiveBackgroundMini = res.getDrawable(R.drawable.homescreen_small_green); mActiveGlowBackgroundMini = res.getDrawable(R.drawable.homescreen_small_green_strong); + mOverScrollLeft = res.getDrawable(R.drawable.overscroll_glow_left); + mOverScrollRight = res.getDrawable(R.drawable.overscroll_glow_right); + mForegroundPadding = + res.getDimensionPixelSize(R.dimen.workspace_overscroll_drawable_padding); mNormalBackground.setFilterBitmap(true); mActiveBackground.setFilterBitmap(true); @@ -261,6 +274,7 @@ public class CellLayout extends ViewGroup { } mBackgroundRect = new Rect(); + mForegroundRect = new Rect(); mGlowBackgroundRect = new Rect(); setHoverScale(1.0f); setHoverAlpha(1.0f); @@ -311,6 +325,18 @@ public class CellLayout extends ViewGroup { icon.getBottom() + getPaddingTop() + padding); } + void setOverScrollAmount(float r, boolean left) { + if (left && mOverScrollForegroundDrawable != mOverScrollLeft) { + mOverScrollForegroundDrawable = mOverScrollLeft; + } else if (!left && mOverScrollForegroundDrawable != mOverScrollRight) { + mOverScrollForegroundDrawable = mOverScrollRight; + } + + mForegroundAlpha = (int) Math.round((r * 255)); + mOverScrollForegroundDrawable.setAlpha(mForegroundAlpha); + invalidate(); + } + void setPressedOrFocusedIcon(BubbleTextView icon) { // We draw the pressed or focused BubbleTextView's background in CellLayout because it // requires an expanded clip rect (due to the glow's blur radius) @@ -577,6 +603,18 @@ public class CellLayout extends ViewGroup { } } + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + if (mForegroundAlpha > 0) { + mOverScrollForegroundDrawable.setBounds(mForegroundRect); + Paint p = ((NinePatchDrawable) mOverScrollForegroundDrawable).getPaint(); + p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD)); + mOverScrollForegroundDrawable.draw(canvas); + p.setXfermode(null); + } + } + public void showFolderAccept(FolderRingAnimator fra) { mFolderOuterRings.add(fra); } @@ -962,6 +1000,8 @@ public class CellLayout extends ViewGroup { protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); mBackgroundRect.set(0, 0, w, h); + mForegroundRect.set(mForegroundPadding, mForegroundPadding, + w - 2 * mForegroundPadding, h - 2 * mForegroundPadding); updateGlowRect(); } |