A game framework written with osu! in mind.
1// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2// See the LICENCE file in the repository root for full licence text.
3
4using osu.Framework.Graphics;
5using osu.Framework.Graphics.Containers;
6using osu.Framework.Graphics.Shapes;
7using osu.Framework.Input.Events;
8using osuTK;
9using osuTK.Graphics;
10
11namespace osu.Framework.Tests.Visual.Input
12{
13 public class TestSceneNestedHover : FrameworkTestScene
14 {
15 public TestSceneNestedHover()
16 {
17 HoverBox box1;
18 Add(box1 = new HoverBox(Color4.Gray, Color4.White)
19 {
20 Anchor = Anchor.Centre,
21 Origin = Anchor.Centre,
22 Size = new Vector2(300, 300),
23 CornerRadius = 100,
24 CornerExponent = 5,
25 Masking = true,
26 });
27
28 HoverBox box2;
29 box1.Add(box2 = new HoverBox(Color4.Pink, Color4.Red)
30 {
31 RelativePositionAxes = Axes.Both,
32 RelativeSizeAxes = Axes.Both,
33 Position = new Vector2(0.2f, 0.2f),
34 Size = new Vector2(0.6f, 0.6f)
35 });
36
37 box2.Add(new HoverBox(Color4.LightBlue, Color4.Blue, false)
38 {
39 RelativePositionAxes = Axes.Both,
40 RelativeSizeAxes = Axes.Both,
41 Position = new Vector2(0.2f, 0.2f),
42 Size = new Vector2(0.6f, 0.6f)
43 });
44 }
45
46 private class HoverBox : Container
47 {
48 private readonly Color4 normalColour;
49 private readonly Color4 hoveredColour;
50
51 private readonly Box box;
52 private readonly bool propagateHover;
53
54 public HoverBox(Color4 normalColour, Color4 hoveredColour, bool propagateHover = true)
55 {
56 this.normalColour = normalColour;
57 this.hoveredColour = hoveredColour;
58 this.propagateHover = propagateHover;
59
60 Children = new Drawable[]
61 {
62 box = new Box
63 {
64 Colour = normalColour,
65 RelativeSizeAxes = Axes.Both
66 }
67 };
68 }
69
70 protected override bool OnHover(HoverEvent e)
71 {
72 box.Colour = hoveredColour;
73 return !propagateHover;
74 }
75
76 protected override void OnHoverLost(HoverLostEvent e)
77 {
78 box.Colour = normalColour;
79 }
80 }
81 }
82}