public TestSceneCursorContainer() { Container container; TestCursorContainer cursorContainer; void createContent() { Child = container = new Container { Masking = true, RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(0.5f), Children = new Drawable[] { new Box { Colour = Color4.Yellow, RelativeSizeAxes = Axes.Both, }, cursorContainer = new TestCursorContainer { Name = "test", RelativeSizeAxes = Axes.Both } } }; } bool cursorCenteredInContainer() => Precision.AlmostEquals( cursorContainer.ActiveCursor.ScreenSpaceDrawQuad.Centre, container.ScreenSpaceDrawQuad.Centre); bool cursorAtMouseScreenSpace() => Precision.AlmostEquals( cursorContainer.ActiveCursor.ScreenSpaceDrawQuad.Centre, InputManager.CurrentState.Mouse.Position); createContent(); AddStep("Move cursor to centre", () => InputManager.MoveMouseTo(container.ScreenSpaceDrawQuad.Centre)); AddAssert("cursor is centered", () => cursorCenteredInContainer()); AddStep("Move container", () => container.Y += 50); AddAssert("cursor no longer centered", () => !cursorCenteredInContainer()); AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); AddStep("Resize container", () => container.Size *= new Vector2(1.4f, 1)); AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); // ensure positional updates work AddStep("Move cursor to centre", () => InputManager.MoveMouseTo(container.ScreenSpaceDrawQuad.Centre)); AddAssert("cursor is not centered", () => cursorCenteredInContainer()); AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); // ensure we received the mouse position update from IRequireHighFrequencyMousePosition AddStep("Move cursor to test centre", () => InputManager.MoveMouseTo(Content.ScreenSpaceDrawQuad.Centre)); AddStep("Recreate container with mouse already in place", createContent); AddAssert("cursor is centered", () => cursorCenteredInContainer()); AddAssert("cursor at mouse position", () => cursorAtMouseScreenSpace()); }
public CustomCursorBox(Color4 cursorColour, bool providesUserCursor = true) { ProvidingUserCursor = providesUserCursor; Colour = cursorColour; Masking = true; Children = new Drawable[] { background = new Box { RelativeSizeAxes = Axes.Both, Alpha = 0.1f }, new OsuSpriteText { Anchor = Anchor.Centre, Origin = Anchor.Centre, Text = providesUserCursor ? "User cursor" : "Local cursor" }, Cursor = new TestCursorContainer { State = providesUserCursor ? Visibility.Hidden : Visibility.Visible, } }; }
private void createContent() { Child = container = new Container { Masking = true, RelativeSizeAxes = Axes.Both, Anchor = Anchor.Centre, Origin = Anchor.Centre, Size = new Vector2(0.5f), Children = new Drawable[] { new Box { Colour = Color4.Yellow, RelativeSizeAxes = Axes.Both, }, cursorContainer = new TestCursorContainer { Name = "test", RelativeSizeAxes = Axes.Both } } }; }