1// Copyright (c) 2012 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 "ui/views/controls/focusable_border.h" 6 7#include "ui/gfx/canvas.h" 8#include "ui/gfx/insets.h" 9#include "ui/gfx/skia_util.h" 10#include "ui/native_theme/native_theme.h" 11 12namespace { 13 14const int kInsetSize = 1; 15 16} // namespace 17 18namespace views { 19 20FocusableBorder::FocusableBorder() 21 : insets_(kInsetSize, kInsetSize, kInsetSize, kInsetSize), 22 override_color_(SK_ColorWHITE), 23 use_default_color_(true) { 24} 25 26FocusableBorder::~FocusableBorder() { 27} 28 29void FocusableBorder::SetColor(SkColor color) { 30 override_color_ = color; 31 use_default_color_ = false; 32} 33 34void FocusableBorder::UseDefaultColor() { 35 use_default_color_ = true; 36} 37 38void FocusableBorder::Paint(const View& view, gfx::Canvas* canvas) { 39 SkPath path; 40 path.addRect(gfx::RectToSkRect(view.GetLocalBounds()), SkPath::kCW_Direction); 41 SkPaint paint; 42 paint.setStyle(SkPaint::kStroke_Style); 43 SkColor color = override_color_; 44 if (use_default_color_) { 45 color = view.GetNativeTheme()->GetSystemColor( 46 view.HasFocus() ? ui::NativeTheme::kColorId_FocusedBorderColor : 47 ui::NativeTheme::kColorId_UnfocusedBorderColor); 48 } 49 50 paint.setColor(color); 51 paint.setStrokeWidth(SkIntToScalar(2)); 52 53 canvas->DrawPath(path, paint); 54} 55 56gfx::Insets FocusableBorder::GetInsets() const { 57 return insets_; 58} 59 60gfx::Size FocusableBorder::GetMinimumSize() const { 61 return gfx::Size(); 62} 63 64void FocusableBorder::SetInsets(int top, int left, int bottom, int right) { 65 insets_.Set(top, left, bottom, right); 66} 67 68} // namespace views 69