172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/infobars/infobar_button_border.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "third_party/skia/include/core/SkBitmap.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/button/text_button.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochInfoBarButtonBorder::InfoBarButtonBorder() {
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.top_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_LEFT_N);
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.top = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_N);
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.top_right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_RIGHT_N);
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_LEFT_N);
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.center = rb.GetBitmapNamed(IDR_INFOBARBUTTON_CENTER_N);
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_RIGHT_N);
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.bottom_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_LEFT_N);
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.bottom = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_N);
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  normal_set_.bottom_right =
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_RIGHT_N);
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.top_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_LEFT_H);
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.top = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_H);
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.top_right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_RIGHT_H);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_LEFT_H);
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.center = rb.GetBitmapNamed(IDR_INFOBARBUTTON_CENTER_H);
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_RIGHT_H);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.bottom_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_LEFT_H);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.bottom = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_H);
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  hot_set_.bottom_right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_RIGHT_H);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.top_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_LEFT_P);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.top = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_P);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.top_right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_TOP_RIGHT_P);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_LEFT_P);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.center = rb.GetBitmapNamed(IDR_INFOBARBUTTON_CENTER_P);
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.right = rb.GetBitmapNamed(IDR_INFOBARBUTTON_RIGHT_P);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.bottom_left = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_LEFT_P);
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.bottom = rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_P);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  pushed_set_.bottom_right =
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      rb.GetBitmapNamed(IDR_INFOBARBUTTON_BOTTOM_RIGHT_P);
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochInfoBarButtonBorder::~InfoBarButtonBorder() {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid InfoBarButtonBorder::GetInsets(gfx::Insets* insets) const {
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static const int kPreferredPaddingHorizontal = 6;
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  static const int kPreferredPaddingVertical = 5;
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  insets->Set(kPreferredPaddingVertical, kPreferredPaddingHorizontal,
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch              kPreferredPaddingVertical, kPreferredPaddingHorizontal);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid InfoBarButtonBorder::Paint(const views::View& view,
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                gfx::Canvas* canvas) const {
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const views::TextButton* mb = static_cast<const views::TextButton*>(&view);
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int state = mb->state();
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const MBBImageSet* set = &normal_set_;
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (state == views::TextButton::BS_HOT)
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set = &hot_set_;
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  else if (state == views::TextButton::BS_PUSHED)
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    set = &pushed_set_;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw top left image.
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  canvas->DrawBitmapInt(*set->top_left, 0, 0);
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stretch top image.
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const gfx::Rect& bounds = view.bounds();
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->top, 0, 0, set->top->width(), set->top->height(),
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->top_left->width(), 0,
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bounds.width() - set->top_right->width() - set->top_left->width(),
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      set->top->height(), false);
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw top right image.
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  canvas->DrawBitmapInt(*set->top_right,
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        bounds.width() - set->top_right->width(), 0);
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stretch left image.
8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->left, 0, 0, set->left->width(),
8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->left->height(), 0, set->top_left->height(), set->top_left->width(),
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bounds.height() - set->top->height() - set->bottom_left->height(), false);
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stretch center image.
8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->center, 0, 0, set->center->width(),
8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->center->height(), set->left->width(), set->top->height(),
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bounds.width() - set->right->width() - set->left->width(),
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bounds.height() - set->bottom->height() - set->top->height(), false);
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stretch right image.
9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->right, 0, 0, set->right->width(),
9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->right->height(), bounds.width() - set->right->width(),
9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->top_right->height(), set->right->width(),
9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      bounds.height() - set->bottom_right->height() - set->top_right->height(),
9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      false);
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw bottom left image.
10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->bottom_left, 0,
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        bounds.height() - set->bottom_left->height());
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Stretch bottom image.
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  canvas->DrawBitmapInt(*set->bottom, 0, 0, set->bottom->width(),
10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      set->bottom->height(), set->bottom_left->width(),
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      bounds.height() - set->bottom->height(),
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      bounds.width() - set->bottom_right->width() - set->bottom_left->width(),
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      set->bottom->height(), false);
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Draw bottom right image.
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  canvas->DrawBitmapInt(*set->bottom_right,
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        bounds.width() - set->bottom_right->width(),
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                        bounds.height() -  set->bottom_right->height());
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
116