diff options
| author | Sam Spilsbury <sam.spilsbury@canonical.com> | 2011-08-27 15:31:53 +0800 |
|---|---|---|
| committer | Sam Spilsbury <sam.spilsbury@canonical.com> | 2011-08-27 15:31:53 +0800 |
| commit | 91fb5246c5860ab324c34bb478a09bf316032eef (patch) | |
| tree | 23c93c4abc52cf3db8ab4624243107cee311fa22 /plugins/unitydialog | |
| parent | f45881aed8448e05cdbbf02a9c82adedcab727c5 (diff) | |
Also move the window back
(bzr r1448.1.4)
Diffstat (limited to 'plugins/unitydialog')
| -rw-r--r-- | plugins/unitydialog/src/unitydialog.cpp | 32 | ||||
| -rw-r--r-- | plugins/unitydialog/src/unitydialog.h | 2 |
2 files changed, 33 insertions, 1 deletions
diff --git a/plugins/unitydialog/src/unitydialog.cpp b/plugins/unitydialog/src/unitydialog.cpp index f19286165..409a05689 100644 --- a/plugins/unitydialog/src/unitydialog.cpp +++ b/plugins/unitydialog/src/unitydialog.cpp @@ -301,6 +301,23 @@ UnityDialogWindow::animate(int ms, return false; } +CompRegion +UnityDialogWindow::getDamageRegion() +{ + CompRect damageBounds; + float progress = mShadeProgress / (float) OPAQUE; + + /* Current rect in animation expanded by output + 5 */ + damageBounds.setX (window->serverOutputRect().x() + + ((mTargetPos.x() - mCurrentPos.x()) * progress)); + damageBounds.setY (window->serverOutputRect().y() + + ((mTargetPos.y() - mCurrentPos.y()) * progress)); + damageBounds.setWidth(window->serverOutputRect().width () + 5); + damageBounds.setHeight(window->serverOutputRect().height () + 5); + + return CompRegion (damageBounds); +} + void UnityDialogScreen::preparePaint(int ms) { @@ -336,7 +353,10 @@ UnityDialogScreen::donePaint() UnityDialogWindow* udw = UnityDialogWindow::get(w); if (udw->animate(0, optionGetFadeTime())) - udw->cWindow->addDamage(); + { + CompRegion damage = udw->getDamageRegion (); + cScreen->damageRegion (damage); + } else if (!udw->hasTransients()) { untrackParent(w); @@ -567,8 +587,16 @@ UnityDialogWindow::removeTransient(CompWindow* w) mIpw = None; } + mTargetPos = CompPoint (window->serverBorderRect().x (), window->serverBorderRect().y ()); + mCurrentPos = mTargetPos - mOffset; + + cWindow->addDamage(); + window->move (-mOffset.x (), -mOffset.y (), true); + window->syncPosition(); cWindow->addDamage(); + mOffset = CompPoint (0, 0); + return true; } @@ -821,6 +849,7 @@ UnityDialogWindow::animateTransients(CompWindow* skip, CompPoint& orig, CompPoin udw->mTargetPos = udw->getChildCenteredPositionForRect(newRect); udw->mCurrentPos = CompPoint(cw->serverBorderRect().x(), cw->serverBorderRect().y()); + udw->mOffset = udw->mTargetPos - udw->mCurrentPos; /* New transient position is centered to this window's target position */ if (cont) @@ -838,6 +867,7 @@ UnityDialogWindow::animateParent(CompWindow* requestor, CompPoint& orig, CompPoi udw->mTargetPos = udw->getParentCenteredPositionForRect(newRect); udw->mCurrentPos = CompPoint(mParent->serverBorderRect().x (), mParent->serverBorderRect ().y()); + udw->mOffset = udw->mTargetPos - udw->mCurrentPos; udw->animateTransients(NULL, udw->mTargetPos, udw->mCurrentPos, false); } diff --git a/plugins/unitydialog/src/unitydialog.h b/plugins/unitydialog/src/unitydialog.h index 90c43ab1f..4a65f7f34 100644 --- a/plugins/unitydialog/src/unitydialog.h +++ b/plugins/unitydialog/src/unitydialog.h @@ -236,6 +236,7 @@ public: void adjustIPW(); bool animate(int ms, float fadeTime); + CompRegion getDamageRegion(); private: @@ -247,6 +248,7 @@ private: int mShadeProgress; CompPoint mTargetPos; CompPoint mCurrentPos; + CompPoint mOffset; Window mIpw; }; |
