summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ash/ash.gyp2
-rw-r--r--ash/drag_drop/drag_drop_controller.cc27
-rw-r--r--ash/drag_drop/drag_drop_controller_unittest.cc4
-rw-r--r--ui/base/dragdrop/drag_utils_aura.cc7
-rw-r--r--ui/base/dragdrop/drag_utils_win.cc8
-rw-r--r--ui/base/dragdrop/os_exchange_data.h12
-rw-r--r--ui/base/dragdrop/os_exchange_data_provider_aura.cc15
-rw-r--r--ui/base/dragdrop/os_exchange_data_provider_aura.h14
-rw-r--r--ui/base/dragdrop/os_exchange_data_provider_win.cc19
-rw-r--r--ui/base/dragdrop/os_exchange_data_provider_win.h14
10 files changed, 85 insertions, 37 deletions
diff --git a/ash/ash.gyp b/ash/ash.gyp
index 7fe58b7..420fc37 100644
--- a/ash/ash.gyp
+++ b/ash/ash.gyp
@@ -623,8 +623,6 @@
}],
['OS=="win"', {
'sources/': [
- # TODO(win_ash): implement DragDropController::StartDragAndDrop
- ['exclude', 'drag_drop/drag_drop_controller_unittest.cc'],
# TODO(zork): fix this test to build on Windows. See: crosbug.com/26906
['exclude', 'focus_cycler_unittest.cc'],
# All tests for multiple displays: not supported on Windows Ash.
diff --git a/ash/drag_drop/drag_drop_controller.cc b/ash/drag_drop/drag_drop_controller.cc
index 77fbd79..30362e2 100644
--- a/ash/drag_drop/drag_drop_controller.cc
+++ b/ash/drag_drop/drag_drop_controller.cc
@@ -19,7 +19,7 @@
#include "ui/aura/window.h"
#include "ui/base/animation/linear_animation.h"
#include "ui/base/dragdrop/drag_drop_types.h"
-#include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
+#include "ui/base/dragdrop/os_exchange_data.h"
#include "ui/base/events/event.h"
#include "ui/base/events/event_utils.h"
#include "ui/gfx/point.h"
@@ -112,22 +112,10 @@ int DragDropController::StartDragAndDrop(
if (IsDragDropInProgress())
return 0;
-#if defined(OS_WIN)
- // TODO(win_ash): need to figure out how this will work in Metro, since
- // OSExchangeDataProviderAura isn't used in Windows builds. Two alternatives:
- // 1) Use OSExchangeDataProviderAura in Ash and OSExchangeDataProviderWin
- // elsewhere. This will complicate creating an ui::OSExchangeData to pass
- // in more context.
- // 2) Add methods to get the image and offset in the base interface of these
- // implementations to get to this data here.
- NOTIMPLEMENTED();
- return 0;
-#else
- const ui::OSExchangeDataProviderAura& provider =
- static_cast<const ui::OSExchangeDataProviderAura&>(data.provider());
+ const ui::OSExchangeData::Provider* provider = &data.provider();
// We do not support touch drag/drop without a drag image.
if (source == ui::DragDropTypes::DRAG_EVENT_SOURCE_TOUCH &&
- provider.drag_image().size().IsEmpty())
+ provider->GetDragImage().size().IsEmpty())
return 0;
current_drag_event_source_ = source;
@@ -162,11 +150,11 @@ int DragDropController::StartDragAndDrop(
gfx::Point start_location = root_location;
ash::wm::ConvertPointToScreen(root_window, &start_location);
drag_image_final_bounds_for_cancel_animation_ = gfx::Rect(
- start_location - provider.drag_image_offset(),
- provider.drag_image().size());
+ start_location - provider->GetDragImageOffset(),
+ provider->GetDragImage().size());
drag_image_.reset(new DragImageView);
- drag_image_->SetImage(provider.drag_image());
- drag_image_offset_ = provider.drag_image_offset();
+ drag_image_->SetImage(provider->GetDragImage());
+ drag_image_offset_ = provider->GetDragImageOffset();
gfx::Rect drag_image_bounds(start_location, drag_image_->GetPreferredSize());
drag_image_bounds = AdjustDragImageBoundsForScaleAndOffset(drag_image_bounds,
drag_image_vertical_offset, drag_image_scale, &drag_image_offset_);
@@ -197,7 +185,6 @@ int DragDropController::StartDragAndDrop(
drag_source_window_->RemoveObserver(this);
drag_source_window_ = NULL;
}
-#endif
return drag_operation_;
}
diff --git a/ash/drag_drop/drag_drop_controller_unittest.cc b/ash/drag_drop/drag_drop_controller_unittest.cc
index f52893a..a287ca8 100644
--- a/ash/drag_drop/drag_drop_controller_unittest.cc
+++ b/ash/drag_drop/drag_drop_controller_unittest.cc
@@ -233,8 +233,12 @@ class TestNativeWidgetAura : public views::NativeWidgetAura {
// TODO(sky): this is for debugging, remove when track down failure.
void SetCheckIfCaptureLost(views::Widget* widget, bool value) {
+ // On Windows, the DCHECK triggers when running on bot or locally through RDP,
+ // but not when logged in locally.
+#if !defined(OS_WIN)
static_cast<TestNativeWidgetAura*>(widget->native_widget())->
set_check_if_capture_lost(value);
+#endif
}
views::Widget* CreateNewWidget() {
diff --git a/ui/base/dragdrop/drag_utils_aura.cc b/ui/base/dragdrop/drag_utils_aura.cc
index 07fd467..23c84fc 100644
--- a/ui/base/dragdrop/drag_utils_aura.cc
+++ b/ui/base/dragdrop/drag_utils_aura.cc
@@ -6,7 +6,6 @@
#include "base/logging.h"
#include "ui/base/dragdrop/os_exchange_data.h"
-#include "ui/base/dragdrop/os_exchange_data_provider_aura.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/size.h"
@@ -18,10 +17,8 @@ void SetDragImageOnDataObject(const gfx::ImageSkia& image,
const gfx::Size& size,
const gfx::Vector2d& cursor_offset,
ui::OSExchangeData* data_object) {
- ui::OSExchangeDataProviderAura& provider(
- static_cast<ui::OSExchangeDataProviderAura&>(data_object->provider()));
- provider.set_drag_image(image);
- provider.set_drag_image_offset(cursor_offset);
+
+ data_object->provider().SetDragImage(image, cursor_offset);
}
} // namespace drag_utils
diff --git a/ui/base/dragdrop/drag_utils_win.cc b/ui/base/dragdrop/drag_utils_win.cc
index 9a3ab56..f03c9d7 100644
--- a/ui/base/dragdrop/drag_utils_win.cc
+++ b/ui/base/dragdrop/drag_utils_win.cc
@@ -68,6 +68,14 @@ void SetDragImageOnDataObject(const gfx::ImageSkia& image_skia,
// Attach 'bitmap' to the data_object.
SetDragImageOnDataObject(bitmap, size, cursor_offset,
ui::OSExchangeDataProviderWin::GetIDataObject(*data_object));
+
+#if defined(USE_AURA)
+ // TODO: the above code is used in non-Ash, while below is used in Ash. If we
+ // could figure this context out then we wouldn't do unnecessary work. However
+ // as it stands getting this information in ui/base would be a layering
+ // violation.
+ data_object->provider().SetDragImage(image_skia, cursor_offset);
+#endif
}
} // namespace drag_utils
diff --git a/ui/base/dragdrop/os_exchange_data.h b/ui/base/dragdrop/os_exchange_data.h
index c99cf3a..5d89ebe 100644
--- a/ui/base/dragdrop/os_exchange_data.h
+++ b/ui/base/dragdrop/os_exchange_data.h
@@ -29,6 +29,11 @@
class GURL;
class Pickle;
+namespace gfx {
+class ImageSkia;
+class Vector2d;
+}
+
namespace ui {
///////////////////////////////////////////////////////////////////////////////
@@ -137,6 +142,13 @@ class UI_EXPORT OSExchangeData {
virtual bool GetHtml(string16* html, GURL* base_url) const = 0;
virtual bool HasHtml() const = 0;
#endif
+
+#if defined(USE_AURA)
+ virtual void SetDragImage(const gfx::ImageSkia& image,
+ const gfx::Vector2d& cursor_offset) = 0;
+ virtual const gfx::ImageSkia& GetDragImage() const = 0;
+ virtual const gfx::Vector2d& GetDragImageOffset() const = 0;
+#endif
};
// Creates the platform specific Provider.
diff --git a/ui/base/dragdrop/os_exchange_data_provider_aura.cc b/ui/base/dragdrop/os_exchange_data_provider_aura.cc
index 8d6e2fc..34af849 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_aura.cc
+++ b/ui/base/dragdrop/os_exchange_data_provider_aura.cc
@@ -162,6 +162,21 @@ bool OSExchangeDataProviderAura::HasHtml() const {
return ((formats_ & OSExchangeData::HTML) != 0);
}
+void OSExchangeDataProviderAura::SetDragImage(
+ const gfx::ImageSkia& image,
+ const gfx::Vector2d& cursor_offset) {
+ drag_image_ = image;
+ drag_image_offset_ = cursor_offset;
+}
+
+const gfx::ImageSkia& OSExchangeDataProviderAura::GetDragImage() const {
+ return drag_image_;
+}
+
+const gfx::Vector2d& OSExchangeDataProviderAura::GetDragImageOffset() const {
+ return drag_image_offset_;
+}
+
bool OSExchangeDataProviderAura::GetPlainTextURL(GURL* url) const {
if ((formats_ & OSExchangeData::STRING) == 0)
return false;
diff --git a/ui/base/dragdrop/os_exchange_data_provider_aura.h b/ui/base/dragdrop/os_exchange_data_provider_aura.h
index 14c684c..4b431d2 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_aura.h
+++ b/ui/base/dragdrop/os_exchange_data_provider_aura.h
@@ -57,16 +57,10 @@ class UI_EXPORT OSExchangeDataProviderAura : public OSExchangeData::Provider {
virtual void SetHtml(const string16& html, const GURL& base_url) OVERRIDE;
virtual bool GetHtml(string16* html, GURL* base_url) const OVERRIDE;
virtual bool HasHtml() const OVERRIDE;
-
- void set_drag_image(const gfx::ImageSkia& drag_image) {
- drag_image_ = drag_image;
- }
-
- const gfx::ImageSkia& drag_image() const { return drag_image_; }
- void set_drag_image_offset(const gfx::Vector2d& drag_image_offset) {
- drag_image_offset_ = drag_image_offset;
- }
- const gfx::Vector2d& drag_image_offset() const { return drag_image_offset_; }
+ virtual void SetDragImage(const gfx::ImageSkia& image,
+ const gfx::Vector2d& cursor_offset) OVERRIDE;
+ virtual const gfx::ImageSkia& GetDragImage() const OVERRIDE;
+ virtual const gfx::Vector2d& GetDragImageOffset() const OVERRIDE;
private:
typedef std::map<OSExchangeData::CustomFormat, Pickle> PickleData;
diff --git a/ui/base/dragdrop/os_exchange_data_provider_win.cc b/ui/base/dragdrop/os_exchange_data_provider_win.cc
index 65922f8..800f81a 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_win.cc
+++ b/ui/base/dragdrop/os_exchange_data_provider_win.cc
@@ -499,6 +499,25 @@ void OSExchangeDataProviderWin::SetDownloadFileInfo(
data_->contents_.push_back(info);
}
+#if defined(USE_AURA)
+
+void OSExchangeDataProviderWin::SetDragImage(
+ const gfx::ImageSkia& image,
+ const gfx::Vector2d& cursor_offset) {
+ drag_image_ = image;
+ drag_image_offset_ = cursor_offset;
+}
+
+const gfx::ImageSkia& OSExchangeDataProviderWin::GetDragImage() const {
+ return drag_image_;
+}
+
+const gfx::Vector2d& OSExchangeDataProviderWin::GetDragImageOffset() const {
+ return drag_image_offset_;
+}
+
+#endif
+
///////////////////////////////////////////////////////////////////////////////
// DataObjectImpl, IDataObject implementation:
diff --git a/ui/base/dragdrop/os_exchange_data_provider_win.h b/ui/base/dragdrop/os_exchange_data_provider_win.h
index 9705d34..3381439 100644
--- a/ui/base/dragdrop/os_exchange_data_provider_win.h
+++ b/ui/base/dragdrop/os_exchange_data_provider_win.h
@@ -20,6 +20,8 @@
#include "base/win/scoped_comptr.h"
#include "ui/base/dragdrop/os_exchange_data.h"
#include "ui/base/ui_export.h"
+#include "ui/gfx/image/image_skia.h"
+#include "ui/gfx/vector2d.h"
namespace ui {
@@ -186,11 +188,23 @@ class UI_EXPORT OSExchangeDataProviderWin : public OSExchangeData::Provider {
virtual bool HasCustomFormat(OSExchangeData::CustomFormat format) const;
virtual void SetDownloadFileInfo(
const OSExchangeData::DownloadFileInfo& download_info);
+#if defined(USE_AURA)
+ virtual void SetDragImage(const gfx::ImageSkia& image,
+ const gfx::Vector2d& cursor_offset) OVERRIDE;
+ virtual const gfx::ImageSkia& GetDragImage() const OVERRIDE;
+ virtual const gfx::Vector2d& GetDragImageOffset() const OVERRIDE;
+#endif
private:
scoped_refptr<DataObjectImpl> data_;
base::win::ScopedComPtr<IDataObject> source_object_;
+#if defined(USE_AURA)
+ // Drag image and offset data. Only used for Ash.
+ gfx::ImageSkia drag_image_;
+ gfx::Vector2d drag_image_offset_;
+#endif
+
DISALLOW_COPY_AND_ASSIGN(OSExchangeDataProviderWin);
};