A game framework written with osu! in mind.
at master 73 lines 2.3 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.Sprites; 5using osuTK.Graphics; 6 7namespace osu.Framework.Graphics.UserInterface 8{ 9 public class BasicTabControl<T> : TabControl<T> 10 { 11 protected override Dropdown<T> CreateDropdown() 12 => new BasicTabControlDropdown(); 13 14 protected override TabItem<T> CreateTabItem(T value) 15 => new BasicTabItem(value); 16 17 public class BasicTabItem : TabItem<T> 18 { 19 private readonly SpriteText text; 20 21 public BasicTabItem(T value) 22 : base(value) 23 { 24 AutoSizeAxes = Axes.Both; 25 26 Add(text = new SpriteText 27 { 28 Margin = new MarginPadding(2), 29 Text = value.ToString(), 30 Font = FrameworkFont.Regular.With(size: 18), 31 }); 32 } 33 34 protected override void OnActivated() 35 => text.Colour = Color4.MediumPurple; 36 37 protected override void OnDeactivated() 38 => text.Colour = Color4.White; 39 } 40 41 public class BasicTabControlDropdown : BasicDropdown<T> 42 { 43 public BasicTabControlDropdown() 44 { 45 Menu.Anchor = Anchor.TopRight; 46 Menu.Origin = Anchor.TopRight; 47 48 Header.Anchor = Anchor.TopRight; 49 Header.Origin = Anchor.TopRight; 50 } 51 52 protected override DropdownHeader CreateHeader() => new BasicTabControlDropdownHeader(); 53 54 public class BasicTabControlDropdownHeader : BasicDropdownHeader 55 { 56 public BasicTabControlDropdownHeader() 57 { 58 RelativeSizeAxes = Axes.None; 59 AutoSizeAxes = Axes.X; 60 61 Foreground.RelativeSizeAxes = Axes.None; 62 Foreground.AutoSizeAxes = Axes.Both; 63 64 Foreground.Child = new SpriteText 65 { 66 Text = "…", 67 Font = FrameworkFont.Regular 68 }; 69 } 70 } 71 } 72 } 73}