10
10
using osu . Framework . Graphics . Shapes ;
11
11
using osu . Framework . Input ;
12
12
using osu . Framework . Input . Events ;
13
+ using osu . Framework . Input . StateChanges ;
13
14
using osu . Framework . Input . States ;
14
15
using osu . Framework . Testing ;
15
16
using osu . Framework . Testing . Input ;
@@ -272,6 +273,63 @@ public void TestMouseTouchProductionOnPassThrough()
272
273
AddAssert ( "pass-through handled mouse" , ( ) => testInputManager . CurrentState . Mouse . Buttons . Single ( ) == MouseButton . Left ) ;
273
274
}
274
275
276
+ [ Test ]
277
+ public void TestPenInputPassThrough ( )
278
+ {
279
+ MouseBox outer = null ! ;
280
+ MouseBox inner = null ! ;
281
+
282
+ addTestInputManagerStep ( ) ;
283
+ AddStep ( "setup hierarchy" , ( ) =>
284
+ {
285
+ Add ( outer = new MouseBox
286
+ {
287
+ Alpha = 0.5f ,
288
+ Depth = 1 ,
289
+ RelativeSizeAxes = Axes . Both ,
290
+ } ) ;
291
+
292
+ testInputManager . Add ( inner = new MouseBox
293
+ {
294
+ Alpha = 0.5f ,
295
+ RelativeSizeAxes = Axes . Both ,
296
+ } ) ;
297
+ } ) ;
298
+
299
+ AddStep ( "move pen to box" , ( ) => InputManager . MovePenTo ( testInputManager ) ) ;
300
+
301
+ AddAssert ( "ensure parent manager produced mouse" , ( ) => InputManager . CurrentState . Mouse . Position == testInputManager . ScreenSpaceDrawQuad . Centre ) ;
302
+ AddAssert ( "ensure pass-through produced mouse" , ( ) => testInputManager . CurrentState . Mouse . Position == testInputManager . ScreenSpaceDrawQuad . Centre ) ;
303
+
304
+ AddAssert ( "outer box received 1 pen event" , ( ) => outer . PenEvents , ( ) => Is . EqualTo ( 1 ) ) ;
305
+ AddAssert ( "outer box received no mouse events" , ( ) => outer . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
306
+
307
+ AddAssert ( "inner box received 1 pen event" , ( ) => inner . PenEvents , ( ) => Is . EqualTo ( 1 ) ) ;
308
+ AddAssert ( "inner box received no mouse events" , ( ) => inner . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
309
+
310
+ AddStep ( "press pen" , ( ) => InputManager . PressPen ( ) ) ;
311
+
312
+ AddAssert ( "ensure parent manager produced mouse" , ( ) => InputManager . CurrentState . Mouse . Buttons . Single ( ) == MouseButton . Left ) ;
313
+ AddAssert ( "ensure pass-through produced mouse" , ( ) => testInputManager . CurrentState . Mouse . Buttons . Single ( ) == MouseButton . Left ) ;
314
+
315
+ AddAssert ( "outer box received 2 pen events" , ( ) => outer . PenEvents , ( ) => Is . EqualTo ( 2 ) ) ;
316
+ AddAssert ( "outer box received no mouse events" , ( ) => outer . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
317
+
318
+ AddAssert ( "inner box received 2 pen events" , ( ) => inner . PenEvents , ( ) => Is . EqualTo ( 2 ) ) ;
319
+ AddAssert ( "inner box received no mouse events" , ( ) => inner . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
320
+
321
+ AddStep ( "release pen" , ( ) => InputManager . ReleasePen ( ) ) ;
322
+
323
+ AddAssert ( "ensure parent manager produced mouse" , ( ) => InputManager . CurrentState . Mouse . Buttons . HasAnyButtonPressed , ( ) => Is . False ) ;
324
+ AddAssert ( "ensure pass-through produced mouse" , ( ) => testInputManager . CurrentState . Mouse . Buttons . HasAnyButtonPressed , ( ) => Is . False ) ;
325
+
326
+ AddAssert ( "outer box received 3 pen events" , ( ) => outer . PenEvents , ( ) => Is . EqualTo ( 3 ) ) ;
327
+ AddAssert ( "outer box received no mouse events" , ( ) => outer . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
328
+
329
+ AddAssert ( "inner box received 3 pen events" , ( ) => inner . PenEvents , ( ) => Is . EqualTo ( 3 ) ) ;
330
+ AddAssert ( "inner box received no mouse events" , ( ) => inner . MouseEvents , ( ) => Is . EqualTo ( 0 ) ) ;
331
+ }
332
+
275
333
public partial class TestInputManager : ManualInputManager
276
334
{
277
335
public readonly TestSceneInputManager . ContainingInputManagerStatusText Status ;
@@ -291,5 +349,59 @@ public partial class HandlingBox : Box
291
349
292
350
protected override bool Handle ( UIEvent e ) => OnHandle ? . Invoke ( e ) ?? false ;
293
351
}
352
+
353
+ public partial class MouseBox : Box
354
+ {
355
+ public int MouseEvents { get ; private set ; }
356
+ public int PenEvents { get ; private set ; }
357
+
358
+ protected override bool OnMouseMove ( MouseMoveEvent e )
359
+ {
360
+ switch ( e . CurrentState . Mouse . LastSource )
361
+ {
362
+ case ISourcedFromPen :
363
+ PenEvents ++ ;
364
+ break ;
365
+
366
+ default :
367
+ MouseEvents ++ ;
368
+ break ;
369
+ }
370
+
371
+ return base . OnMouseMove ( e ) ;
372
+ }
373
+
374
+ protected override bool OnMouseDown ( MouseDownEvent e )
375
+ {
376
+ switch ( e . CurrentState . Mouse . LastSource )
377
+ {
378
+ case ISourcedFromPen :
379
+ PenEvents ++ ;
380
+ break ;
381
+
382
+ default :
383
+ MouseEvents ++ ;
384
+ break ;
385
+ }
386
+
387
+ return base . OnMouseDown ( e ) ;
388
+ }
389
+
390
+ protected override void OnMouseUp ( MouseUpEvent e )
391
+ {
392
+ switch ( e . CurrentState . Mouse . LastSource )
393
+ {
394
+ case ISourcedFromPen :
395
+ PenEvents ++ ;
396
+ break ;
397
+
398
+ default :
399
+ MouseEvents ++ ;
400
+ break ;
401
+ }
402
+
403
+ base . OnMouseUp ( e ) ;
404
+ }
405
+ }
294
406
}
295
407
}
0 commit comments