summaryrefslogtreecommitdiffstats
path: root/chrome/browser/notifications
diff options
context:
space:
mode:
authorjohnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-31 19:13:23 +0000
committerjohnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-31 19:13:23 +0000
commit3eafbf73e409ffac6ee88ca08ff4b44600e88f85 (patch)
tree9f8ffa7320a751d167661c6ae69c8fd0e5896bca /chrome/browser/notifications
parent4618ddb87264069a7b490b1b7914a51e5732beef (diff)
downloadchromium_src-3eafbf73e409ffac6ee88ca08ff4b44600e88f85.zip
chromium_src-3eafbf73e409ffac6ee88ca08ff4b44600e88f85.tar.gz
chromium_src-3eafbf73e409ffac6ee88ca08ff4b44600e88f85.tar.bz2
Make mac notifications less janky: group the animation together so that they slide in a group, and make the animation duration shorter.
Remove some unnecessary repositionings. BUG=49245 TEST=notifications on mac Review URL: http://codereview.chromium.org/3259009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@58036 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/notifications')
-rw-r--r--chrome/browser/notifications/balloon_collection.cc3
-rw-r--r--chrome/browser/notifications/balloon_collection_impl.h4
-rw-r--r--chrome/browser/notifications/balloon_collection_linux.cc4
-rw-r--r--chrome/browser/notifications/balloon_collection_mac.mm10
-rw-r--r--chrome/browser/notifications/balloon_collection_win.cc4
5 files changed, 23 insertions, 2 deletions
diff --git a/chrome/browser/notifications/balloon_collection.cc b/chrome/browser/notifications/balloon_collection.cc
index 3b66a07..ebbe566f 100644
--- a/chrome/browser/notifications/balloon_collection.cc
+++ b/chrome/browser/notifications/balloon_collection.cc
@@ -62,7 +62,6 @@ void BalloonCollectionImpl::Add(const Notification& notification,
if (balloons_.size() > 0)
new_balloon->set_offset(balloons_[balloons_.size() - 1]->offset());
#endif
-
balloons_.push_back(new_balloon);
PositionBalloons(false);
@@ -151,7 +150,7 @@ void BalloonCollectionImpl::OnBalloonClosed(Balloon* source) {
space_change_listener_->OnBalloonSpaceChanged();
}
-void BalloonCollectionImpl::PositionBalloons(bool reposition) {
+void BalloonCollectionImpl::PositionBalloonsInternal(bool reposition) {
layout_.RefreshSystemMetrics();
gfx::Point origin = layout_.GetLayoutOrigin();
for (Balloons::iterator it = balloons_.begin(); it != balloons_.end(); ++it) {
diff --git a/chrome/browser/notifications/balloon_collection_impl.h b/chrome/browser/notifications/balloon_collection_impl.h
index d1307355..dc9975e 100644
--- a/chrome/browser/notifications/balloon_collection_impl.h
+++ b/chrome/browser/notifications/balloon_collection_impl.h
@@ -139,8 +139,12 @@ class BalloonCollectionImpl : public BalloonCollection
int count() const { return balloons_.size(); }
// Adjusts the positions of the balloons (e.g., when one is closed).
+ // Implemented by each platform for specific UI requirements.
void PositionBalloons(bool is_reposition);
+ // Cross-platform internal implementation for PositionBalloons.
+ void PositionBalloonsInternal(bool is_reposition);
+
#if defined(OS_MACOSX)
// Get the work area on Mac OS, without inverting the coordinates.
static gfx::Rect GetMacWorkArea();
diff --git a/chrome/browser/notifications/balloon_collection_linux.cc b/chrome/browser/notifications/balloon_collection_linux.cc
index a499292..f15c713 100644
--- a/chrome/browser/notifications/balloon_collection_linux.cc
+++ b/chrome/browser/notifications/balloon_collection_linux.cc
@@ -30,6 +30,10 @@ int BalloonCollectionImpl::Layout::VerticalEdgeMargin() const {
return 5;
}
+void BalloonCollectionImpl::PositionBalloons(bool reposition) {
+ PositionBalloonsInternal(reposition);
+}
+
void BalloonCollectionImpl::DidProcessEvent(GdkEvent* event) {
switch (event->type) {
case GDK_MOTION_NOTIFY:
diff --git a/chrome/browser/notifications/balloon_collection_mac.mm b/chrome/browser/notifications/balloon_collection_mac.mm
index f4d4405..e3ac179 100644
--- a/chrome/browser/notifications/balloon_collection_mac.mm
+++ b/chrome/browser/notifications/balloon_collection_mac.mm
@@ -4,6 +4,8 @@
#include "chrome/browser/notifications/balloon_collection_impl.h"
+#import <Cocoa/Cocoa.h>
+
#include "chrome/browser/cocoa/notifications/balloon_view_bridge.h"
Balloon* BalloonCollectionImpl::MakeBalloon(const Notification& notification,
@@ -33,6 +35,14 @@ int BalloonCollectionImpl::Layout::VerticalEdgeMargin() const {
return 0;
}
+void BalloonCollectionImpl::PositionBalloons(bool reposition) {
+ // Use an animation context so that all the balloons animate together.
+ [NSAnimationContext beginGrouping];
+ [[NSAnimationContext currentContext] setDuration:0.1f];
+ PositionBalloonsInternal(reposition);
+ [NSAnimationContext endGrouping];
+}
+
// static
BalloonCollection* BalloonCollection::Create() {
return new BalloonCollectionImpl();
diff --git a/chrome/browser/notifications/balloon_collection_win.cc b/chrome/browser/notifications/balloon_collection_win.cc
index b5c2351..8915662 100644
--- a/chrome/browser/notifications/balloon_collection_win.cc
+++ b/chrome/browser/notifications/balloon_collection_win.cc
@@ -29,6 +29,10 @@ int BalloonCollectionImpl::Layout::VerticalEdgeMargin() const {
return 0;
}
+void BalloonCollectionImpl::PositionBalloons(bool reposition) {
+ PositionBalloonsInternal(reposition);
+}
+
void BalloonCollectionImpl::DidProcessMessage(const MSG& msg) {
switch (msg.message) {
case WM_MOUSEMOVE: