172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/balloon_collection_impl.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/notifications/balloon.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/notifications/balloon_view.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBalloon* BalloonCollectionImpl::MakeBalloon(const Notification& notification, 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile) { 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Balloon* balloon = new Balloon(notification, profile, this); 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch balloon->set_view(new BalloonViewImpl(this)); 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size size(layout_.min_balloon_width(), layout_.min_balloon_height()); 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch balloon->set_content_size(size); 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return balloon; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint BalloonCollectionImpl::Layout::InterBalloonMargin() const { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return 3; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint BalloonCollectionImpl::Layout::HorizontalEdgeMargin() const { 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return 2; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint BalloonCollectionImpl::Layout::VerticalEdgeMargin() const { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return 0; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BalloonCollectionImpl::PositionBalloons(bool reposition) { 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick PositionBalloonsInternal(reposition); 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BalloonCollectionImpl::DidProcessMessage(const MSG& msg) { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch switch (msg.message) { 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WM_MOUSEMOVE: 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WM_MOUSELEAVE: 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch case WM_NCMOUSELEAVE: 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HandleMouseMoveEvent(); 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BalloonCollectionImpl::IsCursorInBalloonCollection() const { 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DWORD pos = GetMessagePos(); 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Point cursor(pos); 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GetBalloonsBoundingBox().Contains(cursor); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 523f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenvoid BalloonCollectionImpl::SetPositionPreference( 533f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen PositionPreference position) { 543f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (position == DEFAULT_POSITION) 553f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen position = LOWER_RIGHT; 563f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 573f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // All positioning schemes are vertical, and windows 583f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen // uses the normal screen orientation. 593f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen if (position == UPPER_RIGHT) 603f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen layout_.set_placement(Layout::VERTICALLY_FROM_TOP_RIGHT); 613f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen else if (position == UPPER_LEFT) 623f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen layout_.set_placement(Layout::VERTICALLY_FROM_TOP_LEFT); 633f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen else if (position == LOWER_LEFT) 643f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen layout_.set_placement(Layout::VERTICALLY_FROM_BOTTOM_LEFT); 653f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen else if (position == LOWER_RIGHT) 663f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen layout_.set_placement(Layout::VERTICALLY_FROM_BOTTOM_RIGHT); 673f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen else 683f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen NOTREACHED(); 693f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 703f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen PositionBalloons(true); 713f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen} 723f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBalloonCollection* BalloonCollection::Create() { 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return new BalloonCollectionImpl(); 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 77