Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ash/frame/default_header_painter.h" | 5 #include "ash/frame/default_header_painter.h" |
| 6 | 6 |
| 7 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" | 7 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" |
| 8 #include "ash/frame/header_painter_util.h" | 8 #include "ash/frame/header_painter_util.h" |
| 9 #include "base/debug/leak_annotations.h" | 9 #include "base/debug/leak_annotations.h" |
| 10 #include "base/logging.h" // DCHECK | 10 #include "base/logging.h" // DCHECK |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 } // namespace | 67 } // namespace |
| 68 | 68 |
| 69 namespace ash { | 69 namespace ash { |
| 70 | 70 |
| 71 /////////////////////////////////////////////////////////////////////////////// | 71 /////////////////////////////////////////////////////////////////////////////// |
| 72 // DefaultHeaderPainter, public: | 72 // DefaultHeaderPainter, public: |
| 73 | 73 |
| 74 DefaultHeaderPainter::DefaultHeaderPainter() | 74 DefaultHeaderPainter::DefaultHeaderPainter() |
| 75 : frame_(NULL), | 75 : frame_(NULL), |
| 76 view_(NULL), | 76 view_(NULL), |
| 77 window_icon_(NULL), | 77 left_header_view_(NULL), |
| 78 window_icon_size_(HeaderPainterUtil::GetDefaultIconSize()), | 78 left_view_x_inset_(HeaderPainterUtil::GetDefaultLeftViewXInset()), |
| 79 caption_button_container_(NULL), | 79 caption_button_container_(NULL), |
| 80 height_(0), | 80 height_(0), |
| 81 mode_(MODE_INACTIVE), | 81 mode_(MODE_INACTIVE), |
| 82 initial_paint_(true), | 82 initial_paint_(true), |
| 83 activation_animation_(new gfx::SlideAnimation(this)) { | 83 activation_animation_(new gfx::SlideAnimation(this)) { |
| 84 } | 84 } |
| 85 | 85 |
| 86 DefaultHeaderPainter::~DefaultHeaderPainter() { | 86 DefaultHeaderPainter::~DefaultHeaderPainter() { |
| 87 } | 87 } |
| 88 | 88 |
| 89 void DefaultHeaderPainter::Init( | 89 void DefaultHeaderPainter::Init( |
| 90 views::Widget* frame, | 90 views::Widget* frame, |
| 91 views::View* header_view, | 91 views::View* header_view, |
| 92 views::View* window_icon, | |
| 93 FrameCaptionButtonContainerView* caption_button_container) { | 92 FrameCaptionButtonContainerView* caption_button_container) { |
| 94 DCHECK(frame); | 93 DCHECK(frame); |
| 95 DCHECK(header_view); | 94 DCHECK(header_view); |
| 96 // window_icon may be NULL. | |
| 97 DCHECK(caption_button_container); | 95 DCHECK(caption_button_container); |
| 98 frame_ = frame; | 96 frame_ = frame; |
| 99 view_ = header_view; | 97 view_ = header_view; |
| 100 window_icon_ = window_icon; | |
| 101 caption_button_container_ = caption_button_container; | 98 caption_button_container_ = caption_button_container; |
| 102 | 99 |
| 103 caption_button_container_->SetButtonImages( | 100 caption_button_container_->SetButtonImages( |
| 104 CAPTION_BUTTON_ICON_MINIMIZE, | 101 CAPTION_BUTTON_ICON_MINIMIZE, |
| 105 IDR_AURA_WINDOW_CONTROL_ICON_MINIMIZE, | 102 IDR_AURA_WINDOW_CONTROL_ICON_MINIMIZE, |
| 106 IDR_AURA_WINDOW_CONTROL_ICON_MINIMIZE_I, | 103 IDR_AURA_WINDOW_CONTROL_ICON_MINIMIZE_I, |
| 107 IDR_AURA_WINDOW_CONTROL_BACKGROUND_H, | 104 IDR_AURA_WINDOW_CONTROL_BACKGROUND_H, |
| 108 IDR_AURA_WINDOW_CONTROL_BACKGROUND_P); | 105 IDR_AURA_WINDOW_CONTROL_BACKGROUND_P); |
| 109 caption_button_container_->SetButtonImages( | 106 caption_button_container_->SetButtonImages( |
| 110 CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, | 107 CAPTION_BUTTON_ICON_MAXIMIZE_RESTORE, |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 caption_button_container_->Layout(); | 200 caption_button_container_->Layout(); |
| 204 | 201 |
| 205 gfx::Size caption_button_container_size = | 202 gfx::Size caption_button_container_size = |
| 206 caption_button_container_->GetPreferredSize(); | 203 caption_button_container_->GetPreferredSize(); |
| 207 caption_button_container_->SetBounds( | 204 caption_button_container_->SetBounds( |
| 208 view_->width() - caption_button_container_size.width(), | 205 view_->width() - caption_button_container_size.width(), |
| 209 0, | 206 0, |
| 210 caption_button_container_size.width(), | 207 caption_button_container_size.width(), |
| 211 caption_button_container_size.height()); | 208 caption_button_container_size.height()); |
| 212 | 209 |
| 213 if (window_icon_) { | 210 LayoutLeftHeaderView(); |
| 214 // Vertically center the window icon with respect to the caption button | |
| 215 // container. | |
| 216 // Floor when computing the center of |caption_button_container_|. | |
| 217 int icon_offset_y = | |
| 218 caption_button_container_->height() / 2 - window_icon_size_ / 2; | |
| 219 window_icon_->SetBounds(HeaderPainterUtil::GetIconXOffset(), icon_offset_y, | |
| 220 window_icon_size_, window_icon_size_); | |
| 221 } | |
| 222 | 211 |
| 223 // The header/content separator line overlays the caption buttons. | 212 // The header/content separator line overlays the caption buttons. |
| 224 SetHeaderHeightForPainting(caption_button_container_->height()); | 213 SetHeaderHeightForPainting(caption_button_container_->height()); |
| 225 } | 214 } |
| 226 | 215 |
| 227 int DefaultHeaderPainter::GetHeaderHeightForPainting() const { | 216 int DefaultHeaderPainter::GetHeaderHeightForPainting() const { |
| 228 return height_; | 217 return height_; |
| 229 } | 218 } |
| 230 | 219 |
| 231 void DefaultHeaderPainter::SetHeaderHeightForPainting(int height) { | 220 void DefaultHeaderPainter::SetHeaderHeightForPainting(int height) { |
| 232 height_ = height; | 221 height_ = height; |
| 233 } | 222 } |
| 234 | 223 |
| 235 void DefaultHeaderPainter::SchedulePaintForTitle() { | 224 void DefaultHeaderPainter::SchedulePaintForTitle() { |
| 236 view_->SchedulePaintInRect(GetTitleBounds()); | 225 view_->SchedulePaintInRect(GetTitleBounds()); |
| 237 } | 226 } |
| 238 | 227 |
| 239 void DefaultHeaderPainter::UpdateWindowIcon(views::View* window_icon, | 228 void DefaultHeaderPainter::UpdateLeftViewXInset(int left_view_x_inset) { |
| 240 int window_icon_size) { | 229 int old_inset = left_view_x_inset_; |
| 241 window_icon_ = window_icon; | 230 left_view_x_inset_ = left_view_x_inset; |
| 242 window_icon_size_ = window_icon_size; | 231 if (old_inset != left_view_x_inset_) |
| 232 LayoutLeftHeaderView(); | |
|
pkotwicz
2014/08/19 00:17:07
Nit - This is slightly shorter:
if (left_view_x_i
benwells
2014/08/19 01:42:42
Done.
| |
| 233 } | |
| 234 | |
| 235 void DefaultHeaderPainter::UpdateLeftHeaderView(views::View* left_header_view) { | |
| 236 left_header_view_ = left_header_view; | |
| 243 } | 237 } |
| 244 | 238 |
| 245 /////////////////////////////////////////////////////////////////////////////// | 239 /////////////////////////////////////////////////////////////////////////////// |
| 246 // gfx::AnimationDelegate overrides: | 240 // gfx::AnimationDelegate overrides: |
| 247 | 241 |
| 248 void DefaultHeaderPainter::AnimationProgressed( | 242 void DefaultHeaderPainter::AnimationProgressed( |
| 249 const gfx::Animation* animation) { | 243 const gfx::Animation* animation) { |
| 250 view_->SchedulePaintInRect(GetLocalBounds()); | 244 view_->SchedulePaintInRect(GetLocalBounds()); |
| 251 } | 245 } |
| 252 | 246 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 306 SkPaint paint; | 300 SkPaint paint; |
| 307 paint.setColor(color); | 301 paint.setColor(color); |
| 308 // Draw the line as 1px thick regardless of scale factor. | 302 // Draw the line as 1px thick regardless of scale factor. |
| 309 paint.setStrokeWidth(0); | 303 paint.setStrokeWidth(0); |
| 310 | 304 |
| 311 float thickness = 1 / canvas->image_scale(); | 305 float thickness = 1 / canvas->image_scale(); |
| 312 SkScalar y = SkIntToScalar(height_) - SkFloatToScalar(thickness); | 306 SkScalar y = SkIntToScalar(height_) - SkFloatToScalar(thickness); |
| 313 canvas->sk_canvas()->drawLine(0, y, SkIntToScalar(view_->width()), y, paint); | 307 canvas->sk_canvas()->drawLine(0, y, SkIntToScalar(view_->width()), y, paint); |
| 314 } | 308 } |
| 315 | 309 |
| 310 void DefaultHeaderPainter::LayoutLeftHeaderView() { | |
| 311 if (left_header_view_) { | |
| 312 // Vertically center the left header view with respect to the caption button | |
| 313 // container. | |
| 314 // Floor when computing the center of |caption_button_container_|. | |
| 315 int icon_offset_y = caption_button_container_->height() / 2 - | |
| 316 left_header_view_->height() / 2; | |
|
pkotwicz
2014/08/19 00:17:07
Shouldn't this be size.height() instead of left_he
benwells
2014/08/19 01:42:42
Done.
| |
| 317 gfx::Size size = left_header_view_->GetPreferredSize(); | |
| 318 left_header_view_->SetBounds( | |
| 319 left_view_x_inset_, icon_offset_y, size.width(), size.height()); | |
| 320 } | |
| 321 } | |
| 322 | |
| 316 gfx::Rect DefaultHeaderPainter::GetLocalBounds() const { | 323 gfx::Rect DefaultHeaderPainter::GetLocalBounds() const { |
| 317 return gfx::Rect(view_->width(), height_); | 324 return gfx::Rect(view_->width(), height_); |
| 318 } | 325 } |
| 319 | 326 |
| 320 gfx::Rect DefaultHeaderPainter::GetTitleBounds() const { | 327 gfx::Rect DefaultHeaderPainter::GetTitleBounds() const { |
| 321 return HeaderPainterUtil::GetTitleBounds( | 328 return HeaderPainterUtil::GetTitleBounds( |
| 322 window_icon_, caption_button_container_, GetTitleFontList()); | 329 left_header_view_, caption_button_container_, GetTitleFontList()); |
| 323 } | 330 } |
| 324 | 331 |
| 325 gfx::ImageSkia* DefaultHeaderPainter::GetActiveFrameImage() const { | 332 gfx::ImageSkia* DefaultHeaderPainter::GetActiveFrameImage() const { |
| 326 return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 333 return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 327 IDR_AURA_WINDOW_HEADER_BASE); | 334 IDR_AURA_WINDOW_HEADER_BASE); |
| 328 } | 335 } |
| 329 | 336 |
| 330 gfx::ImageSkia* DefaultHeaderPainter::GetInactiveFrameImage() const { | 337 gfx::ImageSkia* DefaultHeaderPainter::GetInactiveFrameImage() const { |
| 331 int frame_image_id = (frame_->IsMaximized() || frame_->IsFullscreen()) ? | 338 int frame_image_id = (frame_->IsMaximized() || frame_->IsFullscreen()) ? |
| 332 IDR_AURA_WINDOW_HEADER_BASE : | 339 IDR_AURA_WINDOW_HEADER_BASE : |
| 333 IDR_AURA_WINDOW_HEADER_BASE_RESTORED_INACTIVE; | 340 IDR_AURA_WINDOW_HEADER_BASE_RESTORED_INACTIVE; |
| 334 return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( | 341 return ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( |
| 335 frame_image_id); | 342 frame_image_id); |
| 336 } | 343 } |
| 337 | 344 |
| 338 } // namespace ash | 345 } // namespace ash |
| OLD | NEW |