OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/views/notifications/balloon_view.h" | 5 #include "chrome/browser/views/notifications/balloon_view.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "app/gfx/canvas.h" | 9 #include "app/gfx/canvas.h" |
10 #include "app/gfx/gdi_util.h" | 10 #include "app/gfx/gdi_util.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } // namespace | 64 } // namespace |
65 | 65 |
66 class BalloonCloseButtonListener : public views::ButtonListener { | 66 class BalloonCloseButtonListener : public views::ButtonListener { |
67 public: | 67 public: |
68 explicit BalloonCloseButtonListener(BalloonView* view) | 68 explicit BalloonCloseButtonListener(BalloonView* view) |
69 : view_(view) {} | 69 : view_(view) {} |
70 virtual ~BalloonCloseButtonListener() {} | 70 virtual ~BalloonCloseButtonListener() {} |
71 | 71 |
72 // The only button currently is the close button. | 72 // The only button currently is the close button. |
73 virtual void ButtonPressed(views::Button* sender, const views::Event&) { | 73 virtual void ButtonPressed(views::Button* sender, const views::Event&) { |
74 view_->Close(); | 74 view_->Close(true); |
75 } | 75 } |
76 | 76 |
77 private: | 77 private: |
78 // Non-owned pointer to the view which owns this object. | 78 // Non-owned pointer to the view which owns this object. |
79 BalloonView* view_; | 79 BalloonView* view_; |
80 }; | 80 }; |
81 | 81 |
82 BalloonViewImpl::BalloonViewImpl() | 82 BalloonViewImpl::BalloonViewImpl() |
83 : balloon_(NULL), | 83 : balloon_(NULL), |
84 frame_container_(NULL), | 84 frame_container_(NULL), |
(...skipping 18 matching lines...) Expand all Loading... |
103 gfx::Insets insets(3, 3, 3, 3); | 103 gfx::Insets insets(3, 3, 3, 3); |
104 shelf_background_.reset( | 104 shelf_background_.reset( |
105 views::Painter::CreateImagePainter(*shelf_bitmap, insets, true)); | 105 views::Painter::CreateImagePainter(*shelf_bitmap, insets, true)); |
106 balloon_background_.reset( | 106 balloon_background_.reset( |
107 views::Painter::CreateImagePainter(*border_bitmap, insets, false)); | 107 views::Painter::CreateImagePainter(*border_bitmap, insets, false)); |
108 } | 108 } |
109 | 109 |
110 BalloonViewImpl::~BalloonViewImpl() { | 110 BalloonViewImpl::~BalloonViewImpl() { |
111 } | 111 } |
112 | 112 |
113 void BalloonViewImpl::Close() { | 113 void BalloonViewImpl::Close(bool by_user) { |
114 MessageLoop::current()->PostTask(FROM_HERE, | 114 MessageLoop::current()->PostTask(FROM_HERE, |
115 method_factory_.NewRunnableMethod(&BalloonViewImpl::DelayedClose)); | 115 method_factory_.NewRunnableMethod( |
| 116 &BalloonViewImpl::DelayedClose, by_user)); |
116 } | 117 } |
117 | 118 |
118 void BalloonViewImpl::DelayedClose() { | 119 void BalloonViewImpl::DelayedClose(bool by_user) { |
119 html_contents_->Shutdown(); | 120 html_contents_->Shutdown(); |
120 html_container_->CloseNow(); | 121 html_container_->CloseNow(); |
121 frame_container_->CloseNow(); | 122 frame_container_->CloseNow(); |
122 balloon_->Close(true); | 123 balloon_->OnClose(by_user); |
123 } | 124 } |
124 | 125 |
125 void BalloonViewImpl::DidChangeBounds(const gfx::Rect& previous, | 126 void BalloonViewImpl::DidChangeBounds(const gfx::Rect& previous, |
126 const gfx::Rect& current) { | 127 const gfx::Rect& current) { |
127 SizeContentsWindow(); | 128 SizeContentsWindow(); |
128 } | 129 } |
129 | 130 |
130 void BalloonViewImpl::SizeContentsWindow() { | 131 void BalloonViewImpl::SizeContentsWindow() { |
131 if (!html_container_ || !frame_container_) | 132 if (!html_container_ || !frame_container_) |
132 return; | 133 return; |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
332 SkScalar y_offset = | 333 SkScalar y_offset = |
333 static_cast<SkScalar>(background_height - kShelfBorderTopOverlap); | 334 static_cast<SkScalar>(background_height - kShelfBorderTopOverlap); |
334 canvas->translate(0, y_offset); | 335 canvas->translate(0, y_offset); |
335 shelf_background_->Paint(background_width, GetShelfHeight(), canvas); | 336 shelf_background_->Paint(background_width, GetShelfHeight(), canvas); |
336 canvas->restore(); | 337 canvas->restore(); |
337 | 338 |
338 View::Paint(canvas); | 339 View::Paint(canvas); |
339 } | 340 } |
340 | 341 |
341 void BalloonViewImpl::Observe(NotificationType type, | 342 void BalloonViewImpl::Observe(NotificationType type, |
342 const NotificationSource& source, | 343 const NotificationSource& source, |
343 const NotificationDetails& details) { | 344 const NotificationDetails& details) { |
344 if (type != NotificationType::NOTIFY_BALLOON_DISCONNECTED) { | 345 if (type != NotificationType::NOTIFY_BALLOON_DISCONNECTED) { |
345 NOTREACHED(); | 346 NOTREACHED(); |
346 return; | 347 return; |
347 } | 348 } |
348 | 349 |
349 // If the renderer process attached to this balloon is disconnected | 350 // If the renderer process attached to this balloon is disconnected |
350 // (e.g., because of a crash), we want to close the balloon. | 351 // (e.g., because of a crash), we want to close the balloon. |
351 notification_registrar_.Remove(this, | 352 notification_registrar_.Remove(this, |
352 NotificationType::NOTIFY_BALLOON_DISCONNECTED, Source<Balloon>(balloon_)); | 353 NotificationType::NOTIFY_BALLOON_DISCONNECTED, Source<Balloon>(balloon_)); |
353 Close(); | 354 Close(false); |
354 } | 355 } |
OLD | NEW |