c230c2d04ce7c57b4a2812a073fbce4f39f9f6d2
[platform/framework/web/crosswalk.git] / src / ui / message_center / views / message_bubble_base.cc
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 "ui/message_center/views/message_bubble_base.h"
6
7 #include "base/bind.h"
8 #include "ui/message_center/message_center_style.h"
9 #include "ui/views/widget/widget.h"
10 #include "ui/views/widget/widget_observer.h"
11
12 namespace {
13 // Delay laying out the MessageBubbleBase until all notifications have been
14 // added and icons have had a chance to load.
15 const int kUpdateDelayMs = 50;
16 const int kMessageBubbleBaseDefaultMaxHeight = 400;
17 }
18
19 namespace message_center {
20
21 const SkColor MessageBubbleBase::kBackgroundColor =
22     SkColorSetRGB(0xfe, 0xfe, 0xfe);
23
24 MessageBubbleBase::MessageBubbleBase(MessageCenter* message_center,
25                                      MessageCenterTray* tray)
26     : message_center_(message_center),
27       tray_(tray),
28       bubble_view_(NULL),
29       weak_ptr_factory_(this),
30       max_height_(kMessageBubbleBaseDefaultMaxHeight) {
31 }
32
33 MessageBubbleBase::~MessageBubbleBase() {
34   if (bubble_view_)
35     bubble_view_->reset_delegate();
36 }
37
38 void MessageBubbleBase::BubbleViewDestroyed() {
39   bubble_view_ = NULL;
40   OnBubbleViewDestroyed();
41 }
42
43 void MessageBubbleBase::ScheduleUpdate() {
44   weak_ptr_factory_.InvalidateWeakPtrs();  // Cancel any pending update.
45   base::MessageLoop::current()->PostDelayedTask(
46       FROM_HERE,
47       base::Bind(&MessageBubbleBase::UpdateBubbleView,
48                  weak_ptr_factory_.GetWeakPtr()),
49       base::TimeDelta::FromMilliseconds(kUpdateDelayMs));
50 }
51
52 bool MessageBubbleBase::IsVisible() const {
53   return bubble_view() && bubble_view()->GetWidget()->IsVisible();
54 }
55
56 void MessageBubbleBase::SetMaxHeight(int height) {
57   // Maximum height makes sense only for the new design.
58   if (height == 0)
59     height = kMessageBubbleBaseDefaultMaxHeight;
60   if (height == max_height_)
61     return;
62
63   max_height_ = height;
64   if (bubble_view_)
65     bubble_view_->SetMaxHeight(max_height_);
66 }
67
68 views::TrayBubbleView::InitParams MessageBubbleBase::GetDefaultInitParams(
69     views::TrayBubbleView::AnchorAlignment anchor_alignment) {
70   views::TrayBubbleView::InitParams init_params(
71       views::TrayBubbleView::ANCHOR_TYPE_TRAY,
72       anchor_alignment,
73       kNotificationWidth,
74       kNotificationWidth);
75   init_params.arrow_color = kBackgroundDarkColor;
76   return init_params;
77 }
78
79 }  // namespace message_center