Skip to content

Commit c64179a

Browse files
committed
improve performance when accessing the non-scalar suffixes of a widget Style
1 parent ddf10a1 commit c64179a

File tree

2 files changed

+47
-12
lines changed

2 files changed

+47
-12
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
- Add `JUMPSTACK` kRISC instruction to support jump tables for switch case (thanks @CoderCatGG) [commit](https://github.com/KSP-KOS/KOS/commit/3089ecc2f6bf15ee3a6d3a8722ce1efc7e8415c4)
88
- Add `ALLHIDDENFIELDS`, `ALLHIDDENFIELDNAMES`, `HASHIDDENFIELD` and `GETHIDDENFIELD` to access fields of partmodules that are not visible in the UI (thanks @AntonKuzin) [commit](https://github.com/KSP-KOS/KOS/commit/c047c3210bf74fc529c7eb1703ad8110e6bc4abc)
99

10+
### Performance Improvements
11+
12+
- Accessing the non-scalar suffixes of a widget `Style` no longer creates new objects - they are shared for each call. This may be a breaking change if your script was relying on getting a distinct object each time.
13+
1014
### Bug Fixes
1115

1216
- Fixed numeric formatting patters (thanks @sisve) [commit](https://github.com/KSP-KOS/KOS/commit/5780b75ff90e238c441ab71d366391b051e8bd14)

src/kOS/Suffixed/Widget/WidgetStyle.cs

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,43 @@ RgbaColor TextColor
4242
}
4343
}
4444

45+
WidgetStyleRectOffset margin;
46+
WidgetStyleRectOffset padding;
47+
WidgetStyleRectOffset border;
48+
WidgetStyleRectOffset overflow;
49+
WidgetStyleState normal;
50+
WidgetStyleState focused;
51+
WidgetStyleState active;
52+
WidgetStyleState hover;
53+
WidgetStyleState onNormal;
54+
WidgetStyleState onFocused;
55+
WidgetStyleState onActive;
56+
WidgetStyleState onHover;
57+
58+
WidgetStyleRectOffset CreateWidgetStyleRectOffsetSuffix(RectOffset rectOffset, ref WidgetStyleRectOffset suffix)
59+
{
60+
if (suffix == null)
61+
{
62+
suffix = new WidgetStyleRectOffset(rectOffset);
63+
}
64+
return suffix;
65+
}
66+
67+
WidgetStyleState CreateWidgetStyleStateSuffix(GUIStyleState guiStyleState, ref WidgetStyleState suffix)
68+
{
69+
if (suffix == null)
70+
{
71+
suffix = new WidgetStyleState(guiStyleState);
72+
}
73+
return suffix;
74+
}
75+
4576
private void InitializeSuffixes()
4677
{
47-
AddSuffix("MARGIN", new Suffix<WidgetStyleRectOffset>(() => new WidgetStyleRectOffset(Writable.margin)));
48-
AddSuffix("PADDING", new Suffix<WidgetStyleRectOffset>(() => new WidgetStyleRectOffset(Writable.padding)));
49-
AddSuffix("BORDER", new Suffix<WidgetStyleRectOffset>(() => new WidgetStyleRectOffset(Writable.border)));
50-
AddSuffix("OVERFLOW", new Suffix<WidgetStyleRectOffset>(() => new WidgetStyleRectOffset(Writable.overflow)));
78+
AddSuffix("MARGIN", new Suffix<WidgetStyleRectOffset>(() => CreateWidgetStyleRectOffsetSuffix(Writable.margin, ref margin)));
79+
AddSuffix("PADDING", new Suffix<WidgetStyleRectOffset>(() => CreateWidgetStyleRectOffsetSuffix(Writable.padding, ref padding)));
80+
AddSuffix("BORDER", new Suffix<WidgetStyleRectOffset>(() => CreateWidgetStyleRectOffsetSuffix(Writable.border, ref border)));
81+
AddSuffix("OVERFLOW", new Suffix<WidgetStyleRectOffset>(() => CreateWidgetStyleRectOffsetSuffix(Writable.overflow, ref overflow)));
5182

5283
AddSuffix("WIDTH", new SetSuffix<ScalarValue>(() => ReadOnly.fixedWidth, value => Writable.fixedWidth = value));
5384
AddSuffix("HEIGHT", new SetSuffix<ScalarValue>(() => ReadOnly.fixedHeight, value => Writable.fixedHeight = value));
@@ -58,14 +89,14 @@ private void InitializeSuffixes()
5889
AddSuffix("BG", new SetSuffix<StringValue>(() => "", value => Writable.normal.background = Widget.GetTexture(value)));
5990
AddSuffix("TEXTCOLOR", new SetSuffix<RgbaColor>(() => TextColor, value => TextColor = value));
6091

61-
AddSuffix("NORMAL", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.normal)));
62-
AddSuffix("FOCUSED", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.focused)));
63-
AddSuffix("ACTIVE", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.active)));
64-
AddSuffix("HOVER", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.hover)));
65-
AddSuffix(new[] { "ON", "NORMAL_ON" }, new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.onNormal)));
66-
AddSuffix("FOCUSED_ON", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.onFocused)));
67-
AddSuffix("ACTIVE_ON", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.onActive)));
68-
AddSuffix("HOVER_ON", new Suffix<WidgetStyleState>(() => new WidgetStyleState(Writable.onHover)));
92+
AddSuffix("NORMAL", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.normal, ref normal)));
93+
AddSuffix("FOCUSED", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.focused, ref focused)));
94+
AddSuffix("ACTIVE", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.active, ref active)));
95+
AddSuffix("HOVER", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.hover, ref hover)));
96+
AddSuffix(new[] { "ON", "NORMAL_ON" }, new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.onNormal, ref onNormal)));
97+
AddSuffix("FOCUSED_ON", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.onFocused, ref onFocused)));
98+
AddSuffix("ACTIVE_ON", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.onActive, ref onActive)));
99+
AddSuffix("HOVER_ON", new Suffix<WidgetStyleState>(() => CreateWidgetStyleStateSuffix(Writable.onHover, ref onHover)));
69100

70101
AddSuffix("FONT", new SetSuffix<StringValue>(GetFont, SetFont));
71102
AddSuffix("FONTSIZE", new SetSuffix<ScalarIntValue>(() => ReadOnly.fontSize, value => Writable.fontSize = value));

0 commit comments

Comments
 (0)