1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/views/widget/drop_target_win.h"
7 #include "ui/base/dragdrop/drag_drop_types.h"
8 #include "ui/base/dragdrop/os_exchange_data.h"
9 #include "ui/base/dragdrop/os_exchange_data_provider_win.h"
10 #include "ui/gfx/point.h"
11 #include "ui/views/widget/root_view.h"
12 #include "ui/views/widget/widget.h"
14 using ui::OSExchangeData
;
15 using ui::OSExchangeDataProviderWin
;
19 DropTargetWin::DropTargetWin(internal::RootView
* root_view
)
20 : ui::DropTargetWin(root_view
->GetWidget()->GetNativeView()),
24 DropTargetWin::~DropTargetWin() {
27 void DropTargetWin::ResetTargetViewIfEquals(View
* view
) {
28 helper_
.ResetTargetViewIfEquals(view
);
31 DWORD
DropTargetWin::OnDragOver(IDataObject
* data_object
,
33 POINT cursor_position
,
35 gfx::Point
root_view_location(cursor_position
.x
, cursor_position
.y
);
36 View::ConvertPointToTarget(NULL
, helper_
.root_view(), &root_view_location
);
37 OSExchangeData
data(new OSExchangeDataProviderWin(data_object
));
39 helper_
.OnDragOver(data
, root_view_location
,
40 ui::DragDropTypes::DropEffectToDragOperation(effect
));
41 return ui::DragDropTypes::DragOperationToDropEffect(drop_operation
);
44 void DropTargetWin::OnDragLeave(IDataObject
* data_object
) {
48 DWORD
DropTargetWin::OnDrop(IDataObject
* data_object
,
50 POINT cursor_position
,
52 gfx::Point
root_view_location(cursor_position
.x
, cursor_position
.y
);
53 View::ConvertPointToTarget(NULL
, helper_
.root_view(), &root_view_location
);
55 OSExchangeData
data(new OSExchangeDataProviderWin(data_object
));
56 int drop_operation
= ui::DragDropTypes::DropEffectToDragOperation(effect
);
57 drop_operation
= helper_
.OnDragOver(data
, root_view_location
,
59 drop_operation
= helper_
.OnDrop(data
, root_view_location
, drop_operation
);
60 return ui::DragDropTypes::DragOperationToDropEffect(drop_operation
);