Commit 9fc1c0c9 authored by David Black's avatar David Black Committed by Commit Bot

Add selection ring to HoldingSpaceItemView.

Selection ring indicates the HoldingSpaceItemView's selected state.

This CL also adds the APIs that will be used by HoldingSpaceItemView's
delegate to update selected state.

Note that this CL uses kPlaceholderColor (red) for the selection ring.
This will be updated in later CLs.

Bug: 1129981
Change-Id: Ie582d29934f3f36d3bea7fe99fcbcb718c4432b2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2424588
Commit-Queue: David Black <dmblack@google.com>
Reviewed-by: default avatarAhmed Mehfooz <amehfooz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#809949}
parent ac05859d
...@@ -14,11 +14,13 @@ ...@@ -14,11 +14,13 @@
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "ui/base/dragdrop/drag_drop_types.h" #include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/base/l10n/l10n_util.h" #include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/text_constants.h" #include "ui/gfx/text_constants.h"
#include "ui/views/accessibility/view_accessibility.h" #include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/controls/focus_ring.h" #include "ui/views/controls/focus_ring.h"
#include "ui/views/controls/highlight_path_generator.h" #include "ui/views/controls/highlight_path_generator.h"
#include "ui/views/controls/menu/menu_runner.h" #include "ui/views/controls/menu/menu_runner.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash { namespace ash {
...@@ -45,11 +47,19 @@ HoldingSpaceItemView::HoldingSpaceItemView(const HoldingSpaceItem* item) ...@@ -45,11 +47,19 @@ HoldingSpaceItemView::HoldingSpaceItemView(const HoldingSpaceItem* item)
GetViewAccessibility().OverrideName(item->text()); GetViewAccessibility().OverrideName(item->text());
// Install the selection ring before installing the focus ring so that the
// selection ring will paint beneath the focus ring.
views::FocusRing* selection_ring = views::FocusRing::Install(this);
selection_ring->SetColor(gfx::kPlaceholderColor);
selection_ring->SetHasFocusPredicate(
[this](views::View* selection_ring) { return this->selected(); });
SetFocusBehavior(FocusBehavior::ALWAYS); SetFocusBehavior(FocusBehavior::ALWAYS);
views::FocusRing* focus_ring = views::FocusRing::Install(this); views::FocusRing* focus_ring = views::FocusRing::Install(this);
focus_ring->SetColor(ShelfConfig::Get()->shelf_focus_border_color()); focus_ring->SetColor(ShelfConfig::Get()->shelf_focus_border_color());
// Focus ring and ink drop layers should match the corner radius of this view. // The selection ring, focus ring, and ink drop layers should match the corner
// radius of this view. Installation of a highlight path generator does this.
views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(), views::InstallRoundRectHighlightPathGenerator(this, gfx::Insets(),
kHoldingSpaceCornerRadius); kHoldingSpaceCornerRadius);
} }
...@@ -90,4 +100,15 @@ void HoldingSpaceItemView::WriteDragData(const gfx::Point& point, ...@@ -90,4 +100,15 @@ void HoldingSpaceItemView::WriteDragData(const gfx::Point& point,
data->SetFilename(item_->file_path()); data->SetFilename(item_->file_path());
} }
void HoldingSpaceItemView::SetSelected(bool selected) {
if (selected_ == selected)
return;
selected_ = selected;
InvalidateLayout();
}
BEGIN_METADATA(HoldingSpaceItemView, views::InkDropHostView)
END_METADATA
} // namespace ash } // namespace ash
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "ash/ash_export.h" #include "ash/ash_export.h"
#include "ui/base/dragdrop/drag_drop_types.h" #include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/views/animation/ink_drop_host_view.h" #include "ui/views/animation/ink_drop_host_view.h"
#include "ui/views/metadata/metadata_header_macros.h"
namespace ash { namespace ash {
...@@ -19,6 +20,8 @@ class HoldingSpaceItemContextMenu; ...@@ -19,6 +20,8 @@ class HoldingSpaceItemContextMenu;
// Base class for HoldingSpaceItemChipView and HoldingSpaceItemScreenshotView. // Base class for HoldingSpaceItemChipView and HoldingSpaceItemScreenshotView.
class ASH_EXPORT HoldingSpaceItemView : public views::InkDropHostView { class ASH_EXPORT HoldingSpaceItemView : public views::InkDropHostView {
public: public:
METADATA_HEADER(HoldingSpaceItemView);
explicit HoldingSpaceItemView(const HoldingSpaceItem* item); explicit HoldingSpaceItemView(const HoldingSpaceItem* item);
HoldingSpaceItemView(const HoldingSpaceItemView&) = delete; HoldingSpaceItemView(const HoldingSpaceItemView&) = delete;
HoldingSpaceItemView& operator=(const HoldingSpaceItemView&) = delete; HoldingSpaceItemView& operator=(const HoldingSpaceItemView&) = delete;
...@@ -34,9 +37,15 @@ class ASH_EXPORT HoldingSpaceItemView : public views::InkDropHostView { ...@@ -34,9 +37,15 @@ class ASH_EXPORT HoldingSpaceItemView : public views::InkDropHostView {
const HoldingSpaceItem* item() const { return item_; } const HoldingSpaceItem* item() const { return item_; }
void SetSelected(bool selected);
bool selected() const { return selected_; }
private: private:
const HoldingSpaceItem* const item_; const HoldingSpaceItem* const item_;
std::unique_ptr<HoldingSpaceItemContextMenu> const context_menu_; std::unique_ptr<HoldingSpaceItemContextMenu> const context_menu_;
// Whether or not this view is selected.
bool selected_ = false;
}; };
} // namespace ash } // namespace ash
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment