am a8f1a805: am 61462b43: Merge change I1864d098 into eclair

Merge commit 'a8f1a805c8b6dff5becbd95122462d91c1d1b254' into eclair-mr2-plus-aosp

* commit 'a8f1a805c8b6dff5becbd95122462d91c1d1b254':
  Improve wallpaper offset handling.
This commit is contained in:
Dianne Hackborn
2009-10-20 12:18:46 -07:00
committed by Android Git Automerger

View File

@@ -430,8 +430,8 @@ public class WindowManagerService extends IWindowManager.Stub
// to another, and this is the higher one in Z-order. // to another, and this is the higher one in Z-order.
WindowState mUpperWallpaperTarget = null; WindowState mUpperWallpaperTarget = null;
int mWallpaperAnimLayerAdjustment; int mWallpaperAnimLayerAdjustment;
float mLastWallpaperX; float mLastWallpaperX = -1;
float mLastWallpaperY; float mLastWallpaperY = -1;
// Lock for waiting for the wallpaper. // Lock for waiting for the wallpaper.
final Object mWaitingOnWallpaperLock = new Object(); final Object mWaitingOnWallpaperLock = new Object();
// This is set when we are waiting for a wallpaper to tell us it is done // This is set when we are waiting for a wallpaper to tell us it is done
@@ -1464,8 +1464,12 @@ public class WindowManagerService extends IWindowManager.Stub
} }
if (visible) { if (visible) {
mLastWallpaperX = mWallpaperTarget.mWallpaperX; if (mWallpaperTarget.mWallpaperX >= 0) {
mLastWallpaperY = mWallpaperTarget.mWallpaperY; mLastWallpaperX = mWallpaperTarget.mWallpaperX;
}
if (mWallpaperTarget.mWallpaperY >= 0) {
mLastWallpaperY = mWallpaperTarget.mWallpaperY;
}
} }
// Start stepping backwards from here, ensuring that our wallpaper windows // Start stepping backwards from here, ensuring that our wallpaper windows
@@ -1566,34 +1570,32 @@ public class WindowManagerService extends IWindowManager.Stub
boolean sync) { boolean sync) {
boolean changed = false; boolean changed = false;
boolean rawChanged = false; boolean rawChanged = false;
if (mLastWallpaperX >= 0) { float wpx = mLastWallpaperX >= 0 ? mLastWallpaperX : 0.5f;
int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw; int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw;
int offset = availw > 0 ? -(int)(availw*mLastWallpaperX+.5f) : 0; int offset = availw > 0 ? -(int)(availw*wpx+.5f) : 0;
changed = wallpaperWin.mXOffset != offset; changed = wallpaperWin.mXOffset != offset;
if (changed) { if (changed) {
if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper " if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
+ wallpaperWin + " x: " + offset); + wallpaperWin + " x: " + offset);
wallpaperWin.mXOffset = offset; wallpaperWin.mXOffset = offset;
} }
if (wallpaperWin.mWallpaperX != mLastWallpaperX) { if (wallpaperWin.mWallpaperX != wpx) {
wallpaperWin.mWallpaperX = mLastWallpaperX; wallpaperWin.mWallpaperX = wpx;
rawChanged = true; rawChanged = true;
}
} }
if (mLastWallpaperY >= 0) { float wpy = mLastWallpaperY >= 0 ? mLastWallpaperY : 0.5f;
int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh; int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh;
int offset = availh > 0 ? -(int)(availh*mLastWallpaperY+.5f) : 0; offset = availh > 0 ? -(int)(availh*wpy+.5f) : 0;
if (wallpaperWin.mYOffset != offset) { if (wallpaperWin.mYOffset != offset) {
if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper " if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
+ wallpaperWin + " y: " + offset); + wallpaperWin + " y: " + offset);
changed = true; changed = true;
wallpaperWin.mYOffset = offset; wallpaperWin.mYOffset = offset;
} }
if (wallpaperWin.mWallpaperY != mLastWallpaperY) { if (wallpaperWin.mWallpaperY != wpy) {
wallpaperWin.mWallpaperY = mLastWallpaperY; wallpaperWin.mWallpaperY = wpy;
rawChanged = true; rawChanged = true;
}
} }
if (rawChanged) { if (rawChanged) {
@@ -1649,7 +1651,7 @@ public class WindowManagerService extends IWindowManager.Stub
} }
} }
boolean updateWallpaperOffsetLocked(boolean sync) { boolean updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) {
final int dw = mDisplay.getWidth(); final int dw = mDisplay.getWidth();
final int dh = mDisplay.getHeight(); final int dh = mDisplay.getHeight();
@@ -1657,22 +1659,31 @@ public class WindowManagerService extends IWindowManager.Stub
WindowState target = mWallpaperTarget; WindowState target = mWallpaperTarget;
if (target != null) { if (target != null) {
mLastWallpaperX = target.mWallpaperX; if (target.mWallpaperX >= 0) {
mLastWallpaperY = target.mWallpaperY; mLastWallpaperX = target.mWallpaperX;
int curTokenIndex = mWallpaperTokens.size(); } else if (changingTarget.mWallpaperX >= 0) {
while (curTokenIndex > 0) { mLastWallpaperX = changingTarget.mWallpaperX;
curTokenIndex--; }
WindowToken token = mWallpaperTokens.get(curTokenIndex); if (target.mWallpaperY >= 0) {
int curWallpaperIndex = token.windows.size(); mLastWallpaperY = target.mWallpaperY;
while (curWallpaperIndex > 0) { } else if (changingTarget.mWallpaperY >= 0) {
curWallpaperIndex--; mLastWallpaperY = changingTarget.mWallpaperY;
WindowState wallpaper = token.windows.get(curWallpaperIndex); }
if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) { }
wallpaper.computeShownFrameLocked();
changed = true; int curTokenIndex = mWallpaperTokens.size();
// We only want to be synchronous with one wallpaper. while (curTokenIndex > 0) {
sync = false; curTokenIndex--;
} WindowToken token = mWallpaperTokens.get(curTokenIndex);
int curWallpaperIndex = token.windows.size();
while (curWallpaperIndex > 0) {
curWallpaperIndex--;
WindowState wallpaper = token.windows.get(curWallpaperIndex);
if (updateWallpaperOffsetLocked(wallpaper, dw, dh, sync)) {
wallpaper.computeShownFrameLocked();
changed = true;
// We only want to be synchronous with one wallpaper.
sync = false;
} }
} }
} }
@@ -2179,11 +2190,8 @@ public class WindowManagerService extends IWindowManager.Stub
if (window.mWallpaperX != x || window.mWallpaperY != y) { if (window.mWallpaperX != x || window.mWallpaperY != y) {
window.mWallpaperX = x; window.mWallpaperX = x;
window.mWallpaperY = y; window.mWallpaperY = y;
if (updateWallpaperOffsetLocked(window, true)) {
if (mWallpaperTarget == window) { performLayoutAndPlaceSurfacesLocked();
if (updateWallpaperOffsetLocked(true)) {
performLayoutAndPlaceSurfacesLocked();
}
} }
} }
} }