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