summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorVlad Mironov <mironych@googlemail.com>2013-03-19 07:05:23 +0000
committerVlad Mironov <mironych@googlemail.com>2013-03-19 07:05:23 +0000
commit52a56eb9ec31a3480a22c8c2412f8d4ac21ffa7f (patch)
treeca66b55b3024efca76602c36d69a4342dbb7a883 /plugins
parent4b3eccbfebd9370c0f37b81fed55ce63f8fb9555 (diff)
YAPP: more correct animation
git-svn-id: http://svn.miranda-ng.org/main/trunk@4103 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins')
-rw-r--r--plugins/YAPP/src/popwin.cpp34
1 files changed, 25 insertions, 9 deletions
diff --git a/plugins/YAPP/src/popwin.cpp b/plugins/YAPP/src/popwin.cpp
index cbc7eb8139..36cd3f6d30 100644
--- a/plugins/YAPP/src/popwin.cpp
+++ b/plugins/YAPP/src/popwin.cpp
@@ -35,28 +35,40 @@ int stack_size = 0;
void RepositionWindows() {
HWNDStackNode *current;
- int x = pop_start_x, y = pop_start_y;
+ int x = pop_start_x, y;
int height;
if (options.animate == ANIMATE_HORZ)
{
- if (options.location == PL_BOTTOMRIGHT ||options.location == PL_TOPRIGHT)
+ if (options.location == PL_BOTTOMRIGHT || options.location == PL_TOPRIGHT)
x -= options.win_width + 1;
- if (options.location == PL_BOTTOMLEFT ||options.location == PL_TOPLEFT)
+ if (options.location == PL_BOTTOMLEFT || options.location == PL_TOPLEFT)
x += options.win_width + 1;
}
+ // Особый случай: выдвижение окна из-за верхнего края экрана.
+ if ((options.animate == ANIMATE_VERT) && (options.location == PL_TOPLEFT || options.location == PL_TOPRIGHT))
+ y = 0;
+ else
+ y = pop_start_y;
+
current = hwnd_stack_top;
- while(current) {
+ while (current)
+ {
SendMessage(current->hwnd, PUM_GETHEIGHT, (WPARAM)&height, 0);
- if (options.location == PL_BOTTOMRIGHT || options.location == PL_BOTTOMLEFT) y -= height + 1;
- if (options.animate == ANIMATE_VERT)
- if (options.location == PL_TOPRIGHT || options.location == PL_TOPLEFT) y += height + 1;
+ // Если окна размещать у нижнего края, то координата текущего окна меньше на его высоту.
+ if (options.location == PL_BOTTOMLEFT || options.location == PL_BOTTOMRIGHT)
+ y -= height + 1;
+
+ // Перемещаем окно.
SendMessage(current->hwnd, PUM_MOVE, (WPARAM)x, (LPARAM)y);
- if (options.animate != ANIMATE_VERT)
- if (options.location == PL_TOPRIGHT || options.location == PL_TOPLEFT) y += height + 1;
+ // Координата для следующего окна.
+ // Если окна размещать у верхнего края, то координата следующего окна больше на высоту текущего окна.
+ if (options.location == PL_TOPLEFT || options.location == PL_TOPRIGHT)
+ y += height + 1;
+ // Переходим к следующему окну.
current = current->next;
}
}
@@ -150,8 +162,12 @@ void RemoveWindowFromStack(HWND hwnd)
current = current->next;
}
+ // Если после удаления в стеке остались окна, то нужно провести сжатие:
+ // сдвинуть все окна к верхнему/нижнему краю экрана.
if (hwnd_stack_top)
+ {
RepositionWindows();
+ }
}
void BroadcastMessage(UINT msg, WPARAM wParam, LPARAM lParam)