blob: a17f5104477a1e98c6d68c8ffa2dea53dc210c8f [file] [log] [blame]
// Copyright 2019 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 "ash/wm/wm_highlight_item_border.h"
#include "ash/style/ash_color_provider.h"
#include "cc/paint/paint_flags.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/views/view.h"
namespace ash {
namespace {
// The desk preview border size and padding in dips.
constexpr int kBorderSize = 2;
constexpr int kBorderPadding = 2;
} // namespace
WmHighlightItemBorder::WmHighlightItemBorder(int corner_radius,
gfx::Insets padding)
: views::Border(SK_ColorTRANSPARENT),
corner_radius_(corner_radius),
border_insets_(gfx::Insets(kBorderSize + kBorderPadding) + padding) {}
void WmHighlightItemBorder::SetFocused(bool focused) {
// Note that all WM features that use this custom border currently have dark
// mode as the default color mode.
set_color(focused ? AshColorProvider::Get()->GetControlsLayerColor(
AshColorProvider::ControlsLayerType::kFocusRingColor)
: SK_ColorTRANSPARENT);
}
void WmHighlightItemBorder::Paint(const views::View& view,
gfx::Canvas* canvas) {
if (color() == SK_ColorTRANSPARENT)
return;
cc::PaintFlags flags;
flags.setStrokeWidth(kBorderSize);
flags.setColor(color());
flags.setStyle(cc::PaintFlags::kStroke_Style);
flags.setAntiAlias(true);
gfx::RectF bounds(view.GetLocalBounds());
// The following inset is needed for the rounded corners of the border to
// look correct. Otherwise, the borders will be painted at the edge of the
// view, resulting in this border looking chopped.
bounds.Inset(kBorderSize / 2, kBorderSize / 2);
canvas->DrawRoundRect(bounds, corner_radius_, flags);
}
gfx::Insets WmHighlightItemBorder::GetInsets() const {
return border_insets_;
}
gfx::Size WmHighlightItemBorder::GetMinimumSize() const {
const int minmum_length = 2 * (kBorderSize + kBorderPadding);
return gfx::Size(minmum_length, minmum_length);
}
} // namespace ash