22using Avalonia . Controls ;
33using Avalonia . Input ;
44using Avalonia . Media . Imaging ;
5+ using Avalonia . VisualTree ;
56using ColorMC . Core . LaunchPath ;
67using ColorMC . Gui . Manager ;
8+ using ColorMC . Gui . UI . Controls . Items ;
79using ColorMC . Gui . UI . Flyouts ;
10+ using ColorMC . Gui . UI . Model . Items ;
811using ColorMC . Gui . UI . Model . Main ;
912using ColorMC . Gui . UIBinding ;
1013
@@ -27,9 +30,43 @@ public GameGroupControl()
2730
2831 AddHandler ( DragDrop . DragEnterEvent , DragEnter ) ;
2932 AddHandler ( DragDrop . DragLeaveEvent , DragLeave ) ;
33+ AddHandler ( DragDrop . DragOverEvent , OnDragOver ) ;
3034 AddHandler ( DragDrop . DropEvent , Drop ) ;
3135 }
3236
37+ public void OnDragOver ( object ? sender , DragEventArgs e )
38+ {
39+ var draggedItem = e . DataTransfer . TryGetValue ( BaseBinding . DrapType ) ;
40+
41+ if ( draggedItem == null )
42+ {
43+ return ;
44+ }
45+
46+ var vm = DataContext as GameGroupModel ;
47+
48+ var visualTarget = e . Source as Visual ;
49+ var targetBorder = visualTarget ? . FindAncestorOfType < GameControl > ( ) ;
50+
51+ if ( targetBorder != null && targetBorder ? . DataContext is GameItemModel targetItem )
52+ {
53+ var pos = e . GetPosition ( targetBorder ) ;
54+
55+ if ( pos . X > targetBorder . Bounds . Width / 2 )
56+ {
57+ vm ? . PutPla ( targetItem , false ) ;
58+ }
59+ else
60+ {
61+ vm ? . PutPla ( targetItem , true ) ;
62+ }
63+ }
64+ else
65+ {
66+ vm ? . PutPla ( ) ;
67+ }
68+ }
69+
3370 private void GameGroupControl_PointerPressed ( object ? sender , PointerPressedEventArgs e )
3471 {
3572 var temp = e . GetCurrentPoint ( this ) . Properties ;
@@ -107,5 +144,35 @@ private void Drop(object? sender, DragEventArgs e)
107144 {
108145 model . Drop ( e . DataTransfer ) ;
109146 }
147+
148+ var draggedItem = e . DataTransfer . TryGetValue ( BaseBinding . DrapType ) ;
149+
150+ if ( draggedItem == null )
151+ {
152+ return ;
153+ }
154+
155+ var vm = DataContext as GameGroupModel ;
156+
157+ var visualTarget = e . Source as Visual ;
158+ var targetBorder = visualTarget ? . FindAncestorOfType < GameControl > ( ) ;
159+
160+ if ( targetBorder != null && targetBorder ? . DataContext is GameItemModel targetItem )
161+ {
162+ var pos = e . GetPosition ( targetBorder ) ;
163+
164+ if ( pos . X > targetBorder . Bounds . Width / 2 )
165+ {
166+ vm ? . PutDrap ( targetItem , false ) ;
167+ }
168+ else
169+ {
170+ vm ? . PutDrap ( targetItem , true ) ;
171+ }
172+ }
173+ else
174+ {
175+ vm ? . PutDrap ( ) ;
176+ }
110177 }
111178}
0 commit comments