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