Index: chrome/browser/ui/views/constrained_window_views.cc |
diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc |
index c8644529f097dfbeb2136f71330bd457abc8a5f0..0c6fe6f1f14387f2feac5c769bcf3bcab05367a5 100644 |
--- a/chrome/browser/ui/views/constrained_window_views.cc |
+++ b/chrome/browser/ui/views/constrained_window_views.cc |
@@ -36,6 +36,7 @@ |
#include "ui/views/views_delegate.h" |
#include "ui/views/widget/widget.h" |
#include "ui/views/window/client_view.h" |
+#include "ui/views/window/frame_background.h" |
#include "ui/views/window/non_client_view.h" |
#include "ui/views/window/window_resources.h" |
#include "ui/views/window/window_shape.h" |
@@ -229,6 +230,9 @@ class ConstrainedWindowFrameView |
// The bounds of the ClientView. |
gfx::Rect client_view_bounds_; |
+ // Background painter for the frame. |
+ scoped_ptr<views::FrameBackground> frame_background_; |
+ |
static void InitClass(); |
// The font to be used to render the titlebar text. |
@@ -271,7 +275,8 @@ ConstrainedWindowFrameView::ConstrainedWindowFrameView( |
ConstrainedWindowViews* container) |
: NonClientFrameView(), |
container_(container), |
- close_button_(new views::ImageButton(this)) { |
+ close_button_(new views::ImageButton(this)), |
+ frame_background_(new views::FrameBackground()) { |
InitClass(); |
InitWindowResources(); |
@@ -425,92 +430,40 @@ gfx::Rect ConstrainedWindowFrameView::IconBounds() const { |
void ConstrainedWindowFrameView::PaintFrameBorder(gfx::Canvas* canvas) { |
ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
+ frame_background_->set_frame_color(ResourceBundle::frame_color); |
+ SkBitmap* theme_frame = rb.GetBitmapNamed(IDR_THEME_FRAME); |
+ frame_background_->set_theme_bitmap(theme_frame); |
+ frame_background_->set_theme_overlay_bitmap(NULL); |
+ frame_background_->set_top_area_height(theme_frame->height()); |
+ |
#if defined(USE_AURA) |
// TODO(jamescook): Remove this when Aura defaults to its own window frame, |
// BrowserNonClientFrameViewAura. Until then, use custom square corners to |
// avoid performance penalties associated with transparent layers. |
- SkBitmap* top_left_corner = rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT); |
- SkBitmap* top_right_corner = rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT); |
- SkBitmap* bottom_left_corner = |
- rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT); |
- SkBitmap* bottom_right_corner = |
- rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT); |
- SkBitmap* top_edge = rb.GetBitmapNamed(IDR_WINDOW_TOP_CENTER); |
- SkBitmap* right_edge = rb.GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE); |
- SkBitmap* left_edge = rb.GetBitmapNamed(IDR_WINDOW_LEFT_SIDE); |
- SkBitmap* bottom_edge = rb.GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER); |
+ frame_background_->SetCornerImages( |
+ rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_LEFT), |
+ rb.GetBitmapNamed(IDR_AURA_WINDOW_TOP_RIGHT), |
+ rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_LEFT), |
+ rb.GetBitmapNamed(IDR_AURA_WINDOW_BOTTOM_RIGHT)); |
+ frame_background_->SetSideImages( |
+ rb.GetBitmapNamed(IDR_WINDOW_LEFT_SIDE), |
+ rb.GetBitmapNamed(IDR_WINDOW_TOP_CENTER), |
+ rb.GetBitmapNamed(IDR_WINDOW_RIGHT_SIDE), |
+ rb.GetBitmapNamed(IDR_WINDOW_BOTTOM_CENTER)); |
#else |
- SkBitmap* top_left_corner = resources_->GetPartBitmap(FRAME_TOP_LEFT_CORNER); |
- SkBitmap* top_right_corner = |
- resources_->GetPartBitmap(FRAME_TOP_RIGHT_CORNER); |
- SkBitmap* bottom_left_corner = |
- resources_->GetPartBitmap(FRAME_BOTTOM_LEFT_CORNER); |
- SkBitmap* bottom_right_corner = |
- resources_->GetPartBitmap(FRAME_BOTTOM_RIGHT_CORNER); |
- SkBitmap* top_edge = resources_->GetPartBitmap(FRAME_TOP_EDGE); |
- SkBitmap* right_edge = resources_->GetPartBitmap(FRAME_RIGHT_EDGE); |
- SkBitmap* left_edge = resources_->GetPartBitmap(FRAME_LEFT_EDGE); |
- SkBitmap* bottom_edge = resources_->GetPartBitmap(FRAME_BOTTOM_EDGE); |
+ frame_background_->SetCornerImages( |
+ resources_->GetPartBitmap(FRAME_TOP_LEFT_CORNER), |
+ resources_->GetPartBitmap(FRAME_TOP_RIGHT_CORNER), |
+ resources_->GetPartBitmap(FRAME_BOTTOM_LEFT_CORNER), |
+ resources_->GetPartBitmap(FRAME_BOTTOM_RIGHT_CORNER)); |
+ frame_background_->SetSideImages( |
+ resources_->GetPartBitmap(FRAME_LEFT_EDGE), |
+ resources_->GetPartBitmap(FRAME_TOP_EDGE), |
+ resources_->GetPartBitmap(FRAME_RIGHT_EDGE), |
+ resources_->GetPartBitmap(FRAME_BOTTOM_EDGE)); |
#endif |
- SkBitmap* theme_frame = rb.GetBitmapNamed(IDR_THEME_FRAME); |
- SkColor frame_color = ResourceBundle::frame_color; |
- |
- // Fill with the frame color first so we have a constant background for |
- // areas not covered by the theme image. |
- canvas->FillRect(frame_color, |
- gfx::Rect(0, 0, width(), theme_frame->height())); |
- |
- int remaining_height = height() - theme_frame->height(); |
- if (remaining_height > 0) { |
- // Now fill down the sides. |
- canvas->FillRect(frame_color, gfx::Rect(0, theme_frame->height(), |
- left_edge->width(), |
- remaining_height)); |
- canvas->FillRect(frame_color, gfx::Rect(width() - right_edge->width(), |
- theme_frame->height(), |
- right_edge->width(), |
- remaining_height)); |
- int center_width = width() - left_edge->width() - right_edge->width(); |
- if (center_width > 0) { |
- // Now fill the bottom area. |
- canvas->FillRect(frame_color, |
- gfx::Rect(left_edge->width(), |
- height() - bottom_edge->height(), |
- center_width, bottom_edge->height())); |
- } |
- } |
- |
- // Draw the theme frame. |
- canvas->TileImageInt(*theme_frame, 0, 0, width(), theme_frame->height()); |
- |
- // Top. |
- canvas->DrawBitmapInt(*top_left_corner, 0, 0); |
- canvas->TileImageInt(*top_edge, top_left_corner->width(), 0, |
- width() - top_right_corner->width(), top_edge->height()); |
- canvas->DrawBitmapInt(*top_right_corner, |
- width() - top_right_corner->width(), 0); |
- |
- // Right. |
- canvas->TileImageInt(*right_edge, width() - right_edge->width(), |
- top_right_corner->height(), right_edge->width(), |
- height() - top_right_corner->height() - bottom_right_corner->height()); |
- |
- // Bottom. |
- canvas->DrawBitmapInt(*bottom_right_corner, |
- width() - bottom_right_corner->width(), |
- height() - bottom_right_corner->height()); |
- canvas->TileImageInt(*bottom_edge, bottom_left_corner->width(), |
- height() - bottom_edge->height(), |
- width() - bottom_left_corner->width() - bottom_right_corner->width(), |
- bottom_edge->height()); |
- canvas->DrawBitmapInt(*bottom_left_corner, 0, |
- height() - bottom_left_corner->height()); |
- |
- // Left. |
- canvas->TileImageInt(*left_edge, 0, top_left_corner->height(), |
- left_edge->width(), |
- height() - top_left_corner->height() - bottom_left_corner->height()); |
+ frame_background_->PaintRestored(canvas, this); |
} |
void ConstrainedWindowFrameView::PaintTitleBar(gfx::Canvas* canvas) { |