diff options
author | Michael Jurka <mikejurka@google.com> | 2010-09-03 14:15:02 -0700 |
---|---|---|
committer | Michael Jurka <mikejurka@google.com> | 2010-09-13 15:16:10 -0700 |
commit | 5f1c509d5ad1954a7e38e77db4d5f27c7345fd39 (patch) | |
tree | 94f434edef0031fe54ae4fa2bbfee518241e982f /src/com/android/launcher2/HolographicOutlineHelper.java | |
parent | 686e136f5a1d4e1bb3a69b9b2634fc51221a3245 (diff) | |
download | android_packages_apps_Trebuchet-5f1c509d5ad1954a7e38e77db4d5f27c7345fd39.tar.gz android_packages_apps_Trebuchet-5f1c509d5ad1954a7e38e77db4d5f27c7345fd39.tar.bz2 android_packages_apps_Trebuchet-5f1c509d5ad1954a7e38e77db4d5f27c7345fd39.zip |
supporting swipable home screens on xlarge devices
- icons and widgets on home screens can be "dimmed"
- celllayout no longer renders a dimmed version of itself, but instead its children make dimmed versions of themselves
- celllayout no longer always takes up full size of workspace, in landscape mode
neighboring screens (celllayouts) are visible
- on xlarge devices, in landscape mode side screens are "dimmed"
- moved holographic outline helper to its own file
- fixed bug where mini-screens were still able to scroll left/right
Change-Id: I9e85ab4147edfae1e7525c3d11d42be3fabf4f6d
Diffstat (limited to 'src/com/android/launcher2/HolographicOutlineHelper.java')
-rw-r--r-- | src/com/android/launcher2/HolographicOutlineHelper.java | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/src/com/android/launcher2/HolographicOutlineHelper.java b/src/com/android/launcher2/HolographicOutlineHelper.java new file mode 100644 index 000000000..621033748 --- /dev/null +++ b/src/com/android/launcher2/HolographicOutlineHelper.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.launcher2; + +import android.graphics.Bitmap; +import android.graphics.BlurMaskFilter; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PointF; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; + +public class HolographicOutlineHelper { + private float mDensity; + private final Paint mHolographicPaint = new Paint(); + private final Paint mBlurPaint = new Paint(); + private final Paint mErasePaint = new Paint(); + private static final Matrix mIdentity = new Matrix();; + private static final float BLUR_FACTOR = 3.5f; + + public static final float DEFAULT_STROKE_WIDTH = 6.0f; + public static final int HOLOGRAPHIC_BLUE = 0xFF6699FF; + public static final int HOLOGRAPHIC_GREEN = 0xFF51E633; + + HolographicOutlineHelper(float density) { + mDensity = density; + mHolographicPaint.setColor(HOLOGRAPHIC_BLUE); + mHolographicPaint.setFilterBitmap(true); + mHolographicPaint.setAntiAlias(true); + mBlurPaint.setMaskFilter(new BlurMaskFilter(BLUR_FACTOR * density, + BlurMaskFilter.Blur.OUTER)); + mBlurPaint.setFilterBitmap(true); + mErasePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); + mErasePaint.setFilterBitmap(true); + mErasePaint.setAntiAlias(true); + } + + private float cubic(float r) { + return (float) (Math.pow(r - 1, 3) + 1); + } + + /** + * Returns the interpolated holographic highlight alpha for the effect we want when scrolling + * pages. + */ + public float highlightAlphaInterpolator(float r) { + final float pivot = 0.3f; + if (r < pivot) { + return Math.max(0.5f, 0.65f * cubic(r / pivot)); + } else { + return Math.min(1.0f, 0.65f * cubic(1 - (r - pivot) / (1 - pivot))); + } + } + + /** + * Returns the interpolated view alpha for the effect we want when scrolling pages. + */ + public float viewAlphaInterpolator(float r) { + final float pivot = 0.6f; + if (r < pivot) { + return r / pivot; + } else { + return 1.0f; + } + } + + /** + * Sets the color of the holographic paint to be used when applying the outline/blur. + */ + void setColor(int color) { + mHolographicPaint.setColor(color); + } + + /** + * Applies an outline to whatever is currently drawn in the specified bitmap. + */ + void applyOutline(Bitmap srcDst, Canvas srcDstCanvas, float strokeWidth, PointF offset) { + strokeWidth *= mDensity; + Bitmap mask = srcDst.extractAlpha(); + Matrix m = new Matrix(); + final int width = srcDst.getWidth(); + final int height = srcDst.getHeight(); + float xScale = strokeWidth * 2.0f / width; + float yScale = strokeWidth * 2.0f / height; + m.preScale(1 + xScale, 1 + yScale, (width / 2.0f) + offset.x, + (height / 2.0f) + offset.y); + + srcDstCanvas.drawColor(0, PorterDuff.Mode.CLEAR); + srcDstCanvas.drawBitmap(mask, m, mHolographicPaint); + srcDstCanvas.drawBitmap(mask, mIdentity, mErasePaint); + mask.recycle(); + } + + /** + * Applies an blur to whatever is currently drawn in the specified bitmap. + */ + void applyBlur(Bitmap srcDst, Canvas srcDstCanvas) { + int[] xy = new int[2]; + Bitmap mask = srcDst.extractAlpha(mBlurPaint, xy); + srcDstCanvas.drawBitmap(mask, xy[0], xy[1], mHolographicPaint); + mask.recycle(); + } +}
\ No newline at end of file |