Vital
Loading...
Searching...
No Matches
skin.h
Go to the documentation of this file.
1#pragma once
2
3#include "JuceHeader.h"
4
5#include "json/json.h"
6
7using json = nlohmann::json;
8
9class FullInterface;
10class SynthSection;
11
24class Skin {
25 public:
63
119
126 enum ColorId {
127 kInitialColor = 0x42345678,
139
146
149
157
163
174
182
184
191
199
204
206 };
207
208 static constexpr int kNumColors = kFinalColor - kInitialColor;
209
215 static bool shouldScaleValue(ValueId value_id);
216
222 Skin();
223
228 void setComponentColors(Component* component) const;
229
236 void setComponentColors(Component* component, SectionOverride section_override, bool top_level = false) const;
237
242 void setComponentValues(SynthSection* component) const;
243
250 void setComponentValues(SynthSection* component, SectionOverride section_override, bool top_level = false) const;
251
257 void setColor(ColorId color_id, const Colour& color) { colors_[color_id - kInitialColor] = color; }
258
264 Colour getColor(ColorId color_id) const { return colors_[color_id - kInitialColor]; }
265
272 Colour getColor(int section, ColorId color_id) const;
273
280 bool overridesColor(int section, ColorId color_id) const;
281
288 bool overridesValue(int section, ValueId value_id) const;
289
294 void copyValuesToLookAndFeel(LookAndFeel* look_and_feel) const;
295
301 void setValue(ValueId value_id, float value) { values_[value_id] = value; }
302
308 float getValue(ValueId value_id) const { return values_[value_id]; }
309
316 float getValue(int section, ValueId value_id) const;
317
324 void addOverrideColor(int section, ColorId color_id, Colour color);
325
331 void removeOverrideColor(int section, ColorId color_id);
332
339 void addOverrideValue(int section, ValueId value_id, float value);
340
346 void removeOverrideValue(int section, ValueId value_id);
347
353
358 String stateToString();
359
364 void saveToFile(File destination);
365
371 json updateJson(json data);
372
377 void jsonToState(json skin_var);
378
384 bool stringToState(String skin_string);
385
391 bool loadFromFile(File source);
392
396 void loadDefaultSkin();
397
401 void clearSkin();
402
403 protected:
406
407 std::map<ColorId, Colour> color_overrides_[kNumSectionOverrides];
408 std::map<ValueId, float> value_overrides_[kNumSectionOverrides];
409};
410
418class SkinDesigner : public DocumentWindow {
419 public:
425 SkinDesigner(Skin* skin, FullInterface* full_interface);
426
431
436 void closeButtonPressed() override {
437 delete this;
438 }
439
440 protected:
441 std::unique_ptr<Component> container_;
442};
The main GUI container for the entire synthesizer interface.
Definition full_interface.h:61
A DocumentWindow that allows interactive editing of the Skin.
Definition skin.h:418
std::unique_ptr< Component > container_
Container component hosting skin editing controls.
Definition skin.h:441
SkinDesigner(Skin *skin, FullInterface *full_interface)
Constructs a SkinDesigner window.
Definition skin.cpp:732
~SkinDesigner()
Destructor.
void closeButtonPressed() override
Handles the close button press event. Closes and deletes the window.
Definition skin.h:436
Manages the overall color and value theme (or "skin") of the user interface.
Definition skin.h:24
Skin()
Constructs a Skin with default or loaded settings.
Definition skin.cpp:176
bool stringToState(String skin_string)
Loads skin state from a JSON string.
Definition skin.cpp:424
bool overridesValue(int section, ValueId value_id) const
Checks if a given section overrides a specific value.
Definition skin.cpp:251
Colour colors_[kNumColors]
Array of global colors.
Definition skin.h:404
bool overridesColor(int section, ColorId color_id) const
Checks if a given section overrides a specific color.
Definition skin.cpp:244
json updateJson(json data)
Updates JSON data to a newer format or version if needed.
Definition skin.cpp:349
bool loadFromFile(File source)
Loads skin state from a file.
Definition skin.cpp:435
void addOverrideValue(int section, ValueId value_id, float value)
Adds a value override for a given section.
Definition skin.cpp:299
float getValue(ValueId value_id) const
Gets a global UI value.
Definition skin.h:308
static constexpr int kNumColors
Definition skin.h:208
void addOverrideColor(int section, ColorId color_id, Colour color)
Adds a color override for a given section.
Definition skin.cpp:287
void jsonToState(json skin_var)
Loads skin state from JSON data.
Definition skin.cpp:375
void setValue(ValueId value_id, float value)
Sets a global UI value.
Definition skin.h:301
json stateToJson()
Converts the current skin state to JSON.
Definition skin.cpp:311
void removeOverrideColor(int section, ColorId color_id)
Removes a color override from a section.
Definition skin.cpp:294
ValueId
Identifiers for various UI scaling/spacing values and configuration constants.
Definition skin.h:70
@ kRotaryOptionYOffset
Definition skin.h:78
@ kKnobModMeterArcThickness
Definition skin.h:96
@ kWidgetMargin
Definition skin.h:103
@ kWidgetLineWidth
Definition skin.h:105
@ kLabelBackgroundHeight
Definition skin.h:73
@ kKnobBodySize
Definition skin.h:91
@ kButtonFontSize
Definition skin.h:88
@ kRotaryOptionXOffset
Definition skin.h:77
@ kKnobModAmountArcSize
Definition skin.h:93
@ kNumAllValueIds
Definition skin.h:117
@ kLabelHeight
Definition skin.h:72
@ kTextComponentFontSize
Definition skin.h:86
@ kBodyRounding
Definition skin.h:71
@ kWavetableVerticalAngle
Definition skin.h:111
@ kKnobArcSize
Definition skin.h:89
@ kLabelOffset
Definition skin.h:75
@ kTitleWidth
Definition skin.h:80
@ kKnobModAmountArcThickness
Definition skin.h:94
@ kTextComponentOffset
Definition skin.h:85
@ kWidgetFillCenter
Definition skin.h:107
@ kWidgetFillFade
Definition skin.h:108
@ kKnobSectionHeight
Definition skin.h:98
@ kModulationButtonWidth
Definition skin.h:101
@ kWavetableYOffset
Definition skin.h:114
@ kKnobOffset
Definition skin.h:97
@ kPadding
Definition skin.h:81
@ kModulationFontSize
Definition skin.h:102
@ kLargePadding
Definition skin.h:82
@ kWavetableHorizontalAngle
Definition skin.h:110
@ kTextButtonHeight
Definition skin.h:87
@ kWavetableWaveHeight
Definition skin.h:113
@ kTextComponentLabelOffset
Definition skin.h:76
@ kKnobHandleLength
Definition skin.h:92
@ kWidgetLineBoost
Definition skin.h:106
@ kLabelBackgroundRounding
Definition skin.h:74
@ kWidgetFillBoost
Definition skin.h:109
@ kKnobModMeterArcSize
Definition skin.h:95
@ kKnobShadowOffset
Definition skin.h:100
@ kFrequencyDisplay
Definition skin.h:116
@ kSliderWidth
Definition skin.h:83
@ kWidgetRoundedCorner
Definition skin.h:104
@ kNumSkinValueIds
Definition skin.h:115
@ kTextComponentHeight
Definition skin.h:84
@ kKnobArcThickness
Definition skin.h:90
@ kWavetableDrawWidth
Definition skin.h:112
@ kKnobShadowWidth
Definition skin.h:99
@ kRotaryOptionWidth
Definition skin.h:79
std::map< ValueId, float > value_overrides_[kNumSectionOverrides]
Per-section value overrides.
Definition skin.h:408
ColorId
Identifiers for all colors used in the UI.
Definition skin.h:126
@ kUiButtonPressed
Definition skin.h:195
@ kUiButtonText
Definition skin.h:193
@ kModulationMeterRight
Definition skin.h:177
@ kIconButtonOff
Definition skin.h:185
@ kModulationMeter
Definition skin.h:175
@ kRotaryArcUnselectedDisabled
Definition skin.h:153
@ kIconButtonOn
Definition skin.h:188
@ kLinearSliderThumb
Definition skin.h:161
@ kRotaryArcDisabled
Definition skin.h:151
@ kWidgetAccent1
Definition skin.h:171
@ kUiActionButton
Definition skin.h:196
@ kRotaryBody
Definition skin.h:155
@ kPowerButtonOff
Definition skin.h:138
@ kFinalColor
Definition skin.h:205
@ kUiButtonHover
Definition skin.h:194
@ kPopupBorder
Definition skin.h:145
@ kTextEditorBackground
Definition skin.h:200
@ kPowerButtonOn
Definition skin.h:137
@ kModulationButtonSelected
Definition skin.h:179
@ kModulationMeterLeft
Definition skin.h:176
@ kInitialColor
Definition skin.h:127
@ kBackground
Definition skin.h:128
@ kBorder
Definition skin.h:134
@ kWidgetPrimaryDisabled
Definition skin.h:167
@ kWidgetPrimary2
Definition skin.h:166
@ kRotaryBodyBorder
Definition skin.h:156
@ kWidgetPrimary1
Definition skin.h:165
@ kIconButtonOffHover
Definition skin.h:186
@ kWidgetBackground
Definition skin.h:173
@ kModulationButtonDragging
Definition skin.h:180
@ kBodyText
Definition skin.h:133
@ kTextEditorBorder
Definition skin.h:201
@ kWidgetSecondary1
Definition skin.h:168
@ kLightenScreen
Definition skin.h:141
@ kModulationButtonUnselected
Definition skin.h:181
@ kRotaryArcUnselected
Definition skin.h:152
@ kLinearSliderDisabled
Definition skin.h:159
@ kUiActionButtonHover
Definition skin.h:197
@ kPopupSelectorBackground
Definition skin.h:143
@ kUiActionButtonPressed
Definition skin.h:198
@ kRotaryArc
Definition skin.h:150
@ kWidgetSecondaryDisabled
Definition skin.h:170
@ kUiButton
Definition skin.h:192
@ kOverlayScreen
Definition skin.h:140
@ kIconButtonOffPressed
Definition skin.h:187
@ kModulationMeterControl
Definition skin.h:178
@ kRotaryHand
Definition skin.h:154
@ kLinearSliderThumbDisabled
Definition skin.h:162
@ kIconButtonOnPressed
Definition skin.h:190
@ kWidgetCenterLine
Definition skin.h:164
@ kTextComponentBackground
Definition skin.h:147
@ kBodyHeading
Definition skin.h:130
@ kShadow
Definition skin.h:142
@ kPresetText
Definition skin.h:132
@ kTextEditorSelection
Definition skin.h:203
@ kLinearSlider
Definition skin.h:158
@ kLinearSliderUnselected
Definition skin.h:160
@ kHeadingText
Definition skin.h:131
@ kTextComponentText
Definition skin.h:148
@ kLabelConnection
Definition skin.h:136
@ kIconButtonOnHover
Definition skin.h:189
@ kWidgetSecondary2
Definition skin.h:169
@ kLabelBackground
Definition skin.h:135
@ kIconSelectorIcon
Definition skin.h:183
@ kTextEditorCaret
Definition skin.h:202
@ kWidgetAccent2
Definition skin.h:172
@ kPopupBackground
Definition skin.h:144
@ kBody
Definition skin.h:129
void removeOverrideValue(int section, ValueId value_id)
Removes a value override from a section.
Definition skin.cpp:306
Colour getColor(ColorId color_id) const
Retrieves a globally defined color.
Definition skin.h:264
static bool shouldScaleValue(ValueId value_id)
Checks if a certain ValueId should be scaled by the display ratio.
Definition skin.cpp:169
void setComponentValues(SynthSection *component) const
Applies all default values to a SynthSection.
Definition skin.cpp:228
void setColor(ColorId color_id, const Colour &color)
Sets a color for a global ColorId.
Definition skin.h:257
SectionOverride
Identifiers for different UI sections that can have color or value overrides.
Definition skin.h:30
@ kCompressor
Definition skin.h:47
@ kNone
Definition skin.h:31
@ kMacro
Definition skin.h:43
@ kVoice
Definition skin.h:42
@ kSub
Definition skin.h:37
@ kNumSectionOverrides
Definition skin.h:61
@ kKeyboard
Definition skin.h:44
@ kHeader
Definition skin.h:33
@ kWavetableEditor
Definition skin.h:60
@ kAllEffects
Definition skin.h:45
@ kReverb
Definition skin.h:54
@ kModulationMatrix
Definition skin.h:56
@ kRandomLfo
Definition skin.h:41
@ kChorus
Definition skin.h:46
@ kEnvelope
Definition skin.h:39
@ kDelay
Definition skin.h:48
@ kOverlay
Definition skin.h:34
@ kFxFilter
Definition skin.h:51
@ kAdvanced
Definition skin.h:59
@ kEqualizer
Definition skin.h:50
@ kOscillator
Definition skin.h:35
@ kSample
Definition skin.h:36
@ kModulationDragDrop
Definition skin.h:55
@ kLogo
Definition skin.h:32
@ kPresetBrowser
Definition skin.h:57
@ kPhaser
Definition skin.h:53
@ kFlanger
Definition skin.h:52
@ kPopupBrowser
Definition skin.h:58
@ kLfo
Definition skin.h:40
@ kFilter
Definition skin.h:38
@ kDistortion
Definition skin.h:49
String stateToString()
Converts the current skin state to a string (JSON representation).
Definition skin.cpp:341
void setComponentColors(Component *component) const
Applies all component colors to a given component.
Definition skin.cpp:207
void loadDefaultSkin()
Loads a default built-in skin.
Definition skin.cpp:195
void copyValuesToLookAndFeel(LookAndFeel *look_and_feel) const
Copies global skin values into a LookAndFeel instance.
Definition skin.cpp:258
void saveToFile(File destination)
Saves the current skin to a file.
Definition skin.cpp:345
std::map< ColorId, Colour > color_overrides_[kNumSectionOverrides]
Per-section color overrides.
Definition skin.h:407
void clearSkin()
Clears all overrides, returning to a clean default state.
Definition skin.cpp:188
float values_[kNumSkinValueIds]
Array of global float values.
Definition skin.h:405
Base class for all synthesizer sections, providing UI layout, painting, and interaction logic.
Definition synth_section.h:193
nlohmann::json json
Definition line_generator.h:7