A game framework written with osu! in mind.
at master 2.6 kB view raw
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}