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 11 BackButton::BackButton(views::ButtonListener* listener, 12 ui::MenuModel* model) 13 : ToolbarButton(listener, model), 14 margin_leading_(0) { 15 } 16 17 BackButton::~BackButton() { 18 } 19 20 gfx::Rect BackButton::GetThemePaintRect() const { 21 gfx::Rect rect(LabelButton::GetThemePaintRect()); 22 rect.Inset(margin_leading_, 0, 0, 0); 23 return rect; 24 } 25 26 void BackButton::SetLeadingMargin(int margin) { 27 // Adjust border insets to follow the margin change, 28 // which will be reflected in where the border is painted 29 // through |GetThemePaintRect|. 30 gfx::Insets insets(border()->GetInsets()); 31 static_cast<views::LabelButtonBorder*>(border())->set_insets( 32 gfx::Insets(insets.top(), insets.left() + margin - margin_leading_, 33 insets.bottom(), insets.right())); 34 35 // Similarly fiddle the focus border. Value consistent with LabelButton 36 // and TextButton. 37 // TODO(gbillock): Refactor this magic number somewhere global to views, 38 // probably a FocusBorder constant. 39 const int kFocusRectInset = 3; 40 SetFocusPainter(views::Painter::CreateDashedFocusPainterWithInsets( 41 gfx::Insets(kFocusRectInset, kFocusRectInset + margin, 42 kFocusRectInset, kFocusRectInset))); 43 44 margin_leading_ = margin; 45 InvalidateLayout(); 46 } 47