chromium/ash/app_list/views/search_result_image_view_delegate.cc

// 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