Index: ash/common/drag_drop/drag_image_view.cc |
diff --git a/ash/common/drag_drop/drag_image_view.cc b/ash/common/drag_drop/drag_image_view.cc |
deleted file mode 100644 |
index 1306bf10c60b6be2e4c7c659db2048870f629821..0000000000000000000000000000000000000000 |
--- a/ash/common/drag_drop/drag_image_view.cc |
+++ /dev/null |
@@ -1,208 +0,0 @@ |
-// 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 "ash/common/drag_drop/drag_image_view.h" |
- |
-#include <memory> |
- |
-#include "ash/common/wm_window.h" |
-#include "ash/public/cpp/shell_window_ids.h" |
-#include "ash/root_window_controller.h" |
-#include "skia/ext/image_operations.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/display/display.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/resources/grit/ui_resources.h" |
-#include "ui/views/widget/widget.h" |
- |
-namespace ash { |
-namespace { |
-using views::Widget; |
- |
-std::unique_ptr<Widget> CreateDragWidget(WmWindow* root_window) { |
- std::unique_ptr<Widget> drag_widget(new Widget); |
- Widget::InitParams params; |
- params.type = Widget::InitParams::TYPE_TOOLTIP; |
- params.name = "DragWidget"; |
- params.keep_on_top = true; |
- params.accept_events = false; |
- params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
- params.shadow_type = Widget::InitParams::SHADOW_TYPE_NONE; |
- params.opacity = Widget::InitParams::TRANSLUCENT_WINDOW; |
- root_window->GetRootWindowController()->ConfigureWidgetInitParamsForContainer( |
- drag_widget.get(), kShellWindowId_DragImageAndTooltipContainer, ¶ms); |
- drag_widget->Init(params); |
- drag_widget->SetOpacity(1.f); |
- return drag_widget; |
-} |
- |
-} // namespace |
- |
-DragImageView::DragImageView(WmWindow* root_window, |
- ui::DragDropTypes::DragEventSource event_source) |
- : drag_event_source_(event_source), |
- touch_drag_operation_(ui::DragDropTypes::DRAG_NONE) { |
- DCHECK(root_window); |
- widget_ = CreateDragWidget(root_window); |
- widget_->SetContentsView(this); |
- widget_->SetAlwaysOnTop(true); |
- |
- // We are owned by the DragDropController. |
- set_owned_by_client(); |
-} |
- |
-DragImageView::~DragImageView() { |
- widget_->Hide(); |
-} |
- |
-void DragImageView::SetBoundsInScreen(const gfx::Rect& bounds) { |
- drag_image_size_ = bounds.size(); |
- widget_->SetBounds(bounds); |
-} |
- |
-void DragImageView::SetScreenPosition(const gfx::Point& position) { |
- widget_->SetBounds( |
- gfx::Rect(position, widget_->GetWindowBoundsInScreen().size())); |
-} |
- |
-gfx::Rect DragImageView::GetBoundsInScreen() const { |
- return widget_->GetWindowBoundsInScreen(); |
-} |
- |
-void DragImageView::SetWidgetVisible(bool visible) { |
- if (visible != widget_->IsVisible()) { |
- if (visible) |
- widget_->Show(); |
- else |
- widget_->Hide(); |
- } |
-} |
- |
-void DragImageView::SetTouchDragOperationHintOff() { |
- // Simply set the drag type to non-touch so that no hint is drawn. |
- drag_event_source_ = ui::DragDropTypes::DRAG_EVENT_SOURCE_MOUSE; |
- |
- // This disables the drag hint image. This should reduce the widget size if |
- // the drag image is smaller than the drag hint image, so we set new bounds. |
- gfx::Rect new_bounds = GetBoundsInScreen(); |
- new_bounds.set_size(drag_image_size_); |
- SetBoundsInScreen(new_bounds); |
- SchedulePaint(); |
-} |
- |
-void DragImageView::SetTouchDragOperation(int operation) { |
- if (touch_drag_operation_ == operation) |
- return; |
- touch_drag_operation_ = operation; |
- SchedulePaint(); |
-} |
- |
-void DragImageView::SetTouchDragOperationHintPosition( |
- const gfx::Point& position) { |
- if (touch_drag_operation_indicator_position_ == position) |
- return; |
- touch_drag_operation_indicator_position_ = position; |
- SchedulePaint(); |
-} |
- |
-void DragImageView::SetOpacity(float visibility) { |
- DCHECK_GE(visibility, 0.0f); |
- DCHECK_LE(visibility, 1.0f); |
- widget_->SetOpacity(visibility); |
-} |
- |
-void DragImageView::OnPaint(gfx::Canvas* canvas) { |
- if (GetImage().isNull()) |
- return; |
- |
- // |drag_image_size_| is in DIP. |
- // ImageSkia::size() also returns the size in DIP. |
- if (GetImage().size() == drag_image_size_) { |
- canvas->DrawImageInt(GetImage(), 0, 0); |
- } else { |
- WmWindow* window = WmWindow::Get(widget_->GetNativeWindow()); |
- const float device_scale = |
- window->GetDisplayNearestWindow().device_scale_factor(); |
- // The drag image already has device scale factor applied. But |
- // |drag_image_size_| is in DIP units. |
- gfx::Size drag_image_size_pixels = |
- gfx::ScaleToRoundedSize(drag_image_size_, device_scale); |
- gfx::ImageSkiaRep image_rep = GetImage().GetRepresentation(device_scale); |
- if (image_rep.is_null()) |
- return; |
- SkBitmap scaled = skia::ImageOperations::Resize( |
- image_rep.sk_bitmap(), skia::ImageOperations::RESIZE_LANCZOS3, |
- drag_image_size_pixels.width(), drag_image_size_pixels.height()); |
- gfx::ImageSkia image_skia(gfx::ImageSkiaRep(scaled, device_scale)); |
- canvas->DrawImageInt(image_skia, 0, 0); |
- } |
- |
- gfx::Image* drag_hint = DragHint(); |
- if (!ShouldDrawDragHint() || drag_hint->IsEmpty()) |
- return; |
- |
- // Make sure drag hint image is positioned within the widget. |
- gfx::Size drag_hint_size = drag_hint->Size(); |
- gfx::Point drag_hint_position = touch_drag_operation_indicator_position_; |
- drag_hint_position.Offset(-drag_hint_size.width() / 2, 0); |
- gfx::Rect drag_hint_bounds(drag_hint_position, drag_hint_size); |
- |
- gfx::Size widget_size = widget_->GetWindowBoundsInScreen().size(); |
- drag_hint_bounds.AdjustToFit(gfx::Rect(widget_size)); |
- |
- // Draw image. |
- canvas->DrawImageInt(*(drag_hint->ToImageSkia()), drag_hint_bounds.x(), |
- drag_hint_bounds.y()); |
-} |
- |
-gfx::Image* DragImageView::DragHint() const { |
- // Select appropriate drag hint. |
- gfx::Image* drag_hint = |
- &ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- IDR_TOUCH_DRAG_TIP_NODROP); |
- if (touch_drag_operation_ & ui::DragDropTypes::DRAG_COPY) { |
- drag_hint = &ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- IDR_TOUCH_DRAG_TIP_COPY); |
- } else if (touch_drag_operation_ & ui::DragDropTypes::DRAG_MOVE) { |
- drag_hint = &ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- IDR_TOUCH_DRAG_TIP_MOVE); |
- } else if (touch_drag_operation_ & ui::DragDropTypes::DRAG_LINK) { |
- drag_hint = &ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- IDR_TOUCH_DRAG_TIP_LINK); |
- } |
- return drag_hint; |
-} |
- |
-bool DragImageView::ShouldDrawDragHint() const { |
- return drag_event_source_ == ui::DragDropTypes::DRAG_EVENT_SOURCE_TOUCH; |
-} |
- |
-gfx::Size DragImageView::GetMinimumSize() const { |
- gfx::Size minimum_size = drag_image_size_; |
- if (ShouldDrawDragHint()) |
- minimum_size.SetToMax(DragHint()->Size()); |
- return minimum_size; |
-} |
- |
-void DragImageView::Layout() { |
- View::Layout(); |
- |
- // Only consider resizing the widget for the drag hint image if we are in a |
- // touch initiated drag. |
- gfx::Image* drag_hint = DragHint(); |
- if (!ShouldDrawDragHint() || drag_hint->IsEmpty()) |
- return; |
- |
- gfx::Size drag_hint_size = drag_hint->Size(); |
- |
- // Enlarge widget if required to fit the drag hint image. |
- gfx::Size widget_size = widget_->GetWindowBoundsInScreen().size(); |
- if (drag_hint_size.width() > widget_size.width() || |
- drag_hint_size.height() > widget_size.height()) { |
- widget_size.SetToMax(drag_hint_size); |
- widget_->SetSize(widget_size); |
- } |
-} |
- |
-} // namespace ash |