diff options
author | johnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 19:13:23 +0000 |
---|---|---|
committer | johnnyg@chromium.org <johnnyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-31 19:13:23 +0000 |
commit | 3eafbf73e409ffac6ee88ca08ff4b44600e88f85 (patch) | |
tree | 9f8ffa7320a751d167661c6ae69c8fd0e5896bca /chrome/browser/notifications | |
parent | 4618ddb87264069a7b490b1b7914a51e5732beef (diff) | |
download | chromium_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')
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: |