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.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}