1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file.
4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/ui/views/toolbar/back_button.h"
6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/gfx/insets.h"
8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/views/controls/button/label_button_border.h"
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ui/views/painter.h"
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)BackButton::BackButton(views::ButtonListener* listener,
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       ui::MenuModel* model)
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    : ToolbarButton(listener, model),
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      margin_leading_(0) {}
15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BackButton::~BackButton() {}
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)gfx::Rect BackButton::GetThemePaintRect() const  {
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  gfx::Rect rect(LabelButton::GetThemePaintRect());
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  rect.Inset(margin_leading_, 0, 0, 0);
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  return rect;
22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BackButton::SetLeadingMargin(int margin) {
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  margin_leading_ = margin;
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  UpdateThemedBorder();
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Similarly fiddle the focus border. Value consistent with LabelButton.
30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // TODO(gbillock): Refactor this magic number somewhere global to views,
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // probably a FocusBorder constant.
32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const int kFocusRectInset = 3;
33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  SetFocusPainter(views::Painter::CreateDashedFocusPainterWithInsets(
34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      gfx::Insets(kFocusRectInset, kFocusRectInset + margin,
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                  kFocusRectInset, kFocusRectInset)));
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  InvalidateLayout();
38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)scoped_ptr<views::LabelButtonBorder> BackButton::CreateDefaultBorder() const {
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  scoped_ptr<views::LabelButtonBorder> border =
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ToolbarButton::CreateDefaultBorder();
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Adjust border insets to follow the margin change,
45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // which will be reflected in where the border is painted
46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // through |GetThemePaintRect|.
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const gfx::Insets insets(border->GetInsets());
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  border->set_insets(gfx::Insets(insets.top(), insets.left() + margin_leading_,
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 insets.bottom(), insets.right()));
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return border.Pass();
52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
53