| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/app_list/views/search_result_image_view_delegate.h" |
| |
| #include <memory> |
| |
| #include "ash/app_list/model/search/search_result.h" |
| #include "ash/app_list/views/search_result_image_view.h" |
| #include "ui/base/dragdrop/drag_drop_types.h" |
| #include "ui/base/models/simple_menu_model.h" |
| #include "ui/views/controls/menu/menu_runner.h" |
| #include "ui/views/view_utils.h" |
| |
| namespace ash { |
| |
| SearchResultImageViewDelegate::SearchResultImageViewDelegate() = default; |
| |
| SearchResultImageViewDelegate::~SearchResultImageViewDelegate() = default; |
| |
| bool SearchResultImageViewDelegate::CanStartDragForView( |
| views::View* sender, |
| const gfx::Point& press_pt, |
| const gfx::Point& current_pt) { |
| const gfx::Vector2d delta = current_pt - press_pt; |
| return views::View::ExceededDragThreshold(delta); |
| } |
| |
| int SearchResultImageViewDelegate::GetDragOperationsForView( |
| views::View* sender, |
| const gfx::Point& press_pt) { |
| return ui::DragDropTypes::DRAG_COPY; |
| } |
| |
| void SearchResultImageViewDelegate::WriteDragDataForView( |
| views::View* sender, |
| const gfx::Point& press_pt, |
| ui::OSExchangeData* data) { |
| auto* image_view = views::AsViewClass<SearchResultImageView>(sender); |
| DUMP_WILL_BE_CHECK(image_view); |
| data->provider().SetDragImage(image_view->CreateDragImage(), |
| press_pt.OffsetFromOrigin()); |
| |
| base::FilePath file_path = image_view->result()->file_path(); |
| DUMP_WILL_BE_CHECK(!file_path.empty()); |
| data->SetFilename(file_path); |
| return; |
| } |
| |
| } // namespace ash |