OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/header_painter.h" | 5 #include "ash/frame/header_painter.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" | 9 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" |
10 #include "base/logging.h" // DCHECK | 10 #include "base/logging.h" // DCHECK |
(...skipping 21 matching lines...) Expand all Loading... | |
32 // Space between left edge of window and popup window icon. | 32 // Space between left edge of window and popup window icon. |
33 const int kIconOffsetX = 9; | 33 const int kIconOffsetX = 9; |
34 // Height and width of window icon. | 34 // Height and width of window icon. |
35 const int kIconSize = 16; | 35 const int kIconSize = 16; |
36 // Space between the title text and the caption buttons. | 36 // Space between the title text and the caption buttons. |
37 const int kTitleLogoSpacing = 5; | 37 const int kTitleLogoSpacing = 5; |
38 // Space between window icon and title text. | 38 // Space between window icon and title text. |
39 const int kTitleIconOffsetX = 5; | 39 const int kTitleIconOffsetX = 5; |
40 // Space between window edge and title text, when there is no icon. | 40 // Space between window edge and title text, when there is no icon. |
41 const int kTitleNoIconOffsetX = 8; | 41 const int kTitleNoIconOffsetX = 8; |
42 // Color for the non-maximized window title text. | 42 // Color for the non-browser window title text. |
43 const SkColor kNonMaximizedWindowTitleTextColor = SkColorSetRGB(40, 40, 40); | 43 const SkColor kWindowTitleTextColor = SkColorSetRGB(40, 40, 40); |
44 // Color for the maximized window title text. | 44 // Color for the non-maximized browser window title text. |
45 const SkColor kMaximizedWindowTitleTextColor = SK_ColorWHITE; | 45 const SkColor kNonMaximizedBrowserWindowTitleTextColor = |
James Cook
2014/03/14 00:02:22
Would this be clearer as kRestoredBrowserWindowTit
pkotwicz
2014/03/14 14:48:45
Done.
| |
46 SkColorSetRGB(40, 40, 40); | |
47 // Color for the maximized browser window title text. | |
48 const SkColor kMaximizedBrowserWindowTitleTextColor = SK_ColorWHITE; | |
46 // Size of header/content separator line below the header image for non-browser | 49 // Size of header/content separator line below the header image for non-browser |
47 // windows. | 50 // windows. |
48 const int kHeaderContentSeparatorSize = 1; | 51 const int kHeaderContentSeparatorSize = 1; |
49 // Color of the active window header/content separator line for non-browser | 52 // Color of the active window header/content separator line for non-browser |
50 // windows. | 53 // windows. |
51 const SkColor kHeaderContentSeparatorColor = SkColorSetRGB(180, 180, 182); | 54 const SkColor kHeaderContentSeparatorColor = SkColorSetRGB(180, 180, 182); |
52 // Color of the inactive window header/content separator line for non-browser | 55 // Color of the inactive window header/content separator line for non-browser |
53 // windows. | 56 // windows. |
54 const SkColor kHeaderContentSeparatorInactiveColor = | 57 const SkColor kHeaderContentSeparatorInactiveColor = |
55 SkColorSetRGB(150, 150, 152); | 58 SkColorSetRGB(150, 150, 152); |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 theme_frame, | 304 theme_frame, |
302 theme_frame_overlay, | 305 theme_frame_overlay, |
303 paint, | 306 paint, |
304 GetHeaderLocalBounds(), | 307 GetHeaderLocalBounds(), |
305 corner_radius, | 308 corner_radius, |
306 GetThemeBackgroundXInset()); | 309 GetThemeBackgroundXInset()); |
307 | 310 |
308 previous_theme_frame_id_ = theme_frame_id; | 311 previous_theme_frame_id_ = theme_frame_id; |
309 previous_theme_frame_overlay_id_ = theme_frame_overlay_id; | 312 previous_theme_frame_overlay_id_ = theme_frame_overlay_id; |
310 | 313 |
311 PaintBorder(canvas, mode); | 314 if (!frame_->IsMaximized() && !frame_->IsFullscreen()) { |
James Cook
2014/03/14 00:02:22
optional nit: Maybe early return to emphasize that
pkotwicz
2014/03/14 14:48:45
Keeping it this way makes the diff for the followu
| |
315 if (style_ == STYLE_BROWSER) { | |
316 PaintHighlightForRestoredBrowserWindow(canvas); | |
317 } else { | |
318 if (mode == MODE_INACTIVE) | |
319 PaintHighlightForInactiveRestoredWindow(canvas); | |
320 } | |
321 } | |
312 } | 322 } |
313 | 323 |
314 void HeaderPainter::PaintHeaderContentSeparator(gfx::Canvas* canvas, | 324 void HeaderPainter::PaintHeaderContentSeparator(gfx::Canvas* canvas, |
315 Mode mode) { | 325 Mode mode) { |
316 DCHECK_EQ(style_, STYLE_OTHER); | 326 DCHECK_EQ(style_, STYLE_OTHER); |
317 SkColor color = (mode == MODE_ACTIVE) ? | 327 SkColor color = (mode == MODE_ACTIVE) ? |
318 kHeaderContentSeparatorColor : | 328 kHeaderContentSeparatorColor : |
319 kHeaderContentSeparatorInactiveColor; | 329 kHeaderContentSeparatorInactiveColor; |
320 | 330 |
321 canvas->FillRect(gfx::Rect(0, | 331 canvas->FillRect(gfx::Rect(0, |
322 header_height_ - kHeaderContentSeparatorSize, | 332 header_height_ - kHeaderContentSeparatorSize, |
323 header_view_->width(), | 333 header_view_->width(), |
324 kHeaderContentSeparatorSize), | 334 kHeaderContentSeparatorSize), |
325 color); | 335 color); |
326 } | 336 } |
327 | 337 |
328 int HeaderPainter::HeaderContentSeparatorSize() const { | 338 int HeaderPainter::HeaderContentSeparatorSize() const { |
329 return kHeaderContentSeparatorSize; | 339 return kHeaderContentSeparatorSize; |
330 } | 340 } |
331 | 341 |
332 void HeaderPainter::PaintTitleBar(gfx::Canvas* canvas, | 342 void HeaderPainter::PaintTitleBar(gfx::Canvas* canvas, |
333 const gfx::FontList& title_font_list) { | 343 const gfx::FontList& title_font_list) { |
334 // The window icon is painted by its own views::View. | 344 // The window icon is painted by its own views::View. |
335 views::WidgetDelegate* delegate = frame_->widget_delegate(); | 345 views::WidgetDelegate* delegate = frame_->widget_delegate(); |
336 if (delegate && delegate->ShouldShowWindowTitle()) { | 346 if (delegate && delegate->ShouldShowWindowTitle()) { |
337 gfx::Rect title_bounds = GetTitleBounds(title_font_list); | 347 gfx::Rect title_bounds = GetTitleBounds(title_font_list); |
338 title_bounds.set_x(header_view_->GetMirroredXForRect(title_bounds)); | 348 title_bounds.set_x(header_view_->GetMirroredXForRect(title_bounds)); |
339 SkColor title_color = (frame_->IsMaximized() || frame_->IsFullscreen()) ? | 349 SkColor title_color = kWindowTitleTextColor; |
340 kMaximizedWindowTitleTextColor : kNonMaximizedWindowTitleTextColor; | 350 if (style_ == STYLE_BROWSER) { |
351 title_color = (frame_->IsMaximized() || frame_->IsFullscreen()) ? | |
352 kMaximizedBrowserWindowTitleTextColor : | |
353 kNonMaximizedBrowserWindowTitleTextColor; | |
354 } | |
341 canvas->DrawStringRectWithFlags(delegate->GetWindowTitle(), | 355 canvas->DrawStringRectWithFlags(delegate->GetWindowTitle(), |
342 title_font_list, | 356 title_font_list, |
343 title_color, | 357 title_color, |
344 title_bounds, | 358 title_bounds, |
345 gfx::Canvas::NO_SUBPIXEL_RENDERING); | 359 gfx::Canvas::NO_SUBPIXEL_RENDERING); |
346 } | 360 } |
347 } | 361 } |
348 | 362 |
349 void HeaderPainter::LayoutHeader() { | 363 void HeaderPainter::LayoutHeader() { |
350 // Purposefully set |header_height_| to an invalid value. We cannot use | 364 // Purposefully set |header_height_| to an invalid value. We cannot use |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
395 /////////////////////////////////////////////////////////////////////////////// | 409 /////////////////////////////////////////////////////////////////////////////// |
396 // gfx::AnimationDelegate overrides: | 410 // gfx::AnimationDelegate overrides: |
397 | 411 |
398 void HeaderPainter::AnimationProgressed(const gfx::Animation* animation) { | 412 void HeaderPainter::AnimationProgressed(const gfx::Animation* animation) { |
399 header_view_->SchedulePaintInRect(GetHeaderLocalBounds()); | 413 header_view_->SchedulePaintInRect(GetHeaderLocalBounds()); |
400 } | 414 } |
401 | 415 |
402 /////////////////////////////////////////////////////////////////////////////// | 416 /////////////////////////////////////////////////////////////////////////////// |
403 // HeaderPainter, private: | 417 // HeaderPainter, private: |
404 | 418 |
405 void HeaderPainter::PaintBorder(gfx::Canvas* canvas, Mode mode) { | 419 void HeaderPainter::PaintHighlightForRestoredBrowserWindow( |
406 if (frame_->IsMaximized() || | 420 gfx::Canvas* canvas) { |
407 frame_->IsFullscreen() || | |
408 (style_ == STYLE_OTHER && mode == MODE_ACTIVE)) { | |
409 return; | |
410 } | |
411 | |
412 gfx::ImageSkia top_left_corner; | |
413 gfx::ImageSkia top_right_corner; | |
414 gfx::ImageSkia top_edge; | |
415 gfx::ImageSkia left_edge; | |
416 gfx::ImageSkia right_edge; | |
417 gfx::ImageSkia bottom_edge; | |
418 | |
419 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 421 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
420 if (style_ == STYLE_BROWSER) { | 422 gfx::ImageSkia top_left_corner = *rb.GetImageSkiaNamed( |
421 top_left_corner = *rb.GetImageSkiaNamed( | 423 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_LEFT); |
422 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_LEFT); | 424 gfx::ImageSkia top_right_corner = *rb.GetImageSkiaNamed( |
423 top_right_corner = *rb.GetImageSkiaNamed( | 425 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_RIGHT); |
424 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP_RIGHT); | 426 gfx::ImageSkia top_edge = *rb.GetImageSkiaNamed( |
425 top_edge = *rb.GetImageSkiaNamed(IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP); | 427 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_TOP); |
426 left_edge = *rb.GetImageSkiaNamed( | 428 gfx::ImageSkia left_edge = *rb.GetImageSkiaNamed( |
427 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_LEFT); | 429 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_LEFT); |
428 right_edge = *rb.GetImageSkiaNamed( | 430 gfx::ImageSkia right_edge = *rb.GetImageSkiaNamed( |
429 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_RIGHT); | 431 IDR_AURA_BROWSER_WINDOW_HEADER_SHADE_RIGHT); |
430 } else { | |
431 top_edge = *rb.GetImageSkiaNamed( | |
432 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_TOP); | |
433 left_edge = *rb.GetImageSkiaNamed( | |
434 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_LEFT); | |
435 right_edge = *rb.GetImageSkiaNamed( | |
436 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_RIGHT); | |
437 bottom_edge = *rb.GetImageSkiaNamed( | |
438 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_BOTTOM); | |
439 } | |
440 | |
441 DCHECK(!top_edge.isNull()); | |
442 DCHECK(!left_edge.isNull()); | |
443 DCHECK(!right_edge.isNull()); | |
444 | 432 |
445 int top_left_width = top_left_corner.width(); | 433 int top_left_width = top_left_corner.width(); |
446 int top_left_height = top_left_corner.height(); | 434 int top_left_height = top_left_corner.height(); |
447 if (!top_left_corner.isNull()) { | 435 canvas->DrawImageInt(top_left_corner, 0, 0); |
448 canvas->DrawImageInt(top_left_corner, 0, 0); | |
449 } | |
450 | 436 |
437 int top_right_width = top_right_corner.width(); | |
451 int top_right_height = top_right_corner.height(); | 438 int top_right_height = top_right_corner.height(); |
452 if (!top_right_corner.isNull()) { | 439 canvas->DrawImageInt(top_right_corner, |
453 canvas->DrawImageInt(top_right_corner, | 440 header_view_->width() - top_right_width, |
454 header_view_->width() - top_right_corner.width(), | 441 0); |
455 top_right_height); | |
pkotwicz
2014/03/13 23:20:49
The y coordinate should be 0
| |
456 } | |
457 | 442 |
458 canvas->TileImageInt(top_edge, | 443 canvas->TileImageInt( |
444 top_edge, | |
459 top_left_width, | 445 top_left_width, |
460 0, | 446 0, |
461 header_view_->width() - top_left_width - top_right_corner.width(), | 447 header_view_->width() - top_left_width - top_right_width, |
462 top_edge.height()); | 448 top_edge.height()); |
463 | 449 |
464 // TODO(pkotwicz): Compute |bottom| more accurately. The computation is | 450 canvas->TileImageInt(left_edge, |
465 // inaccurate for browser windows. | 451 0, |
466 int bottom = header_height_ - kHeaderContentSeparatorSize; | 452 top_left_height, |
467 int bottom_height = bottom_edge.height(); | 453 left_edge.width(), |
468 if (!bottom_edge.isNull()) { | 454 header_height_ - top_left_height); |
469 canvas->TileImageInt(bottom_edge, | |
470 0, bottom - bottom_height, | |
471 header_view_->width(), bottom_height); | |
472 } | |
473 | 455 |
474 int left_edge_height = bottom - bottom_height - top_left_height; | |
475 canvas->TileImageInt(left_edge, | |
476 0, top_left_height, | |
477 left_edge.width(), left_edge_height); | |
478 | |
479 int right_edge_height = bottom - bottom_height - top_right_height; | |
480 canvas->TileImageInt(right_edge, | 456 canvas->TileImageInt(right_edge, |
481 header_view_->width() - right_edge.width(), | 457 header_view_->width() - right_edge.width(), |
482 top_right_height, | 458 top_right_height, |
483 right_edge.width(), | 459 right_edge.width(), |
484 right_edge_height); | 460 header_height_ - top_right_height); |
461 } | |
462 | |
463 void HeaderPainter::PaintHighlightForInactiveRestoredWindow( | |
464 gfx::Canvas* canvas) { | |
465 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | |
466 gfx::ImageSkia top_edge = *rb.GetImageSkiaNamed( | |
467 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_TOP); | |
468 gfx::ImageSkia left_edge = *rb.GetImageSkiaNamed( | |
469 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_LEFT); | |
470 gfx::ImageSkia right_edge = *rb.GetImageSkiaNamed( | |
471 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_RIGHT); | |
472 gfx::ImageSkia bottom_edge = *rb.GetImageSkiaNamed( | |
473 IDR_AURA_WINDOW_HEADER_SHADE_INACTIVE_BOTTOM); | |
474 | |
pkotwicz
2014/03/13 23:20:49
The left and right images are flush with the top h
| |
475 int left_edge_width = left_edge.width(); | |
476 int right_edge_width = right_edge.width(); | |
477 canvas->DrawImageInt(left_edge, 0, 0); | |
478 canvas->DrawImageInt(right_edge, header_view_->width() - right_edge_width, 0); | |
479 canvas->TileImageInt( | |
480 top_edge, | |
481 left_edge_width, | |
482 0, | |
483 header_view_->width() - left_edge_width - right_edge_width, | |
484 top_edge.height()); | |
485 | |
486 DCHECK_EQ(left_edge.height(), right_edge.height()); | |
487 int bottom = left_edge.height(); | |
488 int bottom_height = bottom_edge.height(); | |
489 canvas->TileImageInt( | |
490 bottom_edge, | |
491 left_edge_width, | |
492 bottom - bottom_height, | |
493 header_view_->width() - left_edge_width - right_edge_width, | |
494 bottom_height); | |
485 } | 495 } |
486 | 496 |
487 void HeaderPainter::UpdateCaptionButtonImages() { | 497 void HeaderPainter::UpdateCaptionButtonImages() { |
488 if (style_ == STYLE_BROWSER) { | 498 if (style_ == STYLE_BROWSER) { |
489 if (frame_->IsMaximized() || frame_->IsFullscreen()) { | 499 if (frame_->IsMaximized() || frame_->IsFullscreen()) { |
490 caption_button_container_->SetButtonImages( | 500 caption_button_container_->SetButtonImages( |
491 CAPTION_BUTTON_ICON_MINIMIZE, | 501 CAPTION_BUTTON_ICON_MINIMIZE, |
492 IDR_AURA_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE, | 502 IDR_AURA_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE, |
493 IDR_AURA_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE, | 503 IDR_AURA_BROWSER_WINDOW_CONTROL_ICON_MAXIMIZED_MINIMIZE, |
494 IDR_AURA_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H, | 504 IDR_AURA_BROWSER_WINDOW_CONTROL_BACKGROUND_MAXIMIZED_H, |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
616 int title_y = | 626 int title_y = |
617 GetCaptionButtonContainerCenterY() - title_font_list.GetHeight() / 2; | 627 GetCaptionButtonContainerCenterY() - title_font_list.GetHeight() / 2; |
618 return gfx::Rect( | 628 return gfx::Rect( |
619 title_x, | 629 title_x, |
620 std::max(0, title_y), | 630 std::max(0, title_y), |
621 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x), | 631 std::max(0, caption_button_container_->x() - kTitleLogoSpacing - title_x), |
622 title_font_list.GetHeight()); | 632 title_font_list.GetHeight()); |
623 } | 633 } |
624 | 634 |
625 } // namespace ash | 635 } // namespace ash |
OLD | NEW |