Created a base UI style system. Implemented the Flight Menu to use the stock KSP style.
[VesselSimulator.git] / KerbalEngineer / StyleManager.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// 
//     Kerbal Engineer Redux
// 
//     Copyright (C) 2016 CYBUTEK
// 
//     This program is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//     You should have received a copy of the GNU General Public License
//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
//  
 
namespace KerbalEngineer
{
    using Unity.UI;
    using UnityEngine;
    using UnityEngine.UI;
 
    public static class StyleManager
    {
        /// <summary>
        ///     Processes all of the theme applicators on the supplied game object.
        /// </summary>
        public static void Process(GameObject gameObject)
        {
            if (gameObject == null)
            {
                return;
            }
 
            StyleApplicator[] applicators = gameObject.GetComponentsInChildren<StyleApplicator>();
 
            if (applicators != null)
            {
                for (int i = 0; i < applicators.Length; i++)
                {
                    Process(applicators[i]);
                }
            }
        }
 
        /// <summary>
        ///     Gets a new ThemeTextStyle created from KSP UIStyle and UIStyleState objects.
        /// </summary>
        private static TextStyle GetTextStyle(UIStyle style, UIStyleState styleState)
        {
            TextStyle textStyle = new TextStyle();
 
            if (style != null)
            {
                textStyle.Font = style.font;
                textStyle.Style = style.fontStyle;
                textStyle.Size = style.fontSize;
            }
 
            if (styleState != null)
            {
                textStyle.Colour = styleState.textColor;
            }
 
            return textStyle;
        }
 
        /// <summary>
        ///     Processes a theme on the supplied applicator.
        /// </summary>
        private static void Process(StyleApplicator applicator)
        {
            if (applicator == null)
            {
                return;
            }
 
            // get the default skin
            UISkinDef skin = UISkinManager.defaultSkin;
            if (skin == null)
            {
                return;
            }
 
            // apply selected theme type
            switch (applicator.ElementType)
            {
                case StyleApplicator.ElementTypes.Window:
                    applicator.SetImage(skin.window.normal.background, Image.Type.Sliced);
                    break;
 
                case StyleApplicator.ElementTypes.Box:
                    applicator.SetImage(skin.box.normal.background, Image.Type.Sliced);
                    break;
 
                case StyleApplicator.ElementTypes.Button:
                    applicator.SetSelectable(null, skin.button.normal.background,
                        skin.button.highlight.background,
                        skin.button.active.background,
                        skin.button.disabled.background);
                    break;
 
                case StyleApplicator.ElementTypes.ButtonToggle:
                    applicator.SetToggle(null, skin.button.normal.background,
                        skin.button.highlight.background,
                        skin.button.active.background,
                        skin.button.disabled.background);
                    break;
            }
        }
    }
}