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 12 matching lines...) Expand all Loading... | |
| 23 #include "ui/views/widget/native_widget_aura.h" | 23 #include "ui/views/widget/native_widget_aura.h" |
| 24 #include "ui/views/widget/widget.h" | 24 #include "ui/views/widget/widget.h" |
| 25 #include "ui/views/widget/widget_delegate.h" | 25 #include "ui/views/widget/widget_delegate.h" |
| 26 | 26 |
| 27 using views::Widget; | 27 using views::Widget; |
| 28 | 28 |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 // Color for the window title text. | 31 // Color for the window title text. |
| 32 const SkColor kTitleTextColor = SkColorSetRGB(40, 40, 40); | 32 const SkColor kTitleTextColor = SkColorSetRGB(40, 40, 40); |
| 33 // Size of header/content separator line. | |
| 34 const int kHeaderContentSeparatorSize = 1; | |
| 35 // Color of the active window header/content separator line. | 33 // Color of the active window header/content separator line. |
| 36 const SkColor kHeaderContentSeparatorColor = SkColorSetRGB(180, 180, 182); | 34 const SkColor kHeaderContentSeparatorColor = SkColorSetRGB(180, 180, 182); |
| 37 // Color of the inactive window header/content separator line. | 35 // Color of the inactive window header/content separator line. |
| 38 const SkColor kHeaderContentSeparatorInactiveColor = | 36 const SkColor kHeaderContentSeparatorInactiveColor = |
| 39 SkColorSetRGB(150, 150, 152); | 37 SkColorSetRGB(150, 150, 152); |
| 40 // Duration of crossfade animation for activating and deactivating frame. | 38 // Duration of crossfade animation for activating and deactivating frame. |
| 41 const int kActivationCrossfadeDurationMs = 200; | 39 const int kActivationCrossfadeDurationMs = 200; |
| 42 | 40 |
| 43 // Tiles an image into an area, rounding the top corners. | 41 // Tiles an image into an area, rounding the top corners. |
| 44 void TileRoundRect(gfx::Canvas* canvas, | 42 void TileRoundRect(gfx::Canvas* canvas, |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 211 caption_button_container_->SetBounds( | 209 caption_button_container_->SetBounds( |
| 212 view_->width() - caption_button_container_size.width(), | 210 view_->width() - caption_button_container_size.width(), |
| 213 0, | 211 0, |
| 214 caption_button_container_size.width(), | 212 caption_button_container_size.width(), |
| 215 caption_button_container_size.height()); | 213 caption_button_container_size.height()); |
| 216 | 214 |
| 217 if (window_icon_) { | 215 if (window_icon_) { |
| 218 // Vertically center the window icon with respect to the caption button | 216 // Vertically center the window icon with respect to the caption button |
| 219 // container. | 217 // container. |
| 220 int icon_size = HeaderPainterUtil::GetIconSize(); | 218 int icon_size = HeaderPainterUtil::GetIconSize(); |
| 221 int icon_offset_y = (caption_button_container_->height() - icon_size) / 2; | 219 // Floor when computing the center of |caption_button_container|. |
| 220 int icon_offset_y = caption_button_container_->height() / 2 - icon_size / 2; | |
| 222 window_icon_->SetBounds(HeaderPainterUtil::GetIconXOffset(), icon_offset_y, | 221 window_icon_->SetBounds(HeaderPainterUtil::GetIconXOffset(), icon_offset_y, |
| 223 icon_size, icon_size); | 222 icon_size, icon_size); |
| 224 } | 223 } |
| 225 | 224 |
| 226 SetHeaderHeightForPainting(caption_button_container_->height() + | 225 // The header/content separator line overlays the caption buttons. |
| 227 kHeaderContentSeparatorSize); | 226 SetHeaderHeightForPainting(caption_button_container_->height()); |
| 228 } | 227 } |
| 229 | 228 |
| 230 int DefaultHeaderPainter::GetHeaderHeightForPainting() const { | 229 int DefaultHeaderPainter::GetHeaderHeightForPainting() const { |
| 231 return height_; | 230 return height_; |
| 232 } | 231 } |
| 233 | 232 |
| 234 void DefaultHeaderPainter::SetHeaderHeightForPainting(int height) { | 233 void DefaultHeaderPainter::SetHeaderHeightForPainting(int height) { |
| 235 height_ = height; | 234 height_ = height; |
| 236 } | 235 } |
| 237 | 236 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 293 kTitleTextColor, | 292 kTitleTextColor, |
| 294 title_bounds, | 293 title_bounds, |
| 295 gfx::Canvas::NO_SUBPIXEL_RENDERING); | 294 gfx::Canvas::NO_SUBPIXEL_RENDERING); |
| 296 } | 295 } |
| 297 | 296 |
| 298 void DefaultHeaderPainter::PaintHeaderContentSeparator(gfx::Canvas* canvas) { | 297 void DefaultHeaderPainter::PaintHeaderContentSeparator(gfx::Canvas* canvas) { |
| 299 SkColor color = (mode_ == MODE_ACTIVE) ? | 298 SkColor color = (mode_ == MODE_ACTIVE) ? |
| 300 kHeaderContentSeparatorColor : | 299 kHeaderContentSeparatorColor : |
| 301 kHeaderContentSeparatorInactiveColor; | 300 kHeaderContentSeparatorInactiveColor; |
| 302 | 301 |
| 303 canvas->FillRect(gfx::Rect(0, | 302 SkPaint paint; |
| 304 height_ - kHeaderContentSeparatorSize, | 303 paint.setColor(color); |
| 305 view_->width(), | 304 // Draw the line as 1px thick regardless of scale factor. |
|
James Cook
2014/03/17 16:55:59
Thanks for this comment. It saves the reader from
| |
| 306 kHeaderContentSeparatorSize), | 305 paint.setStrokeWidth(0); |
| 307 color); | 306 |
| 307 float thickness = 1 / canvas->image_scale(); | |
| 308 SkScalar y = SkIntToScalar(height_) - SkFloatToScalar(thickness); | |
| 309 canvas->sk_canvas()->drawLine(0, y, SkIntToScalar(view_->width()), y, paint); | |
| 308 } | 310 } |
| 309 | 311 |
| 310 gfx::Rect DefaultHeaderPainter::GetLocalBounds() const { | 312 gfx::Rect DefaultHeaderPainter::GetLocalBounds() const { |
| 311 return gfx::Rect(view_->width(), height_); | 313 return gfx::Rect(view_->width(), height_); |
| 312 } | 314 } |
| 313 | 315 |
| 314 gfx::Rect DefaultHeaderPainter::GetTitleBounds() const { | 316 gfx::Rect DefaultHeaderPainter::GetTitleBounds() const { |
| 315 return HeaderPainterUtil::GetTitleBounds( | 317 return HeaderPainterUtil::GetTitleBounds( |
| 316 window_icon_, caption_button_container_, GetTitleFontList()); | 318 window_icon_, caption_button_container_, GetTitleFontList()); |
| 317 } | 319 } |
| 318 | 320 |
| 319 } // namespace ash | 321 } // namespace ash |
| OLD | NEW |