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