OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/tabs/side_tab.h" | 5 #include "chrome/browser/views/tabs/side_tab.h" |
6 | 6 |
7 #include "app/gfx/canvas.h" | 7 #include "app/gfx/canvas.h" |
8 #include "app/gfx/path.h" | 8 #include "app/gfx/path.h" |
9 #include "app/gfx/skia_util.h" | 9 #include "app/gfx/skia_util.h" |
10 #include "app/resource_bundle.h" | 10 #include "app/resource_bundle.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
49 | 49 |
50 views::ImageButton* close_button = new views::ImageButton(this); | 50 views::ImageButton* close_button = new views::ImageButton(this); |
51 close_button->SetImage(views::CustomButton::BS_NORMAL, close_button_n_); | 51 close_button->SetImage(views::CustomButton::BS_NORMAL, close_button_n_); |
52 close_button->SetImage(views::CustomButton::BS_HOT, close_button_h_); | 52 close_button->SetImage(views::CustomButton::BS_HOT, close_button_h_); |
53 close_button->SetImage(views::CustomButton::BS_PUSHED, close_button_p_); | 53 close_button->SetImage(views::CustomButton::BS_PUSHED, close_button_p_); |
54 close_button_ = close_button; | 54 close_button_ = close_button; |
55 AddChildView(close_button_); | 55 AddChildView(close_button_); |
56 | 56 |
57 hover_animation_.reset(new SlideAnimation(this)); | 57 hover_animation_.reset(new SlideAnimation(this)); |
58 hover_animation_->SetSlideDuration(kHoverDurationMs); | 58 hover_animation_->SetSlideDuration(kHoverDurationMs); |
| 59 |
| 60 SetContextMenuController(this); |
59 } | 61 } |
60 | 62 |
61 SideTab::~SideTab() { | 63 SideTab::~SideTab() { |
62 } | 64 } |
63 | 65 |
64 void SideTab::SetNetworkState(SideTabStripModel::NetworkState state) { | 66 void SideTab::SetNetworkState(SideTabStripModel::NetworkState state) { |
65 if (current_state_ != state) { | 67 if (current_state_ != state) { |
66 // The waiting animation is the reverse of the loading animation, but at a | 68 // The waiting animation is the reverse of the loading animation, but at a |
67 // different rate - the following reverses and scales the animation_frame_ | 69 // different rate - the following reverses and scales the animation_frame_ |
68 // so that the frame is at an equivalent position when going from one | 70 // so that the frame is at an equivalent position when going from one |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 105 |
104 //////////////////////////////////////////////////////////////////////////////// | 106 //////////////////////////////////////////////////////////////////////////////// |
105 // SideTab, views::ButtonListener implementation: | 107 // SideTab, views::ButtonListener implementation: |
106 | 108 |
107 void SideTab::ButtonPressed(views::Button* sender, const views::Event& event) { | 109 void SideTab::ButtonPressed(views::Button* sender, const views::Event& event) { |
108 DCHECK(sender == close_button_); | 110 DCHECK(sender == close_button_); |
109 model_->CloseTab(this); | 111 model_->CloseTab(this); |
110 } | 112 } |
111 | 113 |
112 //////////////////////////////////////////////////////////////////////////////// | 114 //////////////////////////////////////////////////////////////////////////////// |
| 115 // SideTab, views::ContextMenuController implementation: |
| 116 |
| 117 void SideTab::ShowContextMenu(views::View* source, |
| 118 const gfx::Point& p, |
| 119 bool is_mouse_gesture) { |
| 120 model_->ShowContextMenu(this, p); |
| 121 } |
| 122 |
| 123 //////////////////////////////////////////////////////////////////////////////// |
113 // SideTab, views::View overrides: | 124 // SideTab, views::View overrides: |
114 | 125 |
115 void SideTab::Layout() { | 126 void SideTab::Layout() { |
116 int icon_y; | 127 int icon_y; |
117 int icon_x = icon_y = (height() - kIconSize) / 2; | 128 int icon_x = icon_y = (height() - kIconSize) / 2; |
118 icon_bounds_.SetRect(icon_x, icon_y, kIconSize, kIconSize); | 129 icon_bounds_.SetRect(icon_x, icon_y, kIconSize, kIconSize); |
119 | 130 |
120 gfx::Size ps = close_button_->GetPreferredSize(); | 131 gfx::Size ps = close_button_->GetPreferredSize(); |
121 int close_y = (height() - ps.height()) / 2; | 132 int close_y = (height() - ps.height()) / 2; |
122 close_button_->SetBounds(width() - ps.width() - close_y, close_y, ps.width(), | 133 close_button_->SetBounds( |
123 ps.height()); | 134 std::max(0, width() - ps.width() - close_y), |
| 135 close_y, |
| 136 ps.width(), |
| 137 ps.height()); |
124 | 138 |
125 int title_y = (height() - font_->height()) / 2; | 139 int title_y = (height() - font_->height()) / 2; |
126 int title_x = icon_bounds_.right() + kIconTitleSpacing; | 140 int title_x = icon_bounds_.right() + kIconTitleSpacing; |
127 title_bounds_.SetRect(title_x, title_y, | 141 title_bounds_.SetRect( |
128 close_button_->x() - kTitleCloseSpacing - title_x, | 142 title_x, |
129 font_->height()); | 143 title_y, |
| 144 std::max(0, close_button_->x() - kTitleCloseSpacing - title_x), |
| 145 font_->height()); |
130 } | 146 } |
131 | 147 |
132 void SideTab::Paint(gfx::Canvas* canvas) { | 148 void SideTab::Paint(gfx::Canvas* canvas) { |
133 SkPaint paint; | 149 SkPaint paint; |
134 paint.setColor(kTabBackgroundColor); | 150 paint.setColor(kTabBackgroundColor); |
135 paint.setAntiAlias(true); | 151 paint.setAntiAlias(true); |
136 gfx::Path tab_shape; | 152 gfx::Path tab_shape; |
137 FillTabShapePath(&tab_shape); | 153 FillTabShapePath(&tab_shape); |
138 canvas->drawPath(tab_shape, paint); | 154 canvas->drawPath(tab_shape, paint); |
139 | 155 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 waiting_animation_frame_count = | 266 waiting_animation_frame_count = |
251 waiting_animation_frames->width() / waiting_animation_frames->height(); | 267 waiting_animation_frames->width() / waiting_animation_frames->height(); |
252 | 268 |
253 waiting_to_loading_frame_count_ratio = | 269 waiting_to_loading_frame_count_ratio = |
254 waiting_animation_frame_count / loading_animation_frame_count; | 270 waiting_animation_frame_count / loading_animation_frame_count; |
255 | 271 |
256 initialized = true; | 272 initialized = true; |
257 } | 273 } |
258 } | 274 } |
259 | 275 |
OLD | NEW |