summaryrefslogtreecommitdiff
path: root/plugins/unitydialog
diff options
authorSam Spilsbury <sam.spilsbury@canonical.com>2011-08-27 15:31:53 +0800
committerSam Spilsbury <sam.spilsbury@canonical.com>2011-08-27 15:31:53 +0800
commit91fb5246c5860ab324c34bb478a09bf316032eef (patch)
tree23c93c4abc52cf3db8ab4624243107cee311fa22 /plugins/unitydialog
parentf45881aed8448e05cdbbf02a9c82adedcab727c5 (diff)
Also move the window back
(bzr r1448.1.4)
Diffstat (limited to 'plugins/unitydialog')
-rw-r--r--plugins/unitydialog/src/unitydialog.cpp32
-rw-r--r--plugins/unitydialog/src/unitydialog.h2
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;
};