diff options
Diffstat (limited to 'src/com/cyanogenmod/trebuchet/Workspace.java')
-rw-r--r-- | src/com/cyanogenmod/trebuchet/Workspace.java | 72 |
1 files changed, 68 insertions, 4 deletions
diff --git a/src/com/cyanogenmod/trebuchet/Workspace.java b/src/com/cyanogenmod/trebuchet/Workspace.java index e404b5c..bcaaccf 100644 --- a/src/com/cyanogenmod/trebuchet/Workspace.java +++ b/src/com/cyanogenmod/trebuchet/Workspace.java @@ -36,10 +36,12 @@ import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; +import android.graphics.Paint; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.Region.Op; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.IBinder; @@ -106,8 +108,14 @@ public class Workspace extends SmoothPagedView private int mOriginalPageSpacing; private final WallpaperManager mWallpaperManager; + private boolean mWallpaperHack; + private Bitmap mWallpaperBitmap; + private float mWallpaperScrollX; + private float mWallpaperScrollY; + private int[] mWallpaperOffsets = new int[2]; + private Paint mPaint = new Paint(); private IBinder mWindowToken; - private static final float WALLPAPER_SCREENS_SPAN = 2f; + private static final float DEFAULT_WALLPAPER_SCREENS_SPAN = 2f; /** * CellInfo for the cell that is currently being dragged @@ -349,17 +357,20 @@ public class Workspace extends SmoothPagedView if (mDefaultHomescreen >= mNumberHomescreens) { mDefaultHomescreen = mNumberHomescreens / 2; } + mScreenPaddingVertical = PreferencesProvider.Interface.Homescreen.getScreenPaddingVertical(context); mScreenPaddingHorizontal = PreferencesProvider.Interface.Homescreen.getScreenPaddingHorizontal(context); mShowSearchBar = PreferencesProvider.Interface.Homescreen.getShowSearchBar(context); mResizeAnyWidget = PreferencesProvider.Interface.Homescreen.getResizeAnyWidget(context); mHideIconLabels = PreferencesProvider.Interface.Homescreen.getHideIconLabels(context); mScrollWallpaper = PreferencesProvider.Interface.Homescreen.Scrolling.getScrollWallpaper(context); + mWallpaperHack = PreferencesProvider.Interface.Homescreen.Scrolling.getWallpaperHack(context); mShowScrollingIndicator = PreferencesProvider.Interface.Homescreen.Indicator.getShowScrollingIndicator(context); mFadeScrollingIndicator = PreferencesProvider.Interface.Homescreen.Indicator.getFadeScrollingIndicator(context); mShowDockDivider = PreferencesProvider.Interface.Homescreen.Indicator.getShowDockDivider(context); initWorkspace(); + checkWallpaper(); // Disable multitouch across the workspace/all apps/customize tray setMotionEventSplittingEnabled(true); @@ -503,6 +514,21 @@ public class Workspace extends SmoothPagedView mFlingThresholdVelocity = (int) (FLING_THRESHOLD_VELOCITY * mDensity); } + protected void checkWallpaper() { + if (mWallpaperHack) { + if (mWallpaperBitmap != null) { + mWallpaperBitmap = null; + } + if (mWallpaperManager.getWallpaperInfo() == null) { + Drawable wallpaper = mWallpaperManager.getDrawable(); + if (wallpaper instanceof BitmapDrawable) { + mWallpaperBitmap = ((BitmapDrawable) wallpaper).getBitmap(); + } + } + } + mLauncher.setWallpaperVisibility(mWallpaperBitmap == null); + } + @Override protected int getScrollMode() { return SmoothPagedView.X_LARGE_MODE; @@ -943,7 +969,7 @@ public class Workspace extends SmoothPagedView mWallpaperWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim)); mWallpaperHeight = maxDim; } else { - mWallpaperWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim); + mWallpaperWidth = Math.max((int) (minDim * DEFAULT_WALLPAPER_SCREENS_SPAN), maxDim); mWallpaperHeight = maxDim; } new Thread("setWallpaperDimension") { @@ -995,7 +1021,9 @@ public class Workspace extends SmoothPagedView } private void centerWallpaperOffset() { - if (mWindowToken != null) { + if (mWallpaperHack) { + mWallpaperScrollX = 0.5f; + } else if (mWindowToken != null) { mWallpaperManager.setWallpaperOffsetSteps(0.5f, 0); mWallpaperManager.setWallpaperOffsets(mWindowToken, 0.5f, 0); } @@ -1017,7 +1045,10 @@ public class Workspace extends SmoothPagedView updateNow = keepUpdating = mWallpaperOffset.computeScrollOffset(); } if (updateNow) { - if (mWindowToken != null) { + if (mWallpaperHack) { + mWallpaperScrollX = mWallpaperOffset.getCurrX(); + mWallpaperScrollY = mWallpaperOffset.getCurrY(); + } else if (mWindowToken != null) { mWallpaperManager.setWallpaperOffsets(mWindowToken, mWallpaperOffset.getCurrX(), mWallpaperOffset.getCurrY()); } @@ -1391,12 +1422,45 @@ public class Workspace extends SmoothPagedView super.onLayout(changed, left, top, right, bottom); } + + protected void onSizeChanged (int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + getLocationOnScreen(mWallpaperOffsets); + } + @Override protected void onDraw(Canvas canvas) { if (mScrollWallpaper) { updateWallpaperOffsets(); } + // Draw the wallpaper if necessary + if (mWallpaperHack && mWallpaperBitmap != null) { + float x = getScrollX(); + float y = getScrollY(); + + int width = getWidth(); + int height = getHeight(); + int wallpaperWidth = mWallpaperBitmap.getWidth(); + int wallpaperHeight = mWallpaperBitmap.getHeight(); + + if (width + mWallpaperOffsets[0] > wallpaperWidth) { + // Wallpaper is smaller than screen + x += (width - wallpaperWidth) / 2; + } else { + x -= mWallpaperScrollX * (wallpaperWidth - width) + mWallpaperOffsets[0]; + } + if (height + mWallpaperOffsets[1] > wallpaperHeight) { + // Wallpaper is smaller than screen + y += (height - wallpaperHeight) / 2; + } else { + y -= mWallpaperScrollY * (wallpaperHeight - height) + mWallpaperOffsets[1]; + } + + canvas.drawBitmap(mWallpaperBitmap, x, y, mPaint); + } + // Draw the background gradient if necessary if (mBackground != null && mBackgroundAlpha > 0.0f && mDrawBackground) { int alpha = (int) (mBackgroundAlpha * 255); |