Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(441)

Side by Side Diff: chrome/browser/ui/views/constrained_window_views.cc

Issue 8772060: Refactor window frame painting into a window background class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: final cleanup of PaintRestored Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/browser_non_client_frame_view_aura.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/views/constrained_window_views.h" 5 #include "chrome/browser/ui/views/constrained_window_views.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/app/chrome_command_ids.h" 10 #include "chrome/app/chrome_command_ids.h"
(...skipping 18 matching lines...) Expand all
29 #include "ui/base/resource/resource_bundle.h" 29 #include "ui/base/resource/resource_bundle.h"
30 #include "ui/gfx/canvas.h" 30 #include "ui/gfx/canvas.h"
31 #include "ui/gfx/font.h" 31 #include "ui/gfx/font.h"
32 #include "ui/gfx/path.h" 32 #include "ui/gfx/path.h"
33 #include "ui/gfx/rect.h" 33 #include "ui/gfx/rect.h"
34 #include "ui/views/controls/button/image_button.h" 34 #include "ui/views/controls/button/image_button.h"
35 #include "ui/views/focus/focus_manager.h" 35 #include "ui/views/focus/focus_manager.h"
36 #include "ui/views/views_delegate.h" 36 #include "ui/views/views_delegate.h"
37 #include "ui/views/widget/widget.h" 37 #include "ui/views/widget/widget.h"
38 #include "ui/views/window/client_view.h" 38 #include "ui/views/window/client_view.h"
39 #include "ui/views/window/frame_background.h"
39 #include "ui/views/window/non_client_view.h" 40 #include "ui/views/window/non_client_view.h"
40 #include "ui/views/window/window_resources.h" 41 #include "ui/views/window/window_resources.h"
41 #include "ui/views/window/window_shape.h" 42 #include "ui/views/window/window_shape.h"
42 43
43 #if defined(OS_WIN) && !defined(USE_AURA) 44 #if defined(OS_WIN) && !defined(USE_AURA)
44 #include "ui/views/widget/native_widget_win.h" 45 #include "ui/views/widget/native_widget_win.h"
45 #endif 46 #endif
46 47
47 using base::TimeDelta; 48 using base::TimeDelta;
48 49
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 223
223 scoped_ptr<views::WindowResources> resources_; 224 scoped_ptr<views::WindowResources> resources_;
224 225
225 gfx::Rect title_bounds_; 226 gfx::Rect title_bounds_;
226 227
227 views::ImageButton* close_button_; 228 views::ImageButton* close_button_;
228 229
229 // The bounds of the ClientView. 230 // The bounds of the ClientView.
230 gfx::Rect client_view_bounds_; 231 gfx::Rect client_view_bounds_;
231 232
233 // Background painter for the frame.
234 scoped_ptr<views::FrameBackground> frame_background_;
235
232 static void InitClass(); 236 static void InitClass();
233 237
234 // The font to be used to render the titlebar text. 238 // The font to be used to render the titlebar text.
235 static const gfx::Font* title_font_; 239 static const gfx::Font* title_font_;
236 240
237 DISALLOW_COPY_AND_ASSIGN(ConstrainedWindowFrameView); 241 DISALLOW_COPY_AND_ASSIGN(ConstrainedWindowFrameView);
238 }; 242 };
239 243
240 const gfx::Font* ConstrainedWindowFrameView::title_font_ = NULL; 244 const gfx::Font* ConstrainedWindowFrameView::title_font_ = NULL;
241 245
(...skipping 22 matching lines...) Expand all
264 const SkColor kContentsBorderShadow = SkColorSetARGB(51, 0, 0, 0); 268 const SkColor kContentsBorderShadow = SkColorSetARGB(51, 0, 0, 0);
265 } 269 }
266 270
267 //////////////////////////////////////////////////////////////////////////////// 271 ////////////////////////////////////////////////////////////////////////////////
268 // ConstrainedWindowFrameView, public: 272 // ConstrainedWindowFrameView, public:
269 273
270 ConstrainedWindowFrameView::ConstrainedWindowFrameView( 274 ConstrainedWindowFrameView::ConstrainedWindowFrameView(
271 ConstrainedWindowViews* container) 275 ConstrainedWindowViews* container)
272 : NonClientFrameView(), 276 : NonClientFrameView(),
273 container_(container), 277 container_(container),
274 close_button_(new views::ImageButton(this)) { 278 close_button_(new views::ImageButton(this)),
279 frame_background_(new views::FrameBackground()) {
275 InitClass(); 280 InitClass();
276 InitWindowResources(); 281 InitWindowResources();
277 282
278 // Constrained windows always use the custom frame - they just have a 283 // Constrained windows always use the custom frame - they just have a
279 // different set of bitmaps. 284 // different set of bitmaps.
280 container->set_frame_type(views::Widget::FRAME_TYPE_FORCE_CUSTOM); 285 container->set_frame_type(views::Widget::FRAME_TYPE_FORCE_CUSTOM);
281 286
282 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 287 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
283 close_button_->SetImage(views::CustomButton::BS_NORMAL, 288 close_button_->SetImage(views::CustomButton::BS_NORMAL,
284 rb.GetBitmapNamed(IDR_CLOSE_SA)); 289 rb.GetBitmapNamed(IDR_CLOSE_SA));
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 // button, we vertically center it. We want to bias rounding to put extra 423 // button, we vertically center it. We want to bias rounding to put extra
419 // space above the icon, since the 3D edge + client edge below looks (to the 424 // space above the icon, since the 3D edge + client edge below looks (to the
420 // eye) more like additional space than does the 3D edge above; hence the +1. 425 // eye) more like additional space than does the 3D edge above; hence the +1.
421 int y = unavailable_px_at_top + (NonClientTopBorderHeight() - 426 int y = unavailable_px_at_top + (NonClientTopBorderHeight() -
422 unavailable_px_at_top - size - TitlebarBottomThickness() + 1) / 2; 427 unavailable_px_at_top - size - TitlebarBottomThickness() + 1) / 2;
423 return gfx::Rect(kFrameBorderThickness + kTitleLeftSpacing, y, size, size); 428 return gfx::Rect(kFrameBorderThickness + kTitleLeftSpacing, y, size, size);
424 } 429 }
425 430
426 void ConstrainedWindowFrameView::PaintFrameBorder(gfx::Canvas* canvas) { 431 void ConstrainedWindowFrameView::PaintFrameBorder(gfx::Canvas* canvas) {
427 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 432 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
433 frame_background_->set_frame_color(ResourceBundle::frame_color);
434 SkBitmap* theme_frame = rb.GetBitmapNamed(IDR_THEME_FRAME);
435 frame_background_->set_theme_bitmap(theme_frame);
436 frame_background_->set_theme_overlay_bitmap(NULL);
437 frame_background_->set_top_area_height(theme_frame->height());
438
428 #if defined(USE_AURA) 439 #if defined(USE_AURA)
429 // TODO(jamescook): Remove this when Aura defaults to its own window frame, 440 // TODO(jamescook): Remove this when Aura defaults to its own window frame,
430 // BrowserNonClientFrameViewAura. Until then, use custom square corners to 441 // BrowserNonClientFrameViewAura. Until then, use custom square corners to
431 // avoid performance penalties associated with transparent layers. 442 // avoid performance penalties associated with transparent layers.
432 SkBitmap* top_left_corner = rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT); 443 frame_background_->SetCornerImages(
433 SkBitmap* top_right_corner = rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT); 444 rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT),
434 SkBitmap* bottom_left_corner = 445 rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT),
435 rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT); 446 rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT),
436 SkBitmap* bottom_right_corner = 447 rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT));
437 rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT); 448 frame_background_->SetSideImages(
438 SkBitmap* top_edge = rb.GetBitmapNamed(IDR_WINDOW_TOP_CENTER); 449 rb.GetBitmapNamed(IDR_WINDOW_LEFT_SIDE),
439 SkBitmap* right_edge = rb.GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE); 450 rb.GetBitmapNamed(IDR_WINDOW_TOP_CENTER),
440 SkBitmap* left_edge = rb.GetBitmapNamed(IDR_WINDOW_LEFT_SIDE); 451 rb.GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE),
441 SkBitmap* bottom_edge = rb.GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER); 452 rb.GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER));
442 #else 453 #else
443 SkBitmap* top_left_corner = resources_->GetPartBitmap(FRAME_TOP_LEFT_CORNER); 454 frame_background_->SetCornerImages(
444 SkBitmap* top_right_corner = 455 resources_->GetPartBitmap(FRAME_TOP_LEFT_CORNER),
445 resources_->GetPartBitmap(FRAME_TOP_RIGHT_CORNER); 456 resources_->GetPartBitmap(FRAME_TOP_RIGHT_CORNER),
446 SkBitmap* bottom_left_corner = 457 resources_->GetPartBitmap(FRAME_BOTTOM_LEFT_CORNER),
447 resources_->GetPartBitmap(FRAME_BOTTOM_LEFT_CORNER); 458 resources_->GetPartBitmap(FRAME_BOTTOM_RIGHT_CORNER));
448 SkBitmap* bottom_right_corner = 459 frame_background_->SetSideImages(
449 resources_->GetPartBitmap(FRAME_BOTTOM_RIGHT_CORNER); 460 resources_->GetPartBitmap(FRAME_LEFT_EDGE),
450 SkBitmap* top_edge = resources_->GetPartBitmap(FRAME_TOP_EDGE); 461 resources_->GetPartBitmap(FRAME_TOP_EDGE),
451 SkBitmap* right_edge = resources_->GetPartBitmap(FRAME_RIGHT_EDGE); 462 resources_->GetPartBitmap(FRAME_RIGHT_EDGE),
452 SkBitmap* left_edge = resources_->GetPartBitmap(FRAME_LEFT_EDGE); 463 resources_->GetPartBitmap(FRAME_BOTTOM_EDGE));
453 SkBitmap* bottom_edge = resources_->GetPartBitmap(FRAME_BOTTOM_EDGE);
454 #endif 464 #endif
455 465
456 SkBitmap* theme_frame = rb.GetBitmapNamed(IDR_THEME_FRAME); 466 frame_background_->PaintRestored(canvas, this);
457 SkColor frame_color = ResourceBundle::frame_color;
458
459 // Fill with the frame color first so we have a constant background for
460 // areas not covered by the theme image.
461 canvas->FillRect(frame_color,
462 gfx::Rect(0, 0, width(), theme_frame->height()));
463
464 int remaining_height = height() - theme_frame->height();
465 if (remaining_height > 0) {
466 // Now fill down the sides.
467 canvas->FillRect(frame_color, gfx::Rect(0, theme_frame->height(),
468 left_edge->width(),
469 remaining_height));
470 canvas->FillRect(frame_color, gfx::Rect(width() - right_edge->width(),
471 theme_frame->height(),
472 right_edge->width(),
473 remaining_height));
474 int center_width = width() - left_edge->width() - right_edge->width();
475 if (center_width > 0) {
476 // Now fill the bottom area.
477 canvas->FillRect(frame_color,
478 gfx::Rect(left_edge->width(),
479 height() - bottom_edge->height(),
480 center_width, bottom_edge->height()));
481 }
482 }
483
484 // Draw the theme frame.
485 canvas->TileImageInt(*theme_frame, 0, 0, width(), theme_frame->height());
486
487 // Top.
488 canvas->DrawBitmapInt(*top_left_corner, 0, 0);
489 canvas->TileImageInt(*top_edge, top_left_corner->width(), 0,
490 width() - top_right_corner->width(), top_edge->height());
491 canvas->DrawBitmapInt(*top_right_corner,
492 width() - top_right_corner->width(), 0);
493
494 // Right.
495 canvas->TileImageInt(*right_edge, width() - right_edge->width(),
496 top_right_corner->height(), right_edge->width(),
497 height() - top_right_corner->height() - bottom_right_corner->height());
498
499 // Bottom.
500 canvas->DrawBitmapInt(*bottom_right_corner,
501 width() - bottom_right_corner->width(),
502 height() - bottom_right_corner->height());
503 canvas->TileImageInt(*bottom_edge, bottom_left_corner->width(),
504 height() - bottom_edge->height(),
505 width() - bottom_left_corner->width() - bottom_right_corner->width(),
506 bottom_edge->height());
507 canvas->DrawBitmapInt(*bottom_left_corner, 0,
508 height() - bottom_left_corner->height());
509
510 // Left.
511 canvas->TileImageInt(*left_edge, 0, top_left_corner->height(),
512 left_edge->width(),
513 height() - top_left_corner->height() - bottom_left_corner->height());
514 } 467 }
515 468
516 void ConstrainedWindowFrameView::PaintTitleBar(gfx::Canvas* canvas) { 469 void ConstrainedWindowFrameView::PaintTitleBar(gfx::Canvas* canvas) {
517 canvas->DrawStringInt( 470 canvas->DrawStringInt(
518 container_->widget_delegate()->GetWindowTitle(), 471 container_->widget_delegate()->GetWindowTitle(),
519 *title_font_, GetTitleColor(), GetMirroredXForRect(title_bounds_), 472 *title_font_, GetTitleColor(), GetMirroredXForRect(title_bounds_),
520 title_bounds_.y(), title_bounds_.width(), title_bounds_.height()); 473 title_bounds_.y(), title_bounds_.width(), title_bounds_.height());
521 } 474 }
522 475
523 void ConstrainedWindowFrameView::PaintClientEdge(gfx::Canvas* canvas) { 476 void ConstrainedWindowFrameView::PaintClientEdge(gfx::Canvas* canvas) {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 } 612 }
660 613
661 void ConstrainedWindowViews::OnNativeConstrainedWindowMouseActivate() { 614 void ConstrainedWindowViews::OnNativeConstrainedWindowMouseActivate() {
662 Activate(); 615 Activate();
663 } 616 }
664 617
665 views::internal::NativeWidgetDelegate* 618 views::internal::NativeWidgetDelegate*
666 ConstrainedWindowViews::AsNativeWidgetDelegate() { 619 ConstrainedWindowViews::AsNativeWidgetDelegate() {
667 return this; 620 return this;
668 } 621 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/views/frame/browser_non_client_frame_view_aura.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698