Home | History | Annotate | Download | only in controls
      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 
     12 namespace {
     13 
     14 const int kInsetSize = 1;
     15 
     16 }  // namespace
     17 
     18 namespace views {
     19 
     20 FocusableBorder::FocusableBorder()
     21     : insets_(kInsetSize, kInsetSize, kInsetSize, kInsetSize),
     22       override_color_(SK_ColorWHITE),
     23       use_default_color_(true) {
     24 }
     25 
     26 FocusableBorder::~FocusableBorder() {
     27 }
     28 
     29 void FocusableBorder::SetColor(SkColor color) {
     30   override_color_ = color;
     31   use_default_color_ = false;
     32 }
     33 
     34 void FocusableBorder::UseDefaultColor() {
     35   use_default_color_ = true;
     36 }
     37 
     38 void 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 
     56 gfx::Insets FocusableBorder::GetInsets() const {
     57   return insets_;
     58 }
     59 
     60 gfx::Size FocusableBorder::GetMinimumSize() const {
     61   return gfx::Size();
     62 }
     63 
     64 void FocusableBorder::SetInsets(int top, int left, int bottom, int right) {
     65   insets_.Set(top, left, bottom, right);
     66 }
     67 
     68 }  // namespace views
     69