1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 /*
4 Rosegarden
5 A MIDI and audio sequencer and musical notation editor.
6 Copyright 2000-2021 the Rosegarden development team.
7
8 Other copyrights also apply to some parts of this work. Please
9 see the AUTHORS file and individual file headers for details.
10
11 This program is free software; you can redistribute it and/or
12 modify it under the terms of the GNU General Public License as
13 published by the Free Software Foundation; either version 2 of the
14 License, or (at your option) any later version. See the file
15 COPYING included with this distribution for more information.
16 */
17
18
19 #include "GUIPalette.h"
20
21 #include "misc/ConfigGroups.h"
22
23 #include <QApplication>
24 #include <QSettings>
25 #include <QColor>
26
27
28 namespace Rosegarden
29 {
30
31
32 const QColor GUIPalette::SelectionColor = QColor(0, 54, 232);
33 const QColor GUIPalette::PreviewColor = Qt::darkGreen;
34 const QColor GUIPalette::OutRangeColor = Qt::red;
35
36
getColour(const char * const colourName)37 QColor GUIPalette::getColour(const char* const colourName)
38 {
39 QSettings config; // should probably become a member var for performance reasons
40 config.beginGroup(ColoursConfigGroup);
41
42 // First determine the default colour (see the GUIPalette constructor)
43 QColor defaultColour = getInstance()->m_defaultsMap[colourName];
44
45 // Then read the user configuration, and if it doesn't have any setting
46 // then use the above default colour as fallback.
47 QColor color = config.value(colourName, defaultColour).value<QColor>();
48
49 config.endGroup();
50 return color;
51 }
52
GUIPalette()53 GUIPalette::GUIPalette()
54 {
55 m_defaultsMap[ActiveRecordTrack] = QColor(Qt::red);
56
57 m_defaultsMap[SegmentCanvas] = QColor(230, 230, 230);
58 m_defaultsMap[SegmentBorder] = QColor(Qt::black);
59
60 // 1.0 colors
61 // m_defaultsMap[RecordingInternalSegmentBlock] = QColor(255, 182, 193);
62 // m_defaultsMap[RecordingAudioSegmentBlock] = QColor(182, 222, 255);
63
64 // MIDI recording preview (pale yellow)
65 m_defaultsMap[RecordingInternalSegmentBlock] = QColor(255, 234, 182);
66
67 // audio recording preview (pale red)
68 m_defaultsMap[RecordingAudioSegmentBlock] = QColor(255, 182, 193);
69
70 m_defaultsMap[RecordingSegmentBorder] = QColor(Qt::black);
71
72 m_defaultsMap[RepeatSegmentBorder] = QColor(130, 133, 170);
73
74 m_defaultsMap[SegmentAudioPreview] = QColor(39, 71, 22);
75 m_defaultsMap[SegmentInternalPreview] = QColor(Qt::white);
76 m_defaultsMap[SegmentLabel] = QColor(Qt::black);
77 m_defaultsMap[SegmentSplitLine] = QColor(Qt::black);
78
79 m_defaultsMap[MatrixElementBorder] = QColor(Qt::black);
80 m_defaultsMap[MatrixElementLightBorder] = QColor(90, 90, 90);
81 m_defaultsMap[MatrixElementBlock] = QColor(98, 128, 232);
82 m_defaultsMap[MatrixOverlapBlock] = QColor(Qt::black);
83 m_defaultsMap[MatrixHorizontalLine] = QColor(200, 200, 200);
84 m_defaultsMap[MatrixPitchHighlight] = QColor(205, 205, 205);
85 m_defaultsMap[MatrixTonicHighlight] = QColor(160, 160, 160);
86
87 m_defaultsMap[LoopRulerBackground] = QColor(120, 120, 120);
88 m_defaultsMap[LoopRulerForeground] = QColor(Qt::white);
89 m_defaultsMap[LoopHighlight] = QColor(Qt::white);
90
91 m_defaultsMap[RulerForeground] = Qt::black;
92 m_defaultsMap[RulerBackground] = QColor(0xEE, 0xEE, 0xEE);
93
94 m_defaultsMap[TempoBase] = QColor(197, 211, 125);
95
96 //m_defaultsMap[TextRulerBackground] = QColor(60, 205, 230, QColor::Hsv);
97 // m_defaultsMap[TextRulerBackground] = QColor(120, 90, 238, QColor::Hsv);
98 // m_defaultsMap[TextRulerBackground] = QColor(210, 220, 140);
99 m_defaultsMap[TextRulerBackground] = QColor(226, 232, 187);
100 m_defaultsMap[TextRulerForeground] = QColor(Qt::white);
101
102 m_defaultsMap[ChordNameRulerBackground] = QColor(0xEE, 0xEE, 0xEE);
103 m_defaultsMap[ChordNameRulerForeground] = QColor(Qt::black);
104
105 m_defaultsMap[RawNoteRulerBackground] = QColor(240, 240, 240);
106 m_defaultsMap[RawNoteRulerForeground] = QColor(Qt::black);
107
108 m_defaultsMap[LevelMeterGreen] = QColor(0, 200, 0);
109 m_defaultsMap[LevelMeterOrange] = QColor(255, 165, 0);
110 m_defaultsMap[LevelMeterRed] = QColor(200, 0, 0);
111
112 // m_defaultsMap[LevelMeterSolidGreen] = QColor(0, 140, 0);
113 m_defaultsMap[LevelMeterSolidGreen] = QColor(84, 177, 248); // blue!
114 // m_defaultsMap[LevelMeterSolidOrange] = QColor(220, 120, 0);
115 m_defaultsMap[LevelMeterSolidOrange] = QColor(255, 225, 0);
116 // m_defaultsMap[LevelMeterSolidRed] = QColor(255, 50, 50);
117 m_defaultsMap[LevelMeterSolidRed] = QColor(255, 0, 0);
118
119 m_defaultsMap[BarLine] = QColor(Qt::black);
120 m_defaultsMap[MatrixBarLine] = QColor(60, 60, 60);
121 m_defaultsMap[BarLineIncorrect] = QColor(211, 0, 31);
122 m_defaultsMap[BeatLine] = QColor(200, 200, 200);
123 m_defaultsMap[SubBeatLine] = QColor(212, 212, 212);
124 m_defaultsMap[StaffConnectingLine] = QColor(192, 192, 192);
125 m_defaultsMap[StaffConnectingTerminatingLine] = QColor(128, 128, 128);
126
127 m_defaultsMap[Pointer] = QColor(Qt::darkBlue);
128 m_defaultsMap[PointerRuler] = QColor(100, 100, 100);
129
130 m_defaultsMap[InsertCursor] = QColor(160, 104, 186);
131 m_defaultsMap[InsertCursorRuler] = QColor(160, 136, 170);
132
133 m_defaultsMap[TrackDivider] = QColor(145, 145, 145);
134 //m_defaultsMap[MovementGuide] = QColor(172, 230, 139);
135 m_defaultsMap[MovementGuide] = QColor(62, 161, 194);
136 //m_defaultsMap[MovementGuide] = QColor(255, 189, 89);
137 m_defaultsMap[SelectionRectangle] = QColor(103, 128, 211);
138 m_defaultsMap[SelectedElement] = SelectionColor;
139 m_defaultsMap[ControlItem] = QColor(210, 202, 138);
140
141 //@@@ I decided to shut up these compiler warnings about unused variables.
142 // They look like simple cruft to me.
143
144 // const int SelectedElementHue = 225;
145 // const int SelectedElementMinValue = 220;
146 // const int HighlightedElementHue = 25;
147 // const int HighlightedElementMinValue = 220;
148 // const int QuantizedNoteHue = 69;
149 // const int QuantizedNoteMinValue = 140;
150 // const int TriggerNoteHue = 4;
151 // const int TriggerNoteMinValue = 140;
152 // const int OutRangeNoteHue = 0;
153 // const int OutRangeNoteMinValue = 200;
154
155 m_defaultsMap[TextAnnotationBackground] = QColor(255, 255, 180);
156
157 m_defaultsMap[TextLilyPondDirectiveBackground] = QColor(95, 157, 87);
158
159 m_defaultsMap[AudioCountdownBackground] = QColor(Qt::darkGray);
160 m_defaultsMap[AudioCountdownForeground] = QColor(Qt::red);
161
162 // m_defaultsMap[RotaryFloatBackground] = QColor(Qt::cyan);
163 m_defaultsMap[RotaryFloatBackground] = QColor(182, 222, 255);
164 m_defaultsMap[RotaryFloatForeground] = QColor(Qt::black);
165
166 m_defaultsMap[RotaryPastelBlue] = QColor(205, 212, 255);
167 m_defaultsMap[RotaryPastelRed] = QColor(255, 168, 169);
168 m_defaultsMap[RotaryPastelGreen] = QColor(231, 255, 223);
169 m_defaultsMap[RotaryPastelOrange] = QColor(255, 233, 208);
170 m_defaultsMap[RotaryPastelYellow] = QColor(249, 255, 208);
171
172 m_defaultsMap[MatrixKeyboardFocus] = QColor(224, 112, 8);
173
174 // m_defaultsMap[RotaryPlugin] = QColor(185, 255, 248);
175 m_defaultsMap[RotaryPlugin] = QColor(185, 200, 248);
176 // m_defaultsMap[RotaryPlugin] = QColor(185, 185, 185);
177
178 m_defaultsMap[RotaryMeter] = QColor(255, 100, 0);
179
180 m_defaultsMap[MarkerBackground] = QColor(185, 255, 248);
181
182 m_defaultsMap[QuickMarker] = QColor(Qt::red);
183
184 // m_defaultsMap[MuteTrackLED] = QColor(218, 190, 230, QColor::Hsv);
185 m_defaultsMap[MuteTrackLED] = QColor::fromHsv(211, 194, 238);
186 m_defaultsMap[SoloTrackLED] = QColor::fromHsv(120, 250, 144);
187 m_defaultsMap[RecordMIDITrackLED] = QColor::fromHsv(45, 250, 225);
188 m_defaultsMap[RecordAudioTrackLED] = QColor::fromHsv(0, 250, 225);
189 m_defaultsMap[RecordSoftSynthTrackLED] = QColor(255, 120, 0);
190
191 m_defaultsMap[PlaybackFaderOutline] = QColor::fromHsv(211, 194, 238);
192 m_defaultsMap[RecordFaderOutline] = QColor::fromHsv(0, 250, 225);
193
194 m_defaultsMap[PannerOverlay] = QColor::fromHsv(211, 194, 238);
195
196 m_defaultsMap[ThornGroupBoxBackground] = QColor(0x40, 0x40, 0x40);
197 }
198
getInstance()199 GUIPalette* GUIPalette::getInstance()
200 {
201 if (!m_instance) m_instance = new GUIPalette();
202 return m_instance;
203 }
204
205
206
207
208 const char* const GUIPalette::ActiveRecordTrack = "activerecordtrack";
209
210
211 const char* const GUIPalette::SegmentCanvas = "segmentcanvas";
212 const char* const GUIPalette::SegmentBorder = "segmentborder";
213 const char* const GUIPalette::RecordingInternalSegmentBlock = "recordinginternalsegmentblock";
214 const char* const GUIPalette::RecordingAudioSegmentBlock = "recordingaudiosegmentblock";
215 const char* const GUIPalette::RecordingSegmentBorder = "recordingsegmentborder";
216
217 const char* const GUIPalette::RepeatSegmentBorder = "repeatsegmentborder";
218
219 const char* const GUIPalette::SegmentAudioPreview = "segmentaudiopreview";
220 const char* const GUIPalette::SegmentInternalPreview = "segmentinternalpreview";
221 const char* const GUIPalette::SegmentLabel = "segmentlabel";
222 const char* const GUIPalette::SegmentSplitLine = "segmentsplitline";
223
224 const char* const GUIPalette::MatrixElementBorder = "matrixelementborder";
225 const char* const GUIPalette::MatrixElementLightBorder = "matrixelementlightborder";
226 const char* const GUIPalette::MatrixElementBlock = "matrixelementblock";
227 const char* const GUIPalette::MatrixOverlapBlock = "matrixoverlapblock";
228 const char* const GUIPalette::MatrixHorizontalLine = "matrixhorizontalline";
229 const char* const GUIPalette::MatrixPitchHighlight = "matrixpitchhighlight";
230 const char* const GUIPalette::MatrixTonicHighlight = "matrixtonichighlight";
231
232 const char* const GUIPalette::LoopRulerBackground = "looprulerbackground";
233 const char* const GUIPalette::LoopRulerForeground = "looprulerforeground";
234 const char* const GUIPalette::LoopHighlight = "loophighlight";
235
236 const char* const GUIPalette::RulerForeground = "rulerforeground";
237 const char* const GUIPalette::RulerBackground = "rulerbackground";
238
239 const char* const GUIPalette::TempoBase = "tempobase";
240
241 const char* const GUIPalette::TextRulerBackground = "textrulerbackground";
242 const char* const GUIPalette::TextRulerForeground = "textrulerforeground";
243
244 const char* const GUIPalette::ChordNameRulerBackground = "chordnamerulerbackground";
245 const char* const GUIPalette::ChordNameRulerForeground = "chordnamerulerforeground";
246
247 const char* const GUIPalette::RawNoteRulerBackground = "rawnoterulerbackground";
248 const char* const GUIPalette::RawNoteRulerForeground = "rawnoterulerforeground";
249
250 const char* const GUIPalette::LevelMeterGreen = "levelmetergreen";
251 const char* const GUIPalette::LevelMeterOrange = "levelmeterorange";
252 const char* const GUIPalette::LevelMeterRed = "levelmeterred";
253
254 const char* const GUIPalette::LevelMeterSolidGreen = "levelmetersolidgreen";
255 const char* const GUIPalette::LevelMeterSolidOrange = "levelmetersolidorange";
256 const char* const GUIPalette::LevelMeterSolidRed = "levelmetersolidred";
257
258 const char* const GUIPalette::BarLine = "barline";
259 const char* const GUIPalette::MatrixBarLine = "matrixbarline";
260 const char* const GUIPalette::BarLineIncorrect = "barlineincorrect";
261 const char* const GUIPalette::BeatLine = "beatline";
262 const char* const GUIPalette::SubBeatLine = "subbeatline";
263 const char* const GUIPalette::StaffConnectingLine = "staffconnectingline";
264 const char* const GUIPalette::StaffConnectingTerminatingLine = "staffconnectingterminatingline";
265
266 const char* const GUIPalette::Pointer = "pointer";
267 const char* const GUIPalette::PointerRuler = "pointerruler";
268
269 const char* const GUIPalette::InsertCursor = "insertcursor";
270 const char* const GUIPalette::InsertCursorRuler = "insertcursorruler";
271
272 const char* const GUIPalette::TrackDivider = "trackdivider";
273 const char* const GUIPalette::MovementGuide = "movementguide";
274 const char* const GUIPalette::SelectionRectangle = "selectionrectangle";
275 const char* const GUIPalette::SelectedElement = "selectedelement";
276 const char* const GUIPalette::ControlItem = "controlitem";
277
278 const int GUIPalette::SelectedElementHue = 225;
279 const int GUIPalette::SelectedElementMinValue = 220;
280 const int GUIPalette::HighlightedElementHue = 25;
281 const int GUIPalette::HighlightedElementMinValue = 220;
282 const int GUIPalette::QuantizedNoteHue = 69;
283 const int GUIPalette::QuantizedNoteMinValue = 140;
284 const int GUIPalette::TriggerNoteHue = 4;
285 const int GUIPalette::TriggerNoteMinValue = 140;
286 const int GUIPalette::TriggerSkipHue = 42;
287 const int GUIPalette::TriggerSkipMinValue = 140;
288 const int GUIPalette::OutRangeNoteHue = 0;
289 const int GUIPalette::OutRangeNoteMinValue = 200;
290
291 const int GUIPalette::CollisionHaloHue = 42;
292 const int GUIPalette::CollisionHaloSaturation = 200;
293
294 const char* const GUIPalette::TextAnnotationBackground = "textannotationbackground";
295
296 const char* const GUIPalette::TextLilyPondDirectiveBackground = "textlilyponddirectivebackground";
297
298 const char* const GUIPalette::AudioCountdownBackground = "audiocountdownbackground";
299 const char* const GUIPalette::AudioCountdownForeground = "audiocountdownforeground";
300
301 const char* const GUIPalette::RotaryFloatBackground = "rotaryfloatbackground";
302 const char* const GUIPalette::RotaryFloatForeground = "rotaryfloatforeground";
303
304 const char* const GUIPalette::RotaryPastelBlue = "rotarypastelblue";
305 const char* const GUIPalette::RotaryPastelRed = "rotarypastelred";
306 const char* const GUIPalette::RotaryPastelGreen = "rotarypastelgreen";
307 const char* const GUIPalette::RotaryPastelOrange = "rotarypastelorange";
308 const char* const GUIPalette::RotaryPastelYellow = "rotarypastelyellow";
309
310 const char* const GUIPalette::MatrixKeyboardFocus = "matrixkeyboardfocus";
311
312 const char* const GUIPalette::RotaryPlugin = "rotaryplugin";
313
314 const char* const GUIPalette::RotaryMeter = "rotarymeter";
315
316 const char* const GUIPalette::MarkerBackground = "markerbackground";
317
318 const char* const GUIPalette::QuickMarker = "quickmarker";
319
320 const char* const GUIPalette::MuteTrackLED = "mutetrackled";
321 const char* const GUIPalette::SoloTrackLED = "solotrackled";
322 const char* const GUIPalette::RecordMIDITrackLED = "recordmiditrackled";
323 const char* const GUIPalette::RecordAudioTrackLED = "recordaudiotrackled";
324 const char* const GUIPalette::RecordSoftSynthTrackLED = "recordsoftsynthtrackled";
325
326 const char* const GUIPalette::PlaybackFaderOutline = "playbackfaderoutline";
327 const char* const GUIPalette::RecordFaderOutline = "recordfaderoutline";
328
329 const char* const GUIPalette::PannerOverlay = "panneroverlay";
330
331 GUIPalette* GUIPalette::m_instance = nullptr;
332
333 // defines which index in the document's colourmap should be used as the color
334 // when creating new audio segments from recordings, or inserting from the
335 // audio file manager (presumes a file derived from the updated autoload.rg
336 // that shipped along with this change)
337 const int GUIPalette::AudioDefaultIndex = 1;
338
339 const char* const GUIPalette::ThornGroupBoxBackground = "thorngroupboxbackground";
340
341 }
342