// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/views/round_rect_painter.h"

#include "cc/paint/paint_canvas.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/skia_util.h"

namespace views {

RoundRectPainter::RoundRectPainter(SkColor border_color, int corner_radius)
    : border_color_(border_color),
      corner_radius_(corner_radius) {
}

RoundRectPainter::~RoundRectPainter() {
}

gfx::Size RoundRectPainter::GetMinimumSize() const {
  return gfx::Size(1, 1);
}

void RoundRectPainter::Paint(gfx::Canvas* canvas, const gfx::Size& size) {
  cc::PaintFlags flags;
  flags.setColor(border_color_);
  flags.setStyle(cc::PaintFlags::kStroke_Style);
  flags.setStrokeWidth(kBorderWidth);
  flags.setAntiAlias(true);
  gfx::Rect rect(size);
  rect.Inset(0, 0, kBorderWidth, kBorderWidth);
  SkRect skia_rect = gfx::RectToSkRect(rect);
  skia_rect.offset(kBorderWidth / 2.f, kBorderWidth / 2.f);
  canvas->sk_canvas()->drawRoundRect(skia_rect, SkIntToScalar(corner_radius_),
                                     SkIntToScalar(corner_radius_), flags);
}

}  // namespace views
