@@ -23,6 +23,7 @@ public class Application
23
23
private static DragDropRenderHandler dragRender ;
24
24
private static MouseEvents mouseEvent = 0 ;
25
25
private static MouseButtons mouseButton = 0 ;
26
+ private static MouseButtons mouseButtonLastPressed ;
26
27
private static Control mouseLastClickControl ;
27
28
private static float mouseWheelDelta ;
28
29
private static bool mousePositionChanged ;
@@ -154,12 +155,24 @@ public void ProccessMouse(MouseEvents mE, float mX, float mY, MouseButtons mButt
154
155
155
156
mousePositionX = mX ;
156
157
mousePositionY = mY ;
157
-
158
- //if (_mouseLastClickControl != null && _mouseEvent == MouseEvents.None && _mouseMovePosition != mousePosition)
159
- // _ProcessControl(mousePosition, _mouseLastClickControl, true);
160
158
161
- if ( mE == MouseEvents . None && ! mousePositionChanged )
162
- return ;
159
+ switch ( mE )
160
+ {
161
+ case MouseEvents . None :
162
+ if ( mousePositionChanged == false )
163
+ return ;
164
+ break ;
165
+
166
+ case MouseEvents . Down :
167
+ mouseButtonLastPressed = mButton ;
168
+ break ;
169
+
170
+ case MouseEvents . Up :
171
+ if ( mouseButtonLastPressed == mButton )
172
+ mouseButtonLastPressed = MouseButtons . None ;
173
+ break ;
174
+ }
175
+
163
176
164
177
// Dispose context first.
165
178
for ( int i = Contexts . Count - 1 ; i >= 0 ; i -- ) // We want to dispose child context first.
@@ -250,10 +263,10 @@ public void Run(Control control)
250
263
public void Update ( )
251
264
{
252
265
// Update hovered control.
253
- if ( hoveredControl != null && dragndrop == false )
266
+ if ( hoveredControl != null /* && dragndrop == false*/ )
254
267
{
255
268
var mclient = hoveredControl . PointToClient ( Control . MousePosition ) ;
256
- var hargs = new MouseEventArgs ( MouseButtons . None , 0 , mclient . X , mclient . Y , 0 ) ;
269
+ var hargs = new MouseEventArgs ( mouseButtonLastPressed , 0 , mclient . X , mclient . Y , 0 ) ;
257
270
hoveredControl . RaiseOnMouseHover ( hargs ) ;
258
271
if ( updateHoveredControl )
259
272
hoveredControl . RaiseOnMouseMove ( hargs ) ;
@@ -266,7 +279,7 @@ public void Update()
266
279
{
267
280
hoveredControl . hovered = false ;
268
281
hoveredControl . mouseEntered = false ;
269
- hoveredControl . RaiseOnMouseLeave ( new MouseEventArgs ( MouseButtons . None , 0 , 0 , 0 , 0 ) ) ;
282
+ hoveredControl . RaiseOnMouseLeave ( new MouseEventArgs ( mouseButtonLastPressed , 0 , 0 , 0 , 0 ) ) ;
270
283
if ( dragndrop )
271
284
hoveredControl . RaiseOnDragLeave ( EventArgs . Empty ) ;
272
285
}
@@ -281,7 +294,7 @@ public void Update()
281
294
282
295
controlAtMouse . hovered = true ;
283
296
controlAtMouse . mouseEntered = true ;
284
- controlAtMouse . RaiseOnMouseEnter ( new MouseEventArgs ( MouseButtons . None , 0 , mclient . X , mclient . Y , 0 ) ) ;
297
+ controlAtMouse . RaiseOnMouseEnter ( new MouseEventArgs ( mouseButtonLastPressed , 0 , mclient . X , mclient . Y , 0 ) ) ;
285
298
if ( dragndrop )
286
299
controlAtMouse . RaiseOnDragEnter ( new DragEventArgs ( new DataObject ( dragData ) , 0 , mclient . X , mclient . Y , DragDropEffects . None , dragControlEffects ) ) ;
287
300
}
0 commit comments