Skip to content

Commit 88f65b9

Browse files
committed
Make ColorUtils methods to extensions
I don't know why I didn't do this right away.
1 parent 113c182 commit 88f65b9

5 files changed

Lines changed: 85 additions & 81 deletions

File tree

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System.Drawing;
2+
using SDL3;
3+
using System;
4+
5+
namespace Pulsar4X.Client
6+
{
7+
public static class ColorExtensions
8+
{
9+
public static byte FloatToByte(float f) =>
10+
(byte)MathF.Floor(f >= 1 ? 255 : f * 256);
11+
12+
public static float ByteToFloat(byte b) =>
13+
(1.0f / 255) * b;
14+
15+
// ImVector4 convert
16+
public static Color ToColor(this System.Numerics.Vector4 vec)
17+
{
18+
return Color.FromArgb(
19+
ColorExtensions.FloatToByte(vec.W),
20+
ColorExtensions.FloatToByte(vec.X),
21+
ColorExtensions.FloatToByte(vec.Y),
22+
ColorExtensions.FloatToByte(vec.Z));
23+
}
24+
25+
public static SDL.Color ToSDLColor(this System.Numerics.Vector4 vec)
26+
{
27+
return new () {
28+
R = ColorExtensions.FloatToByte(vec.X),
29+
G = ColorExtensions.FloatToByte(vec.Y),
30+
B = ColorExtensions.FloatToByte(vec.Z),
31+
A = ColorExtensions.FloatToByte(vec.W)
32+
};
33+
}
34+
35+
// Color convert
36+
public static SDL.Color ToSDLColor(this Color color)
37+
{
38+
return new () {
39+
R = color.R,
40+
G = color.G,
41+
B = color.B,
42+
A = color.A
43+
};
44+
}
45+
46+
public static System.Numerics.Vector4 ToImVector4(this Color color)
47+
{
48+
return new (
49+
ColorExtensions.ByteToFloat(color.R),
50+
ColorExtensions.ByteToFloat(color.G),
51+
ColorExtensions.ByteToFloat(color.B),
52+
ColorExtensions.ByteToFloat(color.A));
53+
}
54+
55+
// SDL.Color convert
56+
public static Color ToColor(this SDL.Color color)
57+
{
58+
return Color.FromArgb(
59+
color.A,
60+
color.R,
61+
color.G,
62+
color.B);
63+
}
64+
65+
public static System.Numerics.Vector4 ToImVector4(this SDL.Color color)
66+
{
67+
return new (
68+
ColorExtensions.ByteToFloat(color.R),
69+
ColorExtensions.ByteToFloat(color.G),
70+
ColorExtensions.ByteToFloat(color.B),
71+
ColorExtensions.ByteToFloat(color.A));
72+
}
73+
}
74+
}

Pulsar4X/Pulsar4X.Client/Interface/Displays/EntityDisplay.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@ public static void DisplaySummary(this Entity entity, EntityState entityState, G
9292
if(entity.TryGetDataBlob<CargoStorageDB>(out var storage))
9393
{
9494
var size = ImGui.GetContentRegionAvail();
95-
ImGui.PushStyleColor(ImGuiCol.Button, ColorUtils.ColorToImVector4(Styles.Theme.Button));
96-
ImGui.PushStyleColor(ImGuiCol.ButtonHovered, ColorUtils.ColorToImVector4(Styles.Theme.ButtonHovered));
97-
ImGui.PushStyleColor(ImGuiCol.ButtonActive, ColorUtils.ColorToImVector4(Styles.Theme.ButtonActive));
95+
ImGui.PushStyleColor(ImGuiCol.Button, Styles.Theme.Button.ToImVector4());
96+
ImGui.PushStyleColor(ImGuiCol.ButtonHovered, Styles.Theme.ButtonHovered.ToImVector4());
97+
ImGui.PushStyleColor(ImGuiCol.ButtonActive, Styles.Theme.ButtonActive.ToImVector4());
9898
if(ImGui.Button("Initiate Transfer", new Vector2(size.X - 8, 18)))
9999
{
100100
CreateTransferWindow.GetInstance().SetLeft(entity);

Pulsar4X/Pulsar4X.Client/Interface/Themes/FuturisticTheme.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,18 @@ public void Apply()
4141
colors[(int)ImGuiCol.BorderShadow] = new Vector4(0.00f, 0.00f, 0.00f, 0.00f); // No shadow
4242

4343
// Text
44-
colors[(int)ImGuiCol.Text] = ColorUtils.ColorToImVector4(Text);
45-
colors[(int)ImGuiCol.TextDisabled] = ColorUtils.ColorToImVector4(TextDisabled);
44+
colors[(int)ImGuiCol.Text] = Text.ToImVector4();
45+
colors[(int)ImGuiCol.TextDisabled] = TextDisabled.ToImVector4();
4646

4747
// Headers and titlebars
4848
colors[(int)ImGuiCol.TitleBg] = new Vector4(0.04f, 0.04f, 0.08f, 1.00f); // Dark background
4949
colors[(int)ImGuiCol.TitleBgActive] = new Vector4(0.16f, 0.29f, 0.48f, 1.00f); // Glowing blue when active
5050
colors[(int)ImGuiCol.TitleBgCollapsed] = new Vector4(0.00f, 0.00f, 0.00f, 0.51f);
5151

5252
// Buttons and interactive elements
53-
colors[(int)ImGuiCol.Button] = ColorUtils.ColorToImVector4(Button);
54-
colors[(int)ImGuiCol.ButtonHovered] = ColorUtils.ColorToImVector4(ButtonHovered);
55-
colors[(int)ImGuiCol.ButtonActive] = ColorUtils.ColorToImVector4(ButtonActive);
53+
colors[(int)ImGuiCol.Button] = Button.ToImVector4();
54+
colors[(int)ImGuiCol.ButtonHovered] = ButtonHovered.ToImVector4();
55+
colors[(int)ImGuiCol.ButtonActive] = ButtonActive.ToImVector4();
5656

5757
// Frame backgrounds (for checkbox, radio button, plot, slider, text input)
5858
colors[(int)ImGuiCol.FrameBg] = new Vector4(0.15f, 0.15f, 0.22f, 0.54f); // Subtle contrast

Pulsar4X/Pulsar4X.Client/Rendering/Labels/EntityLabel.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,10 @@ public EntityLabel(Entity entity)
128128
private void SetColor()
129129
{
130130
_color = (_entity.FactionOwnerID == Game.NeutralFactionId) ?
131-
ColorUtils.ImVector4ToSDLColor(Styles.NeutralColor) :
131+
Styles.NeutralColor.ToSDLColor() :
132132
(_state != null && _entity.FactionOwnerID != _state.Faction?.Id) ?
133-
ColorUtils.ImVector4ToSDLColor(Styles.BadColor) :
134-
ColorUtils.ColorToSDLColor(Styles.Theme.Text);
133+
Styles.BadColor.ToSDLColor() :
134+
Styles.Theme.Text.ToSDLColor();
135135
}
136136

137137
protected GlobalUIState? _state = null;

Pulsar4X/Pulsar4X.Client/Utils.cs

Lines changed: 0 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -207,74 +207,4 @@ internal static string EntityName(Entity entity, int? faction = null)
207207
foreach (var j in SDL.GetFullscreenDisplayModes(i, out _))
208208
yield return j;
209209
}
210-
211-
}
212-
213-
// extension methods would probably make this a bit neater
214-
public static class ColorUtils
215-
{
216-
public static byte FloatToByte(float f) =>
217-
(byte)MathF.Floor(f >= 1 ? 255 : f * 256);
218-
219-
public static float ByteToFloat(byte b) =>
220-
(1.0f / 255) * b;
221-
222-
// ImVector4 convert
223-
public static Color ImVector4ToColor(System.Numerics.Vector4 vec)
224-
{
225-
return Color.FromArgb(
226-
ColorUtils.FloatToByte(vec.W),
227-
ColorUtils.FloatToByte(vec.X),
228-
ColorUtils.FloatToByte(vec.Y),
229-
ColorUtils.FloatToByte(vec.Z));
230-
}
231-
232-
public static SDL.Color ImVector4ToSDLColor(System.Numerics.Vector4 vec)
233-
{
234-
return new () {
235-
R = ColorUtils.FloatToByte(vec.X),
236-
G = ColorUtils.FloatToByte(vec.Y),
237-
B = ColorUtils.FloatToByte(vec.Z),
238-
A = ColorUtils.FloatToByte(vec.W)
239-
};
240-
}
241-
242-
// Color convert
243-
public static SDL.Color ColorToSDLColor(Color color)
244-
{
245-
return new () {
246-
R = color.R,
247-
G = color.G,
248-
B = color.B,
249-
A = color.A
250-
};
251-
}
252-
253-
public static System.Numerics.Vector4 ColorToImVector4(Color color)
254-
{
255-
return new (
256-
ColorUtils.ByteToFloat(color.R),
257-
ColorUtils.ByteToFloat(color.G),
258-
ColorUtils.ByteToFloat(color.B),
259-
ColorUtils.ByteToFloat(color.A));
260-
}
261-
262-
// SDL.Color convert
263-
public static Color SDLColorToColor(SDL.Color color)
264-
{
265-
return Color.FromArgb(
266-
color.A,
267-
color.R,
268-
color.G,
269-
color.B);
270-
}
271-
272-
public static System.Numerics.Vector4 SDLColorToImVector4(SDL.Color color)
273-
{
274-
return new (
275-
ColorUtils.ByteToFloat(color.R),
276-
ColorUtils.ByteToFloat(color.G),
277-
ColorUtils.ByteToFloat(color.B),
278-
ColorUtils.ByteToFloat(color.A));
279-
}
280210
}

0 commit comments

Comments
 (0)