1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/notifications/balloon_collection_impl.h" 6 7 #include "chrome/browser/notifications/balloon.h" 8 #include "chrome/browser/ui/gtk/notifications/balloon_view_gtk.h" 9 #include "ui/gfx/size.h" 10 11 Balloon* BalloonCollectionImpl::MakeBalloon(const Notification& notification, 12 Profile* profile) { 13 Balloon* balloon = new Balloon(notification, profile, this); 14 15 balloon->set_view(new BalloonViewImpl(this)); 16 gfx::Size size(layout_.min_balloon_width(), layout_.min_balloon_height()); 17 balloon->set_content_size(size); 18 return balloon; 19 } 20 21 int BalloonCollectionImpl::Layout::InterBalloonMargin() const { 22 return 5; 23 } 24 25 int BalloonCollectionImpl::Layout::HorizontalEdgeMargin() const { 26 return 5; 27 } 28 29 int BalloonCollectionImpl::Layout::VerticalEdgeMargin() const { 30 return 5; 31 } 32 33 bool BalloonCollectionImpl::Layout::NeedToMoveAboveLeftSidePanels() const { 34 return placement_ == VERTICALLY_FROM_BOTTOM_LEFT; 35 } 36 37 bool BalloonCollectionImpl::Layout::NeedToMoveAboveRightSidePanels() const { 38 return placement_ == VERTICALLY_FROM_BOTTOM_RIGHT; 39 } 40 41 void BalloonCollectionImpl::PositionBalloons(bool reposition) { 42 PositionBalloonsInternal(reposition); 43 } 44 45 void BalloonCollectionImpl::WillProcessEvent(GdkEvent* event) { 46 } 47 48 void BalloonCollectionImpl::DidProcessEvent(GdkEvent* event) { 49 switch (event->type) { 50 case GDK_MOTION_NOTIFY: 51 case GDK_LEAVE_NOTIFY: 52 HandleMouseMoveEvent(); 53 break; 54 default: 55 break; 56 } 57 } 58 59 bool BalloonCollectionImpl::IsCursorInBalloonCollection() const { 60 GdkScreen* screen = gdk_screen_get_default(); 61 GdkDisplay* display = gdk_screen_get_display(screen); 62 gint x, y; 63 gdk_display_get_pointer(display, NULL, &x, &y, NULL); 64 65 return GetBalloonsBoundingBox().Contains(gfx::Point(x, y)); 66 } 67 68 void BalloonCollectionImpl::SetPositionPreference( 69 PositionPreference position) { 70 if (position == DEFAULT_POSITION) 71 position = LOWER_RIGHT; 72 73 // All positioning schemes are vertical, and linux 74 // uses the normal screen orientation. 75 if (position == UPPER_RIGHT) 76 layout_.set_placement(Layout::VERTICALLY_FROM_TOP_RIGHT); 77 else if (position == UPPER_LEFT) 78 layout_.set_placement(Layout::VERTICALLY_FROM_TOP_LEFT); 79 else if (position == LOWER_LEFT) 80 layout_.set_placement(Layout::VERTICALLY_FROM_BOTTOM_LEFT); 81 else if (position == LOWER_RIGHT) 82 layout_.set_placement(Layout::VERTICALLY_FROM_BOTTOM_RIGHT); 83 else 84 NOTREACHED(); 85 86 layout_.ComputeOffsetToMoveAbovePanels(); 87 PositionBalloons(true); 88 } 89 90 // static 91 BalloonCollection* BalloonCollection::Create() { 92 return new BalloonCollectionImpl(); 93 } 94