massive reworking of color selection implementation

This commit is contained in:
Paul Davis 2014-11-19 13:14:26 -05:00
parent e9768e934f
commit 318a9edab9
24 changed files with 2602 additions and 1020 deletions

View File

@ -663,14 +663,14 @@ ArdourButton::set_colors ()
}
std::string name = get_name();
fill_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill active", name));
fill_inactive_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill", name));
fill_active_color = ARDOUR_UI::config()->color (string_compose ("%1: fill active", name));
fill_inactive_color = ARDOUR_UI::config()->color (string_compose ("%1: fill", name));
text_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: text active", name));
text_inactive_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: text", name));
text_active_color = ARDOUR_UI::config()->color (string_compose ("%1: text active", name));
text_inactive_color = ARDOUR_UI::config()->color (string_compose ("%1: text", name));
led_active_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: led active", name));
led_inactive_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: led", name));
led_active_color = ARDOUR_UI::config()->color (string_compose ("%1: led active", name));
led_inactive_color = ARDOUR_UI::config()->color (string_compose ("%1: led", name));
}
/**

View File

@ -89,7 +89,7 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
cairo_translate (cr, xc, yc); //after this, everything is based on the center of the knob
//get the knob color from the theme
ArdourCanvas::Color knob_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1", get_name()));
ArdourCanvas::Color knob_color = ARDOUR_UI::config()->color (string_compose ("%1", get_name()));
float center_radius = 0.48*scale;
float border_width = 0.8;
@ -119,10 +119,10 @@ ArdourKnob::render (cairo_t* cr, cairo_rectangle_t *)
//look up the arc colors from the config
double red_start, green_start, blue_start, unused;
ArdourCanvas::Color arc_start_color = ARDOUR_UI::config()->color_by_name ( string_compose ("%1: arc start", get_name()));
ArdourCanvas::Color arc_start_color = ARDOUR_UI::config()->color ( string_compose ("%1: arc start", get_name()));
ArdourCanvas::color_to_rgba( arc_start_color, red_start, green_start, blue_start, unused );
double red_end, green_end, blue_end;
ArdourCanvas::Color arc_end_color = ARDOUR_UI::config()->color_by_name ( string_compose ("%1: arc end", get_name()) );
ArdourCanvas::Color arc_end_color = ARDOUR_UI::config()->color ( string_compose ("%1: arc end", get_name()) );
ArdourCanvas::color_to_rgba( arc_end_color, red_end, green_end, blue_end, unused );
//vary the arc color over the travel of the knob

View File

@ -223,15 +223,15 @@ AudioClock::set_colors ()
uint32_t cursor_color;
if (active_state()) {
bg_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1 active: background", get_name()));
text_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1 active: text", get_name()));
editing_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1 active: edited text", get_name()));
cursor_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1 active: cursor", get_name()));
bg_color = ARDOUR_UI::config()->color (string_compose ("%1 active: background", get_name()));
text_color = ARDOUR_UI::config()->color (string_compose ("%1 active: text", get_name()));
editing_color = ARDOUR_UI::config()->color (string_compose ("%1 active: edited text", get_name()));
cursor_color = ARDOUR_UI::config()->color (string_compose ("%1 active: cursor", get_name()));
} else {
bg_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: background", get_name()));
text_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: text", get_name()));
editing_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: edited text", get_name()));
cursor_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: cursor", get_name()));
bg_color = ARDOUR_UI::config()->color (string_compose ("%1: background", get_name()));
text_color = ARDOUR_UI::config()->color (string_compose ("%1: text", get_name()));
editing_color = ARDOUR_UI::config()->color (string_compose ("%1: edited text", get_name()));
cursor_color = ARDOUR_UI::config()->color (string_compose ("%1: cursor", get_name()));
}
/* store for bg and cursor in render() */

54
gtk2_ardour/base_colors.h Normal file
View File

@ -0,0 +1,54 @@
/*
Copyright (C) 2014 Paul Davis
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* no guard #ifdef's - this file is intended to be included many times */
/* note that because the integer values are interpreted as RGBA, we must include a A component, which is just 0xff
for all colors here. The alpha component is not used.
*/
CANVAS_BASE_COLOR(colorA,"colorA", 0xff0000ff) /* red */
CANVAS_BASE_COLOR(colorAlight,"colorAlight", 0xff00e6ff) /* pink */
/* oranges */
CANVAS_BASE_COLOR(colorAB,"colorAB", 0xff4d00ff) /* redder/darker orange */
CANVAS_BASE_COLOR(colorABlight,"colorABlight", 0xff9900ff) /* lighter orange */
/* yellows */
CANVAS_BASE_COLOR(colorB,"colorB", 0xffe600ff) /* bright yellow */
/* greens */
CANVAS_BASE_COLOR(colorA2,"colorC", 0x00ff1aff) /* darker green */
CANVAS_BASE_COLOR(colorClight,"colorClight", 0x80ff00ff) /* light green */
/* cyan */
CANVAS_BASE_COLOR(colorCD,"colorCD", 0x00ffb3ff) /* cyan */
/* blues */
CANVAS_BASE_COLOR(colorD,"colorD", 0x00ffffff) /* light blue */
CANVAS_BASE_COLOR(colorDdark,"colorDdark", 0x001affff) /* darkest blue */
CANVAS_BASE_COLOR(colorDlight,"colorDlight", 0x00b3ffff) /* lightest blue */
/* purple */
CANVAS_BASE_COLOR(colorDA,"colorDA", 0x8000ffff) /* purple */

View File

@ -74,7 +74,7 @@ ButtonJoiner::ButtonJoiner (const std::string& str, Gtk::Widget& lw, Gtk::Widget
uint32_t border_color;
uint32_t r, g, b, a;
border_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border end", name));
border_color = ARDOUR_UI::config()->color (string_compose ("%1: border end", name));
UINT_TO_RGBA (border_color, &r, &g, &b, &a);
border_r = r/255.0;
@ -256,15 +256,15 @@ ButtonJoiner::set_colors ()
active_fill_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
inactive_fill_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start", name));
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end", name));
start_color = ARDOUR_UI::config()->color (string_compose ("%1: fill start", name));
end_color = ARDOUR_UI::config()->color (string_compose ("%1: fill end", name));
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
cairo_pattern_add_color_stop_rgba (inactive_fill_pattern, 0, r/255.0,g/255.0,b/255.0, a/255.0);
UINT_TO_RGBA (end_color, &r, &g, &b, &a);
cairo_pattern_add_color_stop_rgba (inactive_fill_pattern, 1, r/255.0,g/255.0,b/255.0, a/255.0);
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start active", name));
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end active", name));
start_color = ARDOUR_UI::config()->color (string_compose ("%1: fill start active", name));
end_color = ARDOUR_UI::config()->color (string_compose ("%1: fill end active", name));
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
cairo_pattern_add_color_stop_rgba (active_fill_pattern, 0, r/255.0,g/255.0,b/255.0, a/255.0);
UINT_TO_RGBA (end_color, &r, &g, &b, &a);

View File

@ -17,242 +17,6 @@
*/
CANVAS_VARIABLE(ActiveCrossfade, "active crossfade")
CANVAS_VARIABLE(canvasvar_ArrangeBase, "arrange base")
CANVAS_VARIABLE(AudioBusBase, "audio bus base")
CANVAS_VARIABLE(AudioMasterBusBase, "audio master bus base")
CANVAS_VARIABLE(AudioTrackBase, "audio track base")
CANVAS_VARIABLE(AutomationLine, "automation line")
CANVAS_VARIABLE(AutomationTrackFill, "automation track fill")
CANVAS_VARIABLE(AutomationTrackOutline, "automation track outline")
CANVAS_VARIABLE(CDMarkerBar, "cd marker bar")
CANVAS_VARIABLE(CrossfadeEditorBase, "crossfade editor base")
CANVAS_VARIABLE(CrossfadeEditorLine, "crossfade editor line")
CANVAS_VARIABLE(CrossfadeEditorLineShading, "crossfade editor line shading")
CANVAS_VARIABLE(CrossfadeEditorPointFill, "crossfade editor point fill")
CANVAS_VARIABLE(CrossfadeEditorPointOutline, "crossfade editor point outline")
CANVAS_VARIABLE(CrossfadeEditorWave, "crossfade editor wave")
CANVAS_VARIABLE(SelectedCrossfadeEditorWaveFill, "selected crossfade editor wave fill")
CANVAS_VARIABLE(CrossfadeLine, "crossfade line")
CANVAS_VARIABLE(EditPoint, "edit point")
CANVAS_VARIABLE(EnteredAutomationLine, "entered automation line")
CANVAS_VARIABLE(ControlPointFill, "control point fill")
CANVAS_VARIABLE(ControlPointOutline, "control point outline")
CANVAS_VARIABLE(ControlPointSelected, "control point selected")
CANVAS_VARIABLE(EnteredGainLine, "entered gain line")
CANVAS_VARIABLE(EnteredMarker, "entered marker")
CANVAS_VARIABLE(FrameHandle, "frame handle")
CANVAS_VARIABLE(GainLine, "gain line")
CANVAS_VARIABLE(GainLineInactive, "gain line inactive")
CANVAS_VARIABLE(GhostTrackBase, "ghost track base")
CANVAS_VARIABLE(GhostTrackMidiOutline, "ghost track midi outline")
CANVAS_VARIABLE(GhostTrackWave, "ghost track wave")
CANVAS_VARIABLE(GhostTrackWaveFill, "ghost track wave fill")
CANVAS_VARIABLE(GhostTrackWaveClip, "ghost track wave clip")
CANVAS_VARIABLE(GhostTrackZeroLine, "ghost track zero line")
CANVAS_VARIABLE(ImageTrack, "image track")
CANVAS_VARIABLE(InactiveCrossfade, "inactive crossfade")
CANVAS_VARIABLE(InactiveFadeHandle, "inactive fade handle")
CANVAS_VARIABLE(InactiveGroupTab, "inactive group tab")
CANVAS_VARIABLE(LocationCDMarker, "location cd marker")
CANVAS_VARIABLE(LocationLoop, "location loop")
CANVAS_VARIABLE(LocationMarker, "location marker")
CANVAS_VARIABLE(LocationPunch, "location punch")
CANVAS_VARIABLE(LocationRange, "location range")
CANVAS_VARIABLE(MarkerBar, "marker bar")
CANVAS_VARIABLE(MarkerBarSeparator, "marker bar separator")
CANVAS_VARIABLE(MarkerDragLine, "marker drag line")
CANVAS_VARIABLE(MarkerLabel, "marker label")
CANVAS_VARIABLE(MarkerTrack, "marker track")
CANVAS_VARIABLE(MeasureLineBar, "measure line bar")
CANVAS_VARIABLE(MeasureLineBeat, "measure line beat")
CANVAS_VARIABLE(MeterBar, "meter bar")
CANVAS_VARIABLE(MeterBridgePeakLabel, "meterbridge peaklabel")
CANVAS_VARIABLE(MeterColorBBC, "meter color BBC")
CANVAS_VARIABLE(MeterColor0, "meter fill: 0")
CANVAS_VARIABLE(MeterColor1, "meter fill: 1")
CANVAS_VARIABLE(MeterColor2, "meter fill: 2")
CANVAS_VARIABLE(MeterColor3, "meter fill: 3")
CANVAS_VARIABLE(MeterColor4, "meter fill: 4")
CANVAS_VARIABLE(MeterColor5, "meter fill: 5")
CANVAS_VARIABLE(MeterColor6, "meter fill: 6")
CANVAS_VARIABLE(MeterColor7, "meter fill: 7")
CANVAS_VARIABLE(MeterColor8, "meter fill: 8")
CANVAS_VARIABLE(MeterColor9, "meter fill: 9")
CANVAS_VARIABLE(MidiMeterColor0, "midi meter fill: 0")
CANVAS_VARIABLE(MidiMeterColor1, "midi meter fill: 1")
CANVAS_VARIABLE(MidiMeterColor2, "midi meter fill: 2")
CANVAS_VARIABLE(MidiMeterColor3, "midi meter fill: 3")
CANVAS_VARIABLE(MidiMeterColor4, "midi meter fill: 4")
CANVAS_VARIABLE(MidiMeterColor5, "midi meter fill: 5")
CANVAS_VARIABLE(MidiMeterColor6, "midi meter fill: 6")
CANVAS_VARIABLE(MidiMeterColor7, "midi meter fill: 7")
CANVAS_VARIABLE(MidiMeterColor8, "midi meter fill: 8")
CANVAS_VARIABLE(MidiMeterColor9, "midi meter fill: 9")
CANVAS_VARIABLE(MeterBackgroundBot, "meter background: bottom")
CANVAS_VARIABLE(MeterBackgroundTop, "meter background: top")
CANVAS_VARIABLE(MeterMarker, "meter marker")
CANVAS_VARIABLE(MidiBusBase, "midi bus base")
CANVAS_VARIABLE(MidiFrameBase, "midi frame base")
CANVAS_VARIABLE(MidiNoteInactiveChannel, "midi note inactive channel")
CANVAS_VARIABLE(MidiNoteColorBase, "midi note color min")
CANVAS_VARIABLE(MidiNoteColorMid, "midi note color mid")
CANVAS_VARIABLE(MidiNoteColorTop, "midi note color max")
CANVAS_VARIABLE(SelectedMidiNoteColorBase, "selected midi note color min")
CANVAS_VARIABLE(SelectedMidiNoteColorMid, "selected midi note color mid")
CANVAS_VARIABLE(SelectedMidiNoteColorTop, "selected midi note color max")
CANVAS_VARIABLE(MidiNoteSelected, "midi note selected")
CANVAS_VARIABLE(MidiNoteVelocityText, "midi note velocity text")
CANVAS_VARIABLE(MidiPatchChangeFill, "midi patch change fill")
CANVAS_VARIABLE(MidiPatchChangeOutline, "midi patch change outline")
CANVAS_VARIABLE(MidiPatchChangeInactiveChannelFill, "midi patch change inactive channel fill")
CANVAS_VARIABLE(MidiPatchChangeInactiveChannelOutline, "midi patch change inactive channel outline")
CANVAS_VARIABLE(MidiSysExFill, "midi sysex fill")
CANVAS_VARIABLE(MidiSysExOutline, "midi sysex outline")
CANVAS_VARIABLE(MidiSelectRectFill, "midi select rect fill")
CANVAS_VARIABLE(MidiSelectRectOutline, "midi select rect outline")
CANVAS_VARIABLE(MidiTrackBase, "midi track base")
CANVAS_VARIABLE(NameHighlightFill, "name highlight fill")
CANVAS_VARIABLE(NameHighlightOutline, "name highlight outline")
CANVAS_VARIABLE(PianoRollBlackOutline, "piano roll black outline")
CANVAS_VARIABLE(PianoRollBlack, "piano roll black")
CANVAS_VARIABLE(PianoRollWhite, "piano roll white")
CANVAS_VARIABLE(PlayHead, "play head")
CANVAS_VARIABLE(ProcessorAutomationLine, "processor automation line")
CANVAS_VARIABLE(PunchLine, "punch line")
CANVAS_VARIABLE(RangeDragBarRect, "range drag bar rect")
CANVAS_VARIABLE(RangeDragRect, "range drag rect")
CANVAS_VARIABLE(RangeMarkerBar, "range marker bar")
CANVAS_VARIABLE(RecordingRect, "recording rect")
CANVAS_VARIABLE(RecWaveFormFill, "recorded waveform fill")
CANVAS_VARIABLE(RecWaveForm, "recorded waveform outline")
CANVAS_VARIABLE(RubberBandRect, "rubber band rect")
CANVAS_VARIABLE(RulerBase, "ruler base")
CANVAS_VARIABLE(RulerText, "ruler text")
CANVAS_VARIABLE(SelectedCrossfadeEditorLine, "selected crossfade editor line")
CANVAS_VARIABLE(SelectedCrossfadeEditorWave, "selected crossfade editor wave")
CANVAS_VARIABLE(SelectedFrameBase, "selected region base")
CANVAS_VARIABLE(SelectedWaveFormFill, "selected waveform fill")
CANVAS_VARIABLE(SelectedWaveForm, "selected waveform outline")
CANVAS_VARIABLE(SelectionRect, "selection rect")
CANVAS_VARIABLE(Selection, "selection")
CANVAS_VARIABLE(Shuttle, "shuttle")
CANVAS_VARIABLE(Silence, "silence")
CANVAS_VARIABLE(SilenceText, "silence text")
CANVAS_VARIABLE(MonoPannerOutline, "mono panner outline")
CANVAS_VARIABLE(MonoPannerFill, "mono panner fill")
CANVAS_VARIABLE(MonoPannerText, "mono panner text")
CANVAS_VARIABLE(MonoPannerBackground, "mono panner bg")
CANVAS_VARIABLE(MonoPannerPositionFill, "mono panner position fill")
CANVAS_VARIABLE(MonoPannerPositionOutline, "mono panner position outline")
CANVAS_VARIABLE(StereoPannerOutline, "stereo panner outline")
CANVAS_VARIABLE(StereoPannerFill, "stereo panner fill")
CANVAS_VARIABLE(StereoPannerText, "stereo panner text")
CANVAS_VARIABLE(StereoPannerBackground, "stereo panner bg")
CANVAS_VARIABLE(StereoPannerRule, "stereo panner rule")
CANVAS_VARIABLE(StereoPannerMonoOutline, "stereo panner mono outline")
CANVAS_VARIABLE(StereoPannerMonoFill, "stereo panner mono fill")
CANVAS_VARIABLE(StereoPannerMonoText, "stereo panner mono text")
CANVAS_VARIABLE(StereoPannerMonoBackground, "stereo panner mono bg")
CANVAS_VARIABLE(StereoPannerInvertedOutline, "stereo panner inverted outline")
CANVAS_VARIABLE(StereoPannerInvertedFill, "stereo panner inverted fill")
CANVAS_VARIABLE(StereoPannerInvertedText, "stereo panner inverted text")
CANVAS_VARIABLE(StereoPannerInvertedBackground, "stereo panner inverted bg")
CANVAS_VARIABLE(TempoBar, "tempo bar")
CANVAS_VARIABLE(TempoMarker, "tempo marker")
CANVAS_VARIABLE(TimeAxisFrame, "time axis frame")
CANVAS_VARIABLE(SelectedTimeAxisFrame, "selected time axis frame")
CANVAS_VARIABLE(TimeStretchFill, "time stretch fill")
CANVAS_VARIABLE(TimeStretchOutline, "time stretch outline")
CANVAS_VARIABLE(MonitorKnobArcStart, "monitor knob: arc start")
CANVAS_VARIABLE(MonitorKnobArcEnd, "monitor knob: arc end")
CANVAS_VARIABLE(TransportDragRect, "transport drag rect")
CANVAS_VARIABLE(TransportLoopRect, "transport loop rect")
CANVAS_VARIABLE(TransportMarkerBar, "transport marker bar")
CANVAS_VARIABLE(TransportPunchRect, "transport punch rect")
CANVAS_VARIABLE(TrimHandleLocked, "trim handle locked")
CANVAS_VARIABLE(TrimHandle, "trim handle")
CANVAS_VARIABLE(VerboseCanvasCursor, "verbose canvas cursor")
CANVAS_VARIABLE(VestigialFrame, "vestigial frame")
CANVAS_VARIABLE(VideoBar, "video timeline bar")
CANVAS_VARIABLE(FrameBase, "region base")
CANVAS_VARIABLE(CoveredRegion, "region area covered by another region")
CANVAS_VARIABLE(WaveForm, "waveform outline")
CANVAS_VARIABLE(WaveFormClip, "clipped waveform")
CANVAS_VARIABLE(WaveFormFill, "waveform fill")
CANVAS_VARIABLE(ZeroLine, "zero line")
CANVAS_VARIABLE(MonitorSectionKnob, "monitor knob")
CANVAS_VARIABLE(ButtonBorder, "border color")
#define BUTTON_VARS(root,name) \
CANVAS_VARIABLE(root ## Fill, name ": fill") \
CANVAS_VARIABLE(root ## FillActive, name ": fill active") \
CANVAS_VARIABLE(root ## LED, name ": led") \
CANVAS_VARIABLE(root ## LEDActive, name ": led active") \
CANVAS_VARIABLE(root ## Text, name ": text") \
CANVAS_VARIABLE(root ## TextActive, name ": text active") \
BUTTON_VARS(ProcessorPreFader, "processor prefader")
BUTTON_VARS(ProcessorFader, "processor fader")
BUTTON_VARS(ProcessorPostFader, "processor postfader")
BUTTON_VARS(ProcessorControlButton, "processor control button")
BUTTON_VARS(MonitorButton, "monitor button")
BUTTON_VARS(SoloIsolateButton, "solo isolate")
BUTTON_VARS(SoloSafeButton, "solo safe")
BUTTON_VARS(MidiDeviceButton, "midi device")
BUTTON_VARS(MeterBridgePeakIndicator, "meterbridge peakindicator")
BUTTON_VARS(MeterBridgeLabel, "meterbridge label")
BUTTON_VARS(MonitorSectionCutButton, "monitor section cut")
BUTTON_VARS(MonitorSectionDimButton, "monitor section dim")
BUTTON_VARS(MonitorSectionSoloButton, "monitor section solo")
BUTTON_VARS(MonitorSectionInvertButton, "monitor section invert")
BUTTON_VARS(MonitorSectionMonoButton, "monitor section mono")
BUTTON_VARS(MonitorSectionSoloModelButton, "monitor section solo model")
BUTTON_VARS(MonitorSectionSoloOverrideButton, "monitor solo override")
BUTTON_VARS(MonitorSectionSoloExclusiveButton, "monitor solo exclusive")
BUTTON_VARS(RudeSolo, "rude solo")
BUTTON_VARS(RudeIsolate, "rude isolate")
BUTTON_VARS(RudeAudition, "rude audition")
BUTTON_VARS(FeedbackAlert, "feedback alert")
BUTTON_VARS(InvertButton, "invert button")
BUTTON_VARS(MuteButton, "mute button")
BUTTON_VARS(SoloButton, "solo button")
BUTTON_VARS(RecEnableButton, "record enable button")
BUTTON_VARS(SendButton, "send alert button")
BUTTON_VARS(TransportButton, "transport button")
BUTTON_VARS(TransportRecenableButton, "transport recenable button")
BUTTON_VARS(TransportOptionButton, "transport option button")
BUTTON_VARS(TransportActiveOptionButton, "transport active option button")
BUTTON_VARS(TrackNumberLabel, "tracknumber label")
BUTTON_VARS(PluginBypassButton, "plugin bypass button")
BUTTON_VARS(PunchButton, "punch button")
BUTTON_VARS(MouseModeButton, "mouse mode button")
BUTTON_VARS(NudgeButton, "nudge button")
BUTTON_VARS(ZoomButton, "zoom button")
BUTTON_VARS(ZoomMenu, "zoom menu")
BUTTON_VARS(RouteButton, "route button")
BUTTON_VARS(MixerStripButton, "mixer strip button")
BUTTON_VARS(MixerStripNameButton, "mixer strip name button")
BUTTON_VARS(MidiInputButton, "midi input button")
BUTTON_VARS(LockButton, "lock button")
BUTTON_VARS(GenericButton, "generic button")
#define CLOCK_VARS(root,name) \
CANVAS_VARIABLE(root ## Background, name ": background") \
CANVAS_VARIABLE(root ## Text, name ": text") \
CANVAS_VARIABLE(root ## EditedText, name ": edited text") \
CANVAS_VARIABLE(root ## Cursor, name ": cursor")
CLOCK_VARS(TransportClock, "transport clock")
CLOCK_VARS(SecondaryClock, "secondary clock")
CLOCK_VARS(TransportDeltaClock, "transport delta clock")
CLOCK_VARS(SecondaryDeltaClock, "secondary delta clock")
CLOCK_VARS(BigClock, "big clock")
CLOCK_VARS(BigClockActive, "big clock active")
CLOCK_VARS(PunchClock, "punch clock")
CLOCK_VARS(SelectionClock, "selection clock")
CLOCK_VARS(NudgeClock, "nudge clock")
CLOCK_VARS(GenericClock, "clock")
CANVAS_FONT_VARIABLE(SmallFont, "small font")
CANVAS_FONT_VARIABLE(SmallerFont, "smaller font")
CANVAS_FONT_VARIABLE(NormalFont, "normal font")

493
gtk2_ardour/colors.h Normal file
View File

@ -0,0 +1,493 @@
/*
Copyright (C) 2012 Paul Davis
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 2 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, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* no guard #ifdef's - this should only be included in ui_config.{cc,h}, where it is
* used with some preprocessor tricks.
*/
CANVAS_COLOR(ActiveCrossfade,"active crossfade", "colorD", HSV(0,-0.179775,-0.301961,0.180392)) /*0 */
CANVAS_COLOR(canvasvar_ArrangeBase,"arrange base", "colorA", HSV(0,-1,-0.65098,1)) /*0 */
CANVAS_COLOR(AudioBusBase,"audio bus base", "colorDdark", HSV(-17.6842,-0.751634,-0.4,0.407843)) /*17.6842 */
CANVAS_COLOR(AudioTrackBase,"audio track base", "colorDlight", HSV(17.3846,-0.80102,-0.231373,0.407843)) /*17.3846 */
CANVAS_COLOR(AudioMasterBusBase,"audio master bus base", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(AutomationLine,"automation line", "colorC", HSV(0,-0.361702,-0.262745,1)) /*0 */
CANVAS_COLOR(AutomationTrackFill,"automation track fill", "colorDdark", HSV(-0.521739,-0.776699,-0.192157,0.407843)) /*0.521739 */
CANVAS_COLOR(AutomationTrackOutline,"automation track outline", "colorA", HSV(0,-1,-0.843137,1)) /*0 */
CANVAS_COLOR(CDMarkerBar,"cd marker bar", "colorDdark", HSV(-2,-0.907975,-0.360784,0.8)) /*2 */
CANVAS_COLOR(CrossfadeEditorBase,"crossfade editor base", "colorDdark", HSV(0.545455,-0.547945,-0.713725,1)) /*0.545455 */
CANVAS_COLOR(CrossfadeEditorLine,"crossfade editor line", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(CrossfadeEditorLineShading,"crossfade editor line shading", "colorDlight", HSV(0.0861244,0,-0.180392,0.329412)) /*0.0861244 */
CANVAS_COLOR(CrossfadeEditorPointFill,"crossfade editor point fill", "colorC", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(CrossfadeEditorPointOutline,"crossfade editor point outline", "colorDdark", HSV(-0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(CrossfadeEditorWave,"crossfade editor wave", "colorA", HSV(0,-1,0,0.156863)) /*0 */
CANVAS_COLOR(SelectedCrossfadeEditorWaveFill,"selected crossfade editor wave fill", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(CrossfadeLine,"crossfade line", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(EditPoint,"edit point", "colorDdark", HSV(-0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(EnteredAutomationLine,"entered automation line", "colorA", HSV(0,-0.447964,-0.133333,1)) /*0 */
CANVAS_COLOR(ControlPointFill,"control point fill", "colorA", HSV(0,-1,0,0.4)) /*0 */
CANVAS_COLOR(ControlPointOutline,"control point outline", "colorA", HSV(0,0,0,0.933333)) /*0 */
CANVAS_COLOR(ControlPointSelected,"control point selected", "colorD", HSV(0,-0.416667,-0.2,1)) /*0 */
CANVAS_COLOR(EnteredGainLine,"entered gain line", "colorA", HSV(0,-0.447964,-0.133333,1)) /*0 */
CANVAS_COLOR(EnteredMarker,"entered marker", "colorA", HSV(0,-0.447964,-0.133333,1)) /*0 */
CANVAS_COLOR(FrameHandle,"frame handle", "colorDA", HSV(0.117647,0,0,0.588235)) /*0.117647 */
CANVAS_COLOR(GainLine,"gain line", "colorC", HSV(0.0638298,0,-0.262745,1)) /*0.0638298 */
CANVAS_COLOR(GainLineInactive,"gain line inactive", "colorC", HSV(0.206897,-0.845745,-0.262745,0.772549)) /*0.206897 */
CANVAS_COLOR(GhostTrackBase,"ghost track base", "colorDA", HSV(0,-0.5,-0.513725,0.776471)) /*0 */
CANVAS_COLOR(GhostTrackMidiOutline,"ghost track midi outline", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(GhostTrackWave,"ghost track wave", "colorA", HSV(0,-1,-0.87451,0.85098)) /*0 */
CANVAS_COLOR(GhostTrackWaveFill,"ghost track wave fill", "colorA", HSV(0,-1,-0.87451,0.376471)) /*0 */
CANVAS_COLOR(GhostTrackWaveClip,"ghost track wave clip", "colorA", HSV(0,-1,-0.87451,0.85098)) /*0 */
CANVAS_COLOR(GhostTrackZeroLine,"ghost track zero line", "colorAlight", HSV(0.0262009,0,-0.101961,0.4)) /*0.0262009 */
CANVAS_COLOR(ImageTrack,"image track", "colorB", HSV(-6,-0.977376,-0.133333,1)) /*6 */
CANVAS_COLOR(InactiveCrossfade,"inactive crossfade", "colorB", HSV(-0.136364,-0.257384,-0.0705882,0.466667)) /*0.136364 */
CANVAS_COLOR(InactiveFadeHandle,"inactive fade handle", "colorA", HSV(0,-1,-0.266667,0.666667)) /*0 */
CANVAS_COLOR(InactiveGroupTab,"inactive group tab", "colorA", HSV(0,-1,-0.737255,1)) /*0 */
CANVAS_COLOR(LocationCDMarker,"location cd marker", "colorCD", HSV(-0.118812,-0.12931,-0.0901961,1)) /*0.118812 */
CANVAS_COLOR(LocationLoop,"location loop", "colorCD", HSV(-17.8763,-0.353333,-0.411765,1)) /*17.8763 */
CANVAS_COLOR(LocationMarker,"location marker", "colorB", HSV(17.8943,-0.0696721,-0.0431373,1)) /*17.8943 */
CANVAS_COLOR(LocationPunch,"location punch", "colorA", HSV(0,-0.467742,-0.513725,1)) /*0 */
CANVAS_COLOR(LocationRange,"location range", "colorCD", HSV(-17.5102,-0.598361,-0.521569,1)) /*17.5102 */
CANVAS_COLOR(MarkerBar,"marker bar", "colorDdark", HSV(-18,-0.884393,-0.321569,0.8)) /*18 */
CANVAS_COLOR(MarkerBarSeparator,"marker bar separator", "colorA", HSV(0,-1,-0.666667,1)) /*0 */
CANVAS_COLOR(MarkerDragLine,"marker drag line", "colorC", HSV(0.0759494,0,-0.690196,0.976471)) /*0.0759494 */
CANVAS_COLOR(MarkerLabel,"marker label", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(MarkerTrack,"marker track", "colorB", HSV(-6,-0.977376,-0.133333,1)) /*6 */
CANVAS_COLOR(MeasureLineBar,"measure line bar", "colorA", HSV(0,-1,0,0.611765)) /*0 */
CANVAS_COLOR(MeasureLineBeat,"measure line beat", "colorA", HSV(0,-0.975309,-0.364706,0.462745)) /*0 */
CANVAS_COLOR(MeterBar,"meter bar", "colorDdark", HSV(1.71429,-0.875,-0.560784,0.8)) /*1.71429 */
CANVAS_COLOR(MeterBridgePeakLabel,"meterbridge peaklabel", "colorA", HSV(0,-0.0666667,0,1)) /*0 */
CANVAS_COLOR(MeterColorBBC,"meter color BBC", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterColor0,"meter fill: 0", "colorC", HSV(0.176471,0,-0.466667,1)) /*0.176471 */
CANVAS_COLOR(MeterColor1,"meter fill: 1", "colorC", HSV(0,0,-0.333333,1)) /*0 */
CANVAS_COLOR(MeterColor2,"meter fill: 2", "colorC", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(MeterColor3,"meter fill: 3", "colorC", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(MeterColor4,"meter fill: 4", "colorB", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(MeterColor5,"meter fill: 5", "colorB", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(MeterColor6,"meter fill: 6", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterColor7,"meter fill: 7", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterColor8,"meter fill: 8", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterColor9,"meter fill: 9", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MidiMeterColor0,"midi meter fill: 0", "colorClight", HSV(-17.8652,-0.644,-0.0196078,1)) /*17.8652 */
CANVAS_COLOR(MidiMeterColor1,"midi meter fill: 1", "colorABlight", HSV(-0.102564,-0.516529,-0.0509804,1)) /*0.102564 */
CANVAS_COLOR(MidiMeterColor2,"midi meter fill: 2", "colorABlight", HSV(-0.102564,-0.516529,-0.0509804,1)) /*0.102564 */
CANVAS_COLOR(MidiMeterColor3,"midi meter fill: 3", "colorAB", HSV(0.148148,-0.336066,-0.0431373,1)) /*0.148148 */
CANVAS_COLOR(MidiMeterColor4,"midi meter fill: 4", "colorAB", HSV(0.148148,-0.336066,-0.0431373,1)) /*0.148148 */
CANVAS_COLOR(MidiMeterColor5,"midi meter fill: 5", "colorAB", HSV(0.0786026,-0.0766129,-0.027451,1)) /*0.0786026 */
CANVAS_COLOR(MidiMeterColor6,"midi meter fill: 6", "colorAB", HSV(0.0786026,-0.0766129,-0.027451,1)) /*0.0786026 */
CANVAS_COLOR(MidiMeterColor7,"midi meter fill: 7", "colorC", HSV(0.315789,-0.713568,-0.219608,1)) /*0.315789 */
CANVAS_COLOR(MidiMeterColor8,"midi meter fill: 8", "colorC", HSV(0.315789,-0.713568,-0.219608,1)) /*0.315789 */
CANVAS_COLOR(MidiMeterColor9,"midi meter fill: 9", "colorCD", HSV(-17.9016,0,-0.0431373,0)) /*17.9016 */
CANVAS_COLOR(MeterBackgroundBot,"meter background: bottom", "colorA", HSV(0,-1,-0.8,1)) /*0 */
CANVAS_COLOR(MeterBackgroundTop,"meter background: top", "colorA", HSV(0,-1,-0.733333,1)) /*0 */
CANVAS_COLOR(MeterMarker,"meter marker", "colorA", HSV(0,-0.272727,-0.0509804,1)) /*0 */
CANVAS_COLOR(MidiBusBase,"midi bus base", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MidiFrameBase,"midi frame base", "colorC", HSV(-16,-0.901639,-0.760784,0.4)) /*16 */
CANVAS_COLOR(MidiNoteInactiveChannel,"midi note inactive channel", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MidiNoteColorBase,"midi note color min", "colorClight", HSV(0,-0.5,-0.670588,1)) /*0 */
CANVAS_COLOR(MidiNoteColorMid,"midi note color mid", "colorClight", HSV(0,-0.5,-0.341176,1)) /*0 */
CANVAS_COLOR(MidiNoteColorTop,"midi note color max", "colorClight", HSV(-0.23622,-0.501961,0,1)) /*0.23622 */
CANVAS_COLOR(SelectedMidiNoteColorBase,"selected midi note color min", "colorDdark", HSV(0.285714,-0.588235,-0.8,1)) /*0.285714 */
CANVAS_COLOR(SelectedMidiNoteColorMid,"selected midi note color mid", "colorDdark", HSV(-0.315789,-0.586957,-0.458824,1)) /*0.315789 */
CANVAS_COLOR(SelectedMidiNoteColorTop,"selected midi note color max", "colorDdark", HSV(0.0659341,-0.59009,-0.129412,1)) /*0.0659341 */
CANVAS_COLOR(MidiNoteSelected,"midi note selected", "colorDdark", HSV(-0.233766,-0.698039,0,1)) /*0.233766 */
CANVAS_COLOR(MidiNoteVelocityText,"midi note velocity text", "colorB", HSV(0.107143,-0.0819672,-0.0431373,0.737255)) /*0.107143 */
CANVAS_COLOR(MidiPatchChangeFill,"midi patch change fill", "colorDdark", HSV(-18,-0.888889,-0.647059,0.627451)) /*18 */
CANVAS_COLOR(MidiPatchChangeOutline,"midi patch change outline", "colorDlight", HSV(18,-0.950495,-0.207843,1)) /*18 */
CANVAS_COLOR(MidiPatchChangeInactiveChannelFill,"midi patch change inactive channel fill", "colorDdark", HSV(-18,-0.888889,-0.647059,0.752941)) /*18 */
CANVAS_COLOR(MidiPatchChangeInactiveChannelOutline,"midi patch change inactive channel outline", "colorDdark", HSV(-18,-0.761905,-0.835294,0.752941)) /*18 */
CANVAS_COLOR(MidiSysExFill,"midi sysex fill", "colorB", HSV(0.130435,-0.236515,-0.054902,0.627451)) /*0.130435 */
CANVAS_COLOR(MidiSysExOutline,"midi sysex outline", "colorDdark", HSV(-0.666667,-0.787736,-0.168627,1)) /*0.666667 */
CANVAS_COLOR(MidiSelectRectFill,"midi select rect fill", "colorDdark", HSV(-0.0504202,-0.533333,0,0.533333)) /*0.0504202 */
CANVAS_COLOR(MidiSelectRectOutline,"midi select rect outline", "colorDdark", HSV(0,-0.333333,0,1)) /*0 */
CANVAS_COLOR(MidiTrackBase,"midi track base", "colorClight", HSV(-0.731707,-0.79902,-0.2,0.372549)) /*0.731707 */
CANVAS_COLOR(NameHighlightFill,"name highlight fill", "colorDdark", HSV(-0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(NameHighlightOutline,"name highlight outline", "colorDA", HSV(0.117647,0,0,0.588235)) /*0.117647 */
CANVAS_COLOR(PianoRollBlackOutline,"piano roll black outline", "colorA", HSV(0,-1,-0.0431373,0.462745)) /*0 */
CANVAS_COLOR(PianoRollBlack,"piano roll black", "colorClight", HSV(1.13687e-13,-0.963636,-0.568627,0.419608)) /*1.13687e-13 */
CANVAS_COLOR(PianoRollWhite,"piano roll white", "colorC", HSV(-16,-0.96129,-0.392157,0.396078)) /*16 */
CANVAS_COLOR(PlayHead,"play head", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(ProcessorAutomationLine,"processor automation line", "colorDlight", HSV(17.9055,-0.48996,-0.0235294,1)) /*17.9055 */
CANVAS_COLOR(PunchLine,"punch line", "colorA", HSV(0,0,-0.341176,1)) /*0 */
CANVAS_COLOR(RangeDragBarRect,"range drag bar rect", "colorA", HSV(0,-1,-0.411765,0.776471)) /*0 */
CANVAS_COLOR(RangeDragRect,"range drag rect", "colorC", HSV(17.8235,-0.656566,-0.223529,0.776471)) /*17.8235 */
CANVAS_COLOR(RangeMarkerBar,"range marker bar", "colorDdark", HSV(2,-0.892857,-0.45098,0.8)) /*2 */
CANVAS_COLOR(RecordingRect,"recording rect", "colorA", HSV(0,-0.196078,-0.2,1)) /*0 */
CANVAS_COLOR(RecWaveFormFill,"recorded waveform fill", "colorA", HSV(0,-1,0,0.85098)) /*0 */
CANVAS_COLOR(RecWaveForm,"recorded waveform outline", "colorDdark", HSV(-1.5,-0.483871,-0.878431,1)) /*1.5 */
CANVAS_COLOR(RubberBandRect,"rubber band rect", "colorA", HSV(0,-1,-0.223529,0.34902)) /*0 */
CANVAS_COLOR(RulerBase,"ruler base", "colorA", HSV(0,-0.75,-0.827451,1)) /*0 */
CANVAS_COLOR(RulerText,"ruler text", "colorA", HSV(0,-1,-0.101961,1)) /*0 */
CANVAS_COLOR(SelectedCrossfadeEditorLine,"selected crossfade editor line", "colorD", HSV(0,0,-0.141176,1)) /*0 */
CANVAS_COLOR(SelectedCrossfadeEditorWave,"selected crossfade editor wave", "colorB", HSV(-0.0262009,-0.0803213,-0.0235294,0.627451)) /*0.0262009 */
CANVAS_COLOR(SelectedFrameBase,"selected region base", "colorDlight", HSV(15.3333,-0.907216,-0.619608,1)) /*15.3333 */
CANVAS_COLOR(SelectedWaveFormFill,"selected waveform fill", "colorABlight", HSV(0,0,0,0.85098)) /*0 */
CANVAS_COLOR(SelectedWaveForm,"selected waveform outline", "colorA", HSV(0,-1,-0.941176,0.8)) /*0 */
CANVAS_COLOR(SelectionRect,"selection rect", "colorClight", HSV(0.909091,-0.864754,-0.0431373,0.466667)) /*0.909091 */
CANVAS_COLOR(Selection,"selection", "colorA", HSV(0,-1,-0.611765,0.698039)) /*0 */
CANVAS_COLOR(Shuttle,"shuttle", "colorClight", HSV(0,-0.175824,-0.286275,1)) /*0 */
CANVAS_COLOR(Silence,"silence", "colorD", HSV(0,-0.619608,0,0.478431)) /*0 */
CANVAS_COLOR(SilenceText,"silence text", "colorDdark", HSV(17.7647,-0.0555556,-0.576471,1)) /*17.7647 */
CANVAS_COLOR(MonoPannerOutline,"mono panner outline", "colorDdark", HSV(-17.7209,-0.542553,-0.631373,1)) /*17.7209 */
CANVAS_COLOR(MonoPannerFill,"mono panner fill", "colorDlight", HSV(17.8537,-0.598039,-0.2,0.788235)) /*17.8537 */
CANVAS_COLOR(MonoPannerText,"mono panner text", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(MonoPannerBackground,"mono panner bg", "colorA", HSV(0,-0.891304,-0.819608,1)) /*0 */
CANVAS_COLOR(MonoPannerPositionFill,"mono panner position fill", "colorDlight", HSV(17.7895,-0.681564,-0.298039,1)) /*17.7895 */
CANVAS_COLOR(MonoPannerPositionOutline,"mono panner position outline", "colorDdark", HSV(-17.7209,-0.542553,-0.631373,1)) /*17.7209 */
CANVAS_COLOR(StereoPannerOutline,"stereo panner outline", "colorDdark", HSV(-17.7209,-0.542553,-0.631373,1)) /*17.7209 */
CANVAS_COLOR(StereoPannerFill,"stereo panner fill", "colorDlight", HSV(17.8537,-0.598039,-0.2,0.788235)) /*17.8537 */
CANVAS_COLOR(StereoPannerText,"stereo panner text", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(StereoPannerBackground,"stereo panner bg", "colorA", HSV(0,-0.891304,-0.819608,1)) /*0 */
CANVAS_COLOR(StereoPannerRule,"stereo panner rule", "colorDdark", HSV(-17.7931,-0.543307,-0.501961,1)) /*17.7931 */
CANVAS_COLOR(StereoPannerMonoOutline,"stereo panner mono outline", "colorABlight", HSV(0,0,-0.372549,1)) /*0 */
CANVAS_COLOR(StereoPannerMonoFill,"stereo panner mono fill", "colorAB", HSV(0.139535,-0.446352,-0.0862745,0.792157)) /*0.139535 */
CANVAS_COLOR(StereoPannerMonoText,"stereo panner mono text", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(StereoPannerMonoBackground,"stereo panner mono bg", "colorA", HSV(0,-0.891304,-0.819608,1)) /*0 */
CANVAS_COLOR(StereoPannerInvertedOutline,"stereo panner inverted outline", "colorA", HSV(0,0,-0.25098,1)) /*0 */
CANVAS_COLOR(StereoPannerInvertedFill,"stereo panner inverted fill", "colorA", HSV(0,-0.684211,-0.105882,0.788235)) /*0 */
CANVAS_COLOR(StereoPannerInvertedText,"stereo panner inverted text", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(StereoPannerInvertedBackground,"stereo panner inverted bg", "colorA", HSV(0,-0.891304,-0.819608,1)) /*0 */
CANVAS_COLOR(TempoBar,"tempo bar", "colorDdark", HSV(-2,-0.88189,-0.501961,0.8)) /*2 */
CANVAS_COLOR(TempoMarker,"tempo marker", "colorA", HSV(0,-0.272727,-0.0509804,1)) /*0 */
CANVAS_COLOR(TimeAxisFrame,"time axis frame", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(SelectedTimeAxisFrame,"selected time axis frame", "colorA", HSV(0,0,-0.0666667,1)) /*0 */
CANVAS_COLOR(TimeStretchFill,"time stretch fill", "colorA", HSV(0,-0.800885,-0.113725,0.588235)) /*0 */
CANVAS_COLOR(TimeStretchOutline,"time stretch outline", "colorA", HSV(0,-1,-0.611765,0.588235)) /*0 */
CANVAS_COLOR(MonitorKnobArcStart,"monitor knob: arc start", "colorDlight", HSV(0.0722892,-0.528409,-0.309804,1)) /*0.0722892 */
CANVAS_COLOR(MonitorKnobArcEnd,"monitor knob: arc end", "colorDlight", HSV(0.202247,-0.190909,-0.568627,1)) /*0.202247 */
CANVAS_COLOR(TransportDragRect,"transport drag rect", "colorA", HSV(0,-1,-0.411765,0.776471)) /*0 */
CANVAS_COLOR(TransportLoopRect,"transport loop rect", "colorC", HSV(0.0674157,-0.252101,-0.533333,0.976471)) /*0.0674157 */
CANVAS_COLOR(TransportMarkerBar,"transport marker bar", "colorDdark", HSV(1,-0.921053,-0.403922,0.8)) /*1 */
CANVAS_COLOR(TransportPunchRect,"transport punch rect", "colorA", HSV(0,-0.366972,-0.572549,0.898039)) /*0 */
CANVAS_COLOR(TrimHandleLocked,"trim handle locked", "colorA", HSV(0,-0.0641026,-0.0823529,0.156863)) /*0 */
CANVAS_COLOR(TrimHandle,"trim handle", "colorDA", HSV(-18,0,0,0.266667)) /*18 */
CANVAS_COLOR(VerboseCanvasCursor,"verbose canvas cursor", "colorB", HSV(-0.0287081,-0.180392,0,0.737255)) /*0.0287081 */
CANVAS_COLOR(VestigialFrame,"vestigial frame", "colorA", HSV(0,-1,-1,0.0588235)) /*0 */
CANVAS_COLOR(VideoBar,"video timeline bar", "colorA", HSV(0,-1,-0.811765,1)) /*0 */
CANVAS_COLOR(FrameBase,"region base", "colorDdark", HSV(-17.0769,-0.909722,-0.435294,1)) /*17.0769 */
CANVAS_COLOR(CoveredRegion,"region area covered by another region", "colorA", HSV(0,-1,-0.686275,0.690196)) /*0 */
CANVAS_COLOR(WaveForm,"waveform outline", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(WaveFormClip,"clipped waveform", "colorA", HSV(0,0,0,0.898039)) /*0 */
CANVAS_COLOR(WaveFormFill,"waveform fill", "colorA", HSV(0,-1,0,0.85098)) /*0 */
CANVAS_COLOR(ZeroLine,"zero line", "colorA", HSV(0,-1,-0.501961,0.878431)) /*0 */
CANVAS_COLOR(MonitorSectionKnob,"monitor knob", "colorA", HSV(0,-0.941176,-0.666667,1)) /*0 */
CANVAS_COLOR(ButtonBorder,"border color", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(ProcessorPreFaderFill,"processor prefader: fill", "colorA", HSV(0,-0.444444,-0.470588,1)) /*0 */
CANVAS_COLOR(ProcessorPreFaderFillActive,"processor prefader: fill active", "colorA", HSV(0,-0.552083,-0.623529,1)) /*0 */
CANVAS_COLOR(ProcessorPreFaderLED,"processor prefader: led", "colorC", HSV(-17.831,-0.164706,-0.666667,1)) /*17.831 */
CANVAS_COLOR(ProcessorPreFaderLEDActive,"processor prefader: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(ProcessorPreFaderText,"processor prefader: text", "colorB", HSV(-2.57143,-0.958824,-0.333333,1)) /*2.57143 */
CANVAS_COLOR(ProcessorPreFaderTextActive,"processor prefader: text active", "colorB", HSV(6,-0.991597,-0.0666667,1)) /*6 */
CANVAS_COLOR(ProcessorFaderFill,"processor fader: fill", "colorDlight", HSV(0.0722892,-0.528409,-0.309804,1)) /*0.0722892 */
CANVAS_COLOR(ProcessorFaderFillActive,"processor fader: fill active", "colorDlight", HSV(0.113208,-0.258741,-0.439216,1)) /*0.113208 */
CANVAS_COLOR(ProcessorFaderLED,"processor fader: led", "colorC", HSV(-17.831,-0.164706,-0.666667,1)) /*17.831 */
CANVAS_COLOR(ProcessorFaderLEDActive,"processor fader: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(ProcessorFaderText,"processor fader: text", "colorB", HSV(-2.57143,-0.958824,-0.333333,1)) /*2.57143 */
CANVAS_COLOR(ProcessorFaderTextActive,"processor fader: text active", "colorB", HSV(6,-0.991597,-0.0666667,1)) /*6 */
CANVAS_COLOR(ProcessorPostFaderFill,"processor postfader: fill", "colorClight", HSV(18,-0.666667,-0.647059,1)) /*18 */
CANVAS_COLOR(ProcessorPostFaderFillActive,"processor postfader: fill active", "colorC", HSV(-0.375,-0.536232,-0.729412,1)) /*0.375 */
CANVAS_COLOR(ProcessorPostFaderLED,"processor postfader: led", "colorC", HSV(-17.831,-0.164706,-0.666667,1)) /*17.831 */
CANVAS_COLOR(ProcessorPostFaderLEDActive,"processor postfader: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(ProcessorPostFaderText,"processor postfader: text", "colorB", HSV(-2.57143,-0.958824,-0.333333,1)) /*2.57143 */
CANVAS_COLOR(ProcessorPostFaderTextActive,"processor postfader: text active", "colorB", HSV(6,-0.991597,-0.0666667,1)) /*6 */
CANVAS_COLOR(ProcessorControlButtonFill,"processor control button: fill", "colorA", HSV(0,-1,-0.866667,1)) /*0 */
CANVAS_COLOR(ProcessorControlButtonFillActive,"processor control button: fill active", "colorA", HSV(0,-1,-0.8,1)) /*0 */
CANVAS_COLOR(ProcessorControlButtonLED,"processor control button: led", "colorA", HSV(0,-1,-0.937255,1)) /*0 */
CANVAS_COLOR(ProcessorControlButtonLEDActive,"processor control button: led active", "colorDlight", HSV(0.0722892,-0.528409,-0.309804,1)) /*0.0722892 */
CANVAS_COLOR(ProcessorControlButtonText,"processor control button: text", "colorA", HSV(0,-1,0,1)) /*0 */
CANVAS_COLOR(ProcessorControlButtonTextActive,"processor control button: text active", "colorA", HSV(0,-1,0,1)) /*0 */
CANVAS_COLOR(MonitorButtonFill,"monitor button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(MonitorButtonFillActive,"monitor button: fill active", "colorABlight", HSV(-0.0625,-0.0253807,-0.227451,1)) /*0.0625 */
CANVAS_COLOR(MonitorButtonLED,"monitor button: led", "colorA", HSV(0,0,-0.6,1)) /*0 */
CANVAS_COLOR(MonitorButtonLEDActive,"monitor button: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorButtonText,"monitor button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorButtonTextActive,"monitor button: text active", "colorA", HSV(0,-1,-0.898039,1)) /*0 */
CANVAS_COLOR(SoloIsolateButtonFill,"solo isolate: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(SoloIsolateButtonFillActive,"solo isolate: fill active", "colorAB", HSV(-0.857143,-0.837209,-0.662745,1)) /*0.857143 */
CANVAS_COLOR(SoloIsolateButtonLED,"solo isolate: led", "colorA", HSV(0,0,-0.6,1)) /*0 */
CANVAS_COLOR(SoloIsolateButtonLEDActive,"solo isolate: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SoloIsolateButtonText,"solo isolate: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(SoloIsolateButtonTextActive,"solo isolate: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(SoloSafeButtonFill,"solo safe: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(SoloSafeButtonFillActive,"solo safe: fill active", "colorAB", HSV(-0.857143,-0.837209,-0.662745,1)) /*0.857143 */
CANVAS_COLOR(SoloSafeButtonLED,"solo safe: led", "colorA", HSV(0,0,-0.6,1)) /*0 */
CANVAS_COLOR(SoloSafeButtonLEDActive,"solo safe: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SoloSafeButtonText,"solo safe: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(SoloSafeButtonTextActive,"solo safe: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MidiDeviceButtonFill,"midi device: fill", "colorDdark", HSV(-0.666667,-0.903226,-0.635294,1)) /*0.666667 */
CANVAS_COLOR(MidiDeviceButtonFillActive,"midi device: fill active", "colorDdark", HSV(-2.57143,-0.907895,-0.701961,1)) /*2.57143 */
CANVAS_COLOR(MidiDeviceButtonLED,"midi device: led", "colorC", HSV(-0.117647,0,-0.6,1)) /*0.117647 */
CANVAS_COLOR(MidiDeviceButtonLEDActive,"midi device: led active", "colorC", HSV(0.117647,0,0,1)) /*0.117647 */
CANVAS_COLOR(MidiDeviceButtonText,"midi device: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MidiDeviceButtonTextActive,"midi device: text active", "colorB", HSV(6,-0.991597,-0.0666667,1)) /*6 */
CANVAS_COLOR(MeterBridgePeakIndicatorFill,"meterbridge peakindicator: fill", "colorA", HSV(0,-1,-0.733333,1)) /*0 */
CANVAS_COLOR(MeterBridgePeakIndicatorFillActive,"meterbridge peakindicator: fill active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgePeakIndicatorLED,"meterbridge peakindicator: led", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgePeakIndicatorLEDActive,"meterbridge peakindicator: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgePeakIndicatorText,"meterbridge peakindicator: text", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgePeakIndicatorTextActive,"meterbridge peakindicator: text active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgeLabelFill,"meterbridge label: fill", "colorA", HSV(0,-1,-0.733333,1)) /*0 */
CANVAS_COLOR(MeterBridgeLabelFillActive,"meterbridge label: fill active", "colorA", HSV(0,-1,-0.8,1)) /*0 */
CANVAS_COLOR(MeterBridgeLabelLED,"meterbridge label: led", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgeLabelLEDActive,"meterbridge label: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MeterBridgeLabelText,"meterbridge label: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MeterBridgeLabelTextActive,"meterbridge label: text active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionCutButtonFill,"monitor section cut: fill", "colorAB", HSV(-0.857143,-0.926316,-0.627451,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionCutButtonFillActive,"monitor section cut: fill active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionCutButtonLED,"monitor section cut: led", "colorABlight", HSV(0.226415,-0.253521,-0.721569,1)) /*0.226415 */
CANVAS_COLOR(MonitorSectionCutButtonLEDActive,"monitor section cut: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(MonitorSectionCutButtonText,"monitor section cut: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionCutButtonTextActive,"monitor section cut: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(MonitorSectionDimButtonFill,"monitor section dim: fill", "colorAB", HSV(-0.857143,-0.926316,-0.627451,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionDimButtonFillActive,"monitor section dim: fill active", "colorABlight", HSV(-0.107143,-0.0218341,-0.101961,1)) /*0.107143 */
CANVAS_COLOR(MonitorSectionDimButtonLED,"monitor section dim: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MonitorSectionDimButtonLEDActive,"monitor section dim: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(MonitorSectionDimButtonText,"monitor section dim: text", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionDimButtonTextActive,"monitor section dim: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloButtonFill,"monitor section solo: fill", "colorAB", HSV(-0.857143,-0.926316,-0.627451,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloButtonFillActive,"monitor section solo: fill active", "colorClight", HSV(-0.160428,0,-0.266667,1)) /*0.160428 */
CANVAS_COLOR(MonitorSectionSoloButtonLED,"monitor section solo: led", "colorABlight", HSV(0.226415,-0.253521,-0.721569,1)) /*0.226415 */
CANVAS_COLOR(MonitorSectionSoloButtonLEDActive,"monitor section solo: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionSoloButtonText,"monitor section solo: text", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MonitorSectionSoloButtonTextActive,"monitor section solo: text active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MonitorSectionInvertButtonFill,"monitor section invert: fill", "colorAB", HSV(-0.857143,-0.926316,-0.627451,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionInvertButtonFillActive,"monitor section invert: fill active", "colorDdark", HSV(0.084507,-0.317308,-0.184314,1)) /*0.084507 */
CANVAS_COLOR(MonitorSectionInvertButtonLED,"monitor section invert: led", "colorABlight", HSV(0.226415,-0.253521,-0.721569,1)) /*0.226415 */
CANVAS_COLOR(MonitorSectionInvertButtonLEDActive,"monitor section invert: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(MonitorSectionInvertButtonText,"monitor section invert: text", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MonitorSectionInvertButtonTextActive,"monitor section invert: text active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MonitorSectionMonoButtonFill,"monitor section mono: fill", "colorAB", HSV(-0.857143,-0.926316,-0.627451,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionMonoButtonFillActive,"monitor section mono: fill active", "colorDdark", HSV(0.084507,-0.260417,-0.247059,1)) /*0.084507 */
CANVAS_COLOR(MonitorSectionMonoButtonLED,"monitor section mono: led", "colorABlight", HSV(0.226415,-0.253521,-0.721569,1)) /*0.226415 */
CANVAS_COLOR(MonitorSectionMonoButtonLEDActive,"monitor section mono: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(MonitorSectionMonoButtonText,"monitor section mono: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionMonoButtonTextActive,"monitor section mono: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloModelButtonFill,"monitor section solo model: fill", "colorAB", HSV(-0.857143,-0.924731,-0.635294,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloModelButtonFillActive,"monitor section solo model: fill active", "colorAB", HSV(-0.857143,-0.837209,-0.662745,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloModelButtonLED,"monitor section solo model: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MonitorSectionSoloModelButtonLEDActive,"monitor section solo model: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionSoloModelButtonText,"monitor section solo model: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloModelButtonTextActive,"monitor section solo model: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonFill,"monitor solo override: fill", "colorAB", HSV(-0.857143,-0.924731,-0.635294,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonFillActive,"monitor solo override: fill active", "colorAB", HSV(-0.857143,-0.837209,-0.662745,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonLED,"monitor solo override: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonLEDActive,"monitor solo override: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonText,"monitor solo override: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloOverrideButtonTextActive,"monitor solo override: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonFill,"monitor solo exclusive: fill", "colorAB", HSV(-0.857143,-0.924731,-0.635294,1)) /*0.857143 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonFillActive,"monitor solo exclusive: fill active", "colorAB", HSV(2,-0.825581,-0.662745,1)) /*2 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonLED,"monitor solo exclusive: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonLEDActive,"monitor solo exclusive: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonText,"monitor solo exclusive: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MonitorSectionSoloExclusiveButtonTextActive,"monitor solo exclusive: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(RudeSoloFill,"rude solo: fill", "colorA", HSV(0,-0.740385,-0.592157,1)) /*0 */
CANVAS_COLOR(RudeSoloFillActive,"rude solo: fill active", "colorA", HSV(0,-0.119469,-0.113725,1)) /*0 */
CANVAS_COLOR(RudeSoloLED,"rude solo: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(RudeSoloLEDActive,"rude solo: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(RudeSoloText,"rude solo: text", "colorA", HSV(0,-1,-0.411765,1)) /*0 */
CANVAS_COLOR(RudeSoloTextActive,"rude solo: text active", "colorA", HSV(0,-1,-0.101961,1)) /*0 */
CANVAS_COLOR(RudeIsolateFill,"rude isolate: fill", "colorDlight", HSV(0.26087,-0.417722,-0.690196,1)) /*0.26087 */
CANVAS_COLOR(RudeIsolateFillActive,"rude isolate: fill active", "colorDlight", HSV(-0.253521,-0.719368,-0.00784314,1)) /*0.253521 */
CANVAS_COLOR(RudeIsolateLED,"rude isolate: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(RudeIsolateLEDActive,"rude isolate: led active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(RudeIsolateText,"rude isolate: text", "colorA", HSV(0,-1,-0.407843,1)) /*0 */
CANVAS_COLOR(RudeIsolateTextActive,"rude isolate: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(RudeAuditionFill,"rude audition: fill", "colorA", HSV(0,-0.740385,-0.592157,1)) /*0 */
CANVAS_COLOR(RudeAuditionFillActive,"rude audition: fill active", "colorA", HSV(0,-0.119469,-0.113725,1)) /*0 */
CANVAS_COLOR(RudeAuditionLED,"rude audition: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(RudeAuditionLEDActive,"rude audition: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(RudeAuditionText,"rude audition: text", "colorA", HSV(0,-1,-0.407843,1)) /*0 */
CANVAS_COLOR(RudeAuditionTextActive,"rude audition: text active", "colorA", HSV(0,-1,0,1)) /*0 */
CANVAS_COLOR(FeedbackAlertFill,"feedback alert: fill", "colorA", HSV(0,-0.740385,-0.592157,1)) /*0 */
CANVAS_COLOR(FeedbackAlertFillActive,"feedback alert: fill active", "colorA", HSV(0,-0.119469,-0.113725,1)) /*0 */
CANVAS_COLOR(FeedbackAlertLED,"feedback alert: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(FeedbackAlertLEDActive,"feedback alert: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(FeedbackAlertText,"feedback alert: text", "colorA", HSV(0,-1,-0.411765,1)) /*0 */
CANVAS_COLOR(FeedbackAlertTextActive,"feedback alert: text active", "colorA", HSV(0,-1,-0.101961,1)) /*0 */
CANVAS_COLOR(InvertButtonFill,"invert button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(InvertButtonFillActive,"invert button: fill active", "colorDdark", HSV(0.084507,-0.317308,-0.184314,1)) /*0.084507 */
CANVAS_COLOR(InvertButtonLED,"invert button: led", "colorABlight", HSV(0.226415,-0.253521,-0.721569,1)) /*0.226415 */
CANVAS_COLOR(InvertButtonLEDActive,"invert button: led active", "colorC", HSV(-18,-0.384236,-0.203922,1)) /*18 */
CANVAS_COLOR(InvertButtonText,"invert button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(InvertButtonTextActive,"invert button: text active", "colorA", HSV(0,-1,-0.25098,1)) /*0 */
CANVAS_COLOR(MuteButtonFill,"mute button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(MuteButtonFillActive,"mute button: fill active", "colorB", HSV(-0.0962567,0,-0.266667,1)) /*0.0962567 */
CANVAS_COLOR(MuteButtonLED,"mute button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MuteButtonLEDActive,"mute button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MuteButtonText,"mute button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(MuteButtonTextActive,"mute button: text active", "colorA", HSV(0,-1,-0.901961,1)) /*0 */
CANVAS_COLOR(SoloButtonFill,"solo button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(SoloButtonFillActive,"solo button: fill active", "colorClight", HSV(-0.160428,0,-0.266667,1)) /*0.160428 */
CANVAS_COLOR(SoloButtonLED,"solo button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(SoloButtonLEDActive,"solo button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(SoloButtonText,"solo button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(SoloButtonTextActive,"solo button: text active", "colorA", HSV(0,-1,-0.901961,1)) /*0 */
CANVAS_COLOR(RecEnableButtonFill,"record enable button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(RecEnableButtonFillActive,"record enable button: fill active", "colorA", HSV(0,-0.0773481,-0.290196,1)) /*0 */
CANVAS_COLOR(RecEnableButtonLED,"record enable button: led", "colorAlight", HSV(36,-0.430894,-0.517647,1)) /*36 */
CANVAS_COLOR(RecEnableButtonLEDActive,"record enable button: led active", "colorAlight", HSV(35.7391,-0.639216,0,1)) /*35.7391 */
CANVAS_COLOR(RecEnableButtonText,"record enable button: text", "colorA", HSV(0,-1,-0.352941,1)) /*0 */
CANVAS_COLOR(RecEnableButtonTextActive,"record enable button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(SendButtonFill,"send alert button: fill", "colorClight", HSV(2,-0.825581,-0.662745,1)) /*2 */
CANVAS_COLOR(SendButtonFillActive,"send alert button: fill active", "colorClight", HSV(0.15544,-0.157205,-0.101961,1)) /*0.15544 */
CANVAS_COLOR(SendButtonLED,"send alert button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(SendButtonLEDActive,"send alert button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(SendButtonText,"send alert button: text", "colorA", HSV(0,-1,-0.2,1)) /*0 */
CANVAS_COLOR(SendButtonTextActive,"send alert button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(TransportButtonFill,"transport button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(TransportButtonFillActive,"transport button: fill active", "colorC", HSV(-0.110429,0,-0.360784,1)) /*0.110429 */
CANVAS_COLOR(TransportButtonLED,"transport button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportButtonLEDActive,"transport button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportButtonText,"transport button: text", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportButtonTextActive,"transport button: text active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportRecenableButtonFill,"transport recenable button: fill", "colorA", HSV(0,-0.663158,-0.627451,1)) /*0 */
CANVAS_COLOR(TransportRecenableButtonFillActive,"transport recenable button: fill active", "colorA", HSV(0,-0.0773481,-0.290196,1)) /*0 */
CANVAS_COLOR(TransportRecenableButtonLED,"transport recenable button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportRecenableButtonLEDActive,"transport recenable button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportRecenableButtonText,"transport recenable button: text", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportRecenableButtonTextActive,"transport recenable button: text active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(TransportOptionButtonFill,"transport option button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(TransportOptionButtonFillActive,"transport option button: fill active", "colorDdark", HSV(-2.57143,-0.91358,-0.682353,1)) /*2.57143 */
CANVAS_COLOR(TransportOptionButtonLED,"transport option button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(TransportOptionButtonLEDActive,"transport option button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TransportOptionButtonText,"transport option button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(TransportOptionButtonTextActive,"transport option button: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(TransportActiveOptionButtonFill,"transport active option button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(TransportActiveOptionButtonFillActive,"transport active option button: fill active", "colorC", HSV(-0.110429,0,-0.360784,1)) /*0.110429 */
CANVAS_COLOR(TransportActiveOptionButtonLED,"transport active option button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(TransportActiveOptionButtonLEDActive,"transport active option button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TransportActiveOptionButtonText,"transport active option button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(TransportActiveOptionButtonTextActive,"transport active option button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(TrackNumberLabelFill,"tracknumber label: fill", "colorA", HSV(0,-1,-0.733333,1)) /*0 */
CANVAS_COLOR(TrackNumberLabelFillActive,"tracknumber label: fill active", "colorA", HSV(0,-1,-0.8,1)) /*0 */
CANVAS_COLOR(TrackNumberLabelLED,"tracknumber label: led", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TrackNumberLabelLEDActive,"tracknumber label: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TrackNumberLabelText,"tracknumber label: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(TrackNumberLabelTextActive,"tracknumber label: text active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(PluginBypassButtonFill,"plugin bypass button: fill", "colorAB", HSV(-0.857143,-0.924731,-0.635294,1)) /*0.857143 */
CANVAS_COLOR(PluginBypassButtonFillActive,"plugin bypass button: fill active", "colorAB", HSV(-0.857143,-0.837209,-0.662745,1)) /*0.857143 */
CANVAS_COLOR(PluginBypassButtonLED,"plugin bypass button: led", "colorA", HSV(0,0,-0.6,1)) /*0 */
CANVAS_COLOR(PluginBypassButtonLEDActive,"plugin bypass button: led active", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(PluginBypassButtonText,"plugin bypass button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(PluginBypassButtonTextActive,"plugin bypass button: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(PunchButtonFill,"punch button: fill", "colorA", HSV(0,-0.65625,-0.623529,1)) /*0 */
CANVAS_COLOR(PunchButtonFillActive,"punch button: fill active", "colorA", HSV(0,-0.133333,-0.0588235,1)) /*0 */
CANVAS_COLOR(PunchButtonLED,"punch button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(PunchButtonLEDActive,"punch button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(PunchButtonText,"punch button: text", "colorA", HSV(0,-1,-0.352941,1)) /*0 */
CANVAS_COLOR(PunchButtonTextActive,"punch button: text active", "colorA", HSV(0,-1,-0.152941,1)) /*0 */
CANVAS_COLOR(MouseModeButtonFill,"mouse mode button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(MouseModeButtonFillActive,"mouse mode button: fill active", "colorC", HSV(0.0674157,0,-0.301961,1)) /*0.0674157 */
CANVAS_COLOR(MouseModeButtonLED,"mouse mode button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MouseModeButtonLEDActive,"mouse mode button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MouseModeButtonText,"mouse mode button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(MouseModeButtonTextActive,"mouse mode button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(NudgeButtonFill,"nudge button: fill", "colorA", HSV(0,-0.653846,-0.592157,1)) /*0 */
CANVAS_COLOR(NudgeButtonFillActive,"nudge button: fill active", "colorDdark", HSV(6,-0.927536,-0.729412,1)) /*6 */
CANVAS_COLOR(NudgeButtonLED,"nudge button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(NudgeButtonLEDActive,"nudge button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(NudgeButtonText,"nudge button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(NudgeButtonTextActive,"nudge button: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(ZoomButtonFill,"zoom button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(ZoomButtonFillActive,"zoom button: fill active", "colorC", HSV(-0.110429,0,-0.360784,1)) /*0.110429 */
CANVAS_COLOR(ZoomButtonLED,"zoom button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(ZoomButtonLEDActive,"zoom button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(ZoomButtonText,"zoom button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(ZoomButtonTextActive,"zoom button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(ZoomMenuFill,"zoom menu: fill", "colorB", HSV(0.375,-0.79085,-0.4,0.313725)) /*0.375 */
CANVAS_COLOR(ZoomMenuFillActive,"zoom menu: fill active", "colorDdark", HSV(6,-0.927536,-0.729412,1)) /*6 */
CANVAS_COLOR(ZoomMenuLED,"zoom menu: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(ZoomMenuLEDActive,"zoom menu: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(ZoomMenuText,"zoom menu: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(ZoomMenuTextActive,"zoom menu: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(RouteButtonFill,"route button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(RouteButtonFillActive,"route button: fill active", "colorA", HSV(0,-1,-0.929412,1)) /*0 */
CANVAS_COLOR(RouteButtonLED,"route button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(RouteButtonLEDActive,"route button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(RouteButtonText,"route button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(RouteButtonTextActive,"route button: text active", "colorA", HSV(0,-1,-0.901961,1)) /*0 */
CANVAS_COLOR(MixerStripButtonFill,"mixer strip button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(MixerStripButtonFillActive,"mixer strip button: fill active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MixerStripButtonLED,"mixer strip button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MixerStripButtonLEDActive,"mixer strip button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MixerStripButtonText,"mixer strip button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(MixerStripButtonTextActive,"mixer strip button: text active", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(MixerStripNameButtonFill,"mixer strip name button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(MixerStripNameButtonFillActive,"mixer strip name button: fill active", "colorA", HSV(0,-1,-0.929412,1)) /*0 */
CANVAS_COLOR(MixerStripNameButtonLED,"mixer strip name button: led", "colorABlight", HSV(-0.303797,0,-0.690196,1)) /*0.303797 */
CANVAS_COLOR(MixerStripNameButtonLEDActive,"mixer strip name button: led active", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(MixerStripNameButtonText,"mixer strip name button: text", "colorDdark", HSV(-1.05882,-0.926724,-0.0901961,1)) /*1.05882 */
CANVAS_COLOR(MixerStripNameButtonTextActive,"mixer strip name button: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(MidiInputButtonFill,"midi input button: fill", "colorCD", HSV(-2,-0.971154,-0.592157,1)) /*2 */
CANVAS_COLOR(MidiInputButtonFillActive,"midi input button: fill active", "colorC", HSV(-0.110429,0,-0.360784,1)) /*0.110429 */
CANVAS_COLOR(MidiInputButtonLED,"midi input button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MidiInputButtonLEDActive,"midi input button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MidiInputButtonText,"midi input button: text", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(MidiInputButtonTextActive,"midi input button: text active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(LockButtonFill,"lock button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(LockButtonFillActive,"lock button: fill active", "colorDdark", HSV(6,-0.927536,-0.729412,1)) /*6 */
CANVAS_COLOR(LockButtonLED,"lock button: led", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(LockButtonLEDActive,"lock button: led active", "colorA", HSV(0,-1,-1,0)) /*0 */
CANVAS_COLOR(LockButtonText,"lock button: text", "colorDdark", HSV(-0.666667,0,-0.858824,1)) /*0.666667 */
CANVAS_COLOR(LockButtonTextActive,"lock button: text active", "colorDdark", HSV(-1.05882,-0.921659,-0.14902,1)) /*1.05882 */
CANVAS_COLOR(GenericButtonFill,"generic button: fill", "colorDdark", HSV(-2.57143,-0.932692,-0.592157,1)) /*2.57143 */
CANVAS_COLOR(GenericButtonFillActive,"generic button: fill active", "colorA", HSV(0,0,-0.00784314,1)) /*0 */
CANVAS_COLOR(GenericButtonLED,"generic button: led", "colorDdark", HSV(-0.666667,-0.43038,-0.690196,1)) /*0.666667 */
CANVAS_COLOR(GenericButtonLEDActive,"generic button: led active", "colorDdark", HSV(0.0271493,-0.133333,0,1)) /*0.0271493 */
CANVAS_COLOR(GenericButtonText,"generic button: text", "colorDdark", HSV(-1.05882,-0.921296,-0.152941,1)) /*1.05882 */
CANVAS_COLOR(GenericButtonTextActive,"generic button: text active", "colorA", HSV(0,-1,-0.901961,1)) /*0 */
CANVAS_COLOR(TransportClockBackground,"transport clock: background", "colorA", HSV(0,-1,-0.85098,1)) /*0 */
CANVAS_COLOR(TransportClockText,"transport clock: text", "colorClight", HSV(-0.140845,-0.141129,-0.027451,1)) /*0.140845 */
CANVAS_COLOR(TransportClockEditedText,"transport clock: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TransportClockCursor,"transport clock: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SecondaryClockBackground,"secondary clock: background", "colorA", HSV(0,-1,-0.85098,1)) /*0 */
CANVAS_COLOR(SecondaryClockText,"secondary clock: text", "colorClight", HSV(-0.140845,-0.141129,-0.027451,1)) /*0.140845 */
CANVAS_COLOR(SecondaryClockEditedText,"secondary clock: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SecondaryClockCursor,"secondary clock: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TransportDeltaClockBackground,"transport delta clock: background", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(TransportDeltaClockText,"transport delta clock: text", "colorDlight", HSV(-0.222222,-0.564516,-0.027451,1)) /*0.222222 */
CANVAS_COLOR(TransportDeltaClockEditedText,"transport delta clock: edited text", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(TransportDeltaClockCursor,"transport delta clock: cursor", "colorA", HSV(0,0,-0.054902,1)) /*0 */
CANVAS_COLOR(SecondaryDeltaClockBackground,"secondary delta clock: background", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(SecondaryDeltaClockText,"secondary delta clock: text", "colorDlight", HSV(-0.222222,-0.564516,-0.027451,1)) /*0.222222 */
CANVAS_COLOR(SecondaryDeltaClockEditedText,"secondary delta clock: edited text", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SecondaryDeltaClockCursor,"secondary delta clock: cursor", "colorA", HSV(0,0,-0.054902,1)) /*0 */
CANVAS_COLOR(BigClockBackground,"big clock: background", "colorA", HSV(0,-1,-0.992157,1)) /*0 */
CANVAS_COLOR(BigClockText,"big clock: text", "colorA", HSV(0,-1,-0.0588235,1)) /*0 */
CANVAS_COLOR(BigClockEditedText,"big clock: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(BigClockCursor,"big clock: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(BigClockActiveBackground,"big clock active: background", "colorA", HSV(0,-1,-0.992157,1)) /*0 */
CANVAS_COLOR(BigClockActiveText,"big clock active: text", "colorA", HSV(0,0,-0.054902,1)) /*0 */
CANVAS_COLOR(BigClockActiveEditedText,"big clock active: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(BigClockActiveCursor,"big clock active: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(PunchClockBackground,"punch clock: background", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(PunchClockText,"punch clock: text", "colorClight", HSV(0,-0.175824,-0.286275,1)) /*0 */
CANVAS_COLOR(PunchClockEditedText,"punch clock: edited text", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(PunchClockCursor,"punch clock: cursor", "colorA", HSV(0,0,-0.054902,1)) /*0 */
CANVAS_COLOR(SelectionClockBackground,"selection clock: background", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(SelectionClockText,"selection clock: text", "colorClight", HSV(0,-0.175824,-0.286275,1)) /*0 */
CANVAS_COLOR(SelectionClockEditedText,"selection clock: edited text", "colorA", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(SelectionClockCursor,"selection clock: cursor", "colorA", HSV(0,0,-0.054902,1)) /*0 */
CANVAS_COLOR(NudgeClockBackground,"nudge clock: background", "colorA", HSV(0,-1,-0.85098,1)) /*0 */
CANVAS_COLOR(NudgeClockText,"nudge clock: text", "colorClight", HSV(0,-0.175824,-0.286275,1)) /*0 */
CANVAS_COLOR(NudgeClockEditedText,"nudge clock: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(NudgeClockCursor,"nudge clock: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(GenericClockBackground,"clock: background", "colorA", HSV(0,-1,-1,1)) /*0 */
CANVAS_COLOR(GenericClockText,"clock: text", "colorClight", HSV(0,-0.175824,-0.286275,1)) /*0 */
CANVAS_COLOR(GenericClockEditedText,"clock: edited text", "colorABlight", HSV(0,0,0,1)) /*0 */
CANVAS_COLOR(GenericClockCursor,"clock: cursor", "colorABlight", HSV(0,0,0,1)) /*0 */

View File

@ -14,469 +14,6 @@
<Option name="draggable-playhead" value="1"/>
</UI>
<Canvas>
<Option name="active crossfade" value="20b2af2e"/>
<Option name="arrange base" value="595959ff"/>
<Option name="audio bus base" value="73829968"/>
<Option name="audio master bus base" value="00000000"/>
<Option name="audio track base" value="9daac468"/>
<Option name="automation line" value="44bc59ff"/>
<Option name="automation track fill" value="a0a0ce68"/>
<Option name="automation track outline" value="282828ff"/>
<Option name="cd marker bar" value="9496a3cc"/>
<Option name="crossfade editor base" value="282d49ff"/>
<Option name="crossfade editor line" value="000000ff"/>
<Option name="crossfade editor line shading" value="00a0d154"/>
<Option name="crossfade editor point fill" value="00ff00ff"/>
<Option name="crossfade editor point outline" value="0000ffff"/>
<Option name="crossfade editor wave" value="ffffff28"/>
<Option name="selected crossfade editor wave fill" value="00000000"/>
<Option name="crossfade line" value="000000ff"/>
<Option name="edit point" value="0000ffff"/>
<Option name="entered automation line" value="dd6363ff"/>
<Option name="control point fill" value="ffffff66"/>
<Option name="control point outline" value="55ccccff"/>
<Option name="control point selected" value="ff0000ee"/>
<Option name="entered gain line" value="dd6363ff"/>
<Option name="entered marker" value="dd6363ff"/>
<Option name="frame handle" value="7c00ff96"/>
<Option name="gain line" value="00bc20ff"/>
<Option name="gain line inactive" value="9fbca4c5"/>
<Option name="ghost track base" value="603e7cc6"/>
<Option name="ghost track midi outline" value="00000000"/>
<Option name="ghost track wave" value="202020d9"/>
<Option name="ghost track wave fill" value="20202060"/>
<Option name="ghost track wave clip" value="202020d9"/>
<Option name="ghost track zero line" value="e500e566"/>
<Option name="image track" value="ddddd8ff"/>
<Option name="inactive crossfade" value="e8ed3d77"/>
<Option name="inactive fade handle" value="bbbbbbaa"/>
<Option name="inactive group tab" value="434343ff"/>
<Option name="location cd marker" value="1ee8c4ff"/>
<Option name="location loop" value="35964fff"/>
<Option name="location marker" value="c4f411ff"/>
<Option name="location punch" value="7c3a3aff"/>
<Option name="location range" value="497a59ff"/>
<Option name="marker bar" value="99a1adcc"/>
<Option name="marker bar separator" value="555555ff"/>
<Option name="marker drag line" value="004f00f9"/>
<Option name="marker label" value="000000ff"/>
<Option name="marker track" value="ddddd8ff"/>
<Option name="measure line bar" value="ffffff9c"/>
<Option name="measure line beat" value="a29e9e76"/>
<Option name="meter bar" value="626470cc"/>
<Option name="meter fill: 0" value="008800ff"/>
<Option name="meter fill: 1" value="00aa00ff"/>
<Option name="meter fill: 2" value="00ff00ff"/>
<Option name="meter fill: 3" value="00ff00ff"/>
<Option name="meter fill: 4" value="fff000ff"/>
<Option name="meter fill: 5" value="fff000ff"/>
<Option name="meter fill: 6" value="ff8000ff"/>
<Option name="meter fill: 7" value="ff8000ff"/>
<Option name="meter fill: 8" value="ff0000ff"/>
<Option name="meter fill: 9" value="ff0000ff"/>
<Option name="meter background: bottom" value="333333ff"/>
<Option name="meter background: top" value="444444ff"/>
<Option name="midi meter fill: 0" value="effaa1ff"/>
<Option name="midi meter fill: 1" value="f2c97dff"/>
<Option name="midi meter fill: 2" value="f2c97dff"/>
<Option name="midi meter fill: 3" value="f48f52ff"/>
<Option name="midi meter fill: 4" value="f48f52ff"/>
<Option name="midi meter fill: 5" value="f83913ff"/>
<Option name="midi meter fill: 6" value="f83913ff"/>
<Option name="midi meter fill: 7" value="8fc78eff"/>
<Option name="midi meter fill: 8" value="8fc78eff"/>
<Option name="midi meter fill: 9" value="00f45600"/>
<Option name="meterbridge peakindicator: fill" value="444444ff"/>
<Option name="meterbridge peakindicator: fill active" value="ff0000ff"/>
<Option name="meterbridge label: fill" value="444444ff"/>
<Option name="meterbridge label: fill active" value="333333ff"/>
<Option name="meterbridge label: text" value="c7c7d8ff"/>
<Option name="meter marker" value="f2425bff"/>
<Option name="midi bus base" value="00000000"/>
<Option name="midi frame base" value="393d3766"/>
<Option name="midi note inactive channel" value="00000000"/>
<Option name="midi note color min" value="3f542aff"/>
<Option name="midi note color mid" value="7ea854ff"/>
<Option name="midi note color max" value="bfff80ff"/>
<Option name="selected midi note color min" value="1e1e33ff"/>
<Option name="selected midi note color mid" value="51518aff"/>
<Option name="selected midi note color max" value="8383deff"/>
<Option name="midi note selected" value="b2b2ffff"/>
<Option name="midi note velocity text" value="f4f214bc"/>
<Option name="midi patch change fill" value="50555aa0"/>
<Option name="midi patch change outline" value="c0c5caff"/>
<Option name="midi patch change inactive channel fill" value="50555ac0"/>
<Option name="midi patch change inactive channel outline" value="20252ac0"/>
<Option name="midi sysex fill" value="f1e139a0"/>
<Option name="midi sysex outline" value="a7a7d4ff"/>
<Option name="midi select rect fill" value="8888ff88"/>
<Option name="midi select rect outline" value="5555ffff"/>
<Option name="midi track base" value="b3cca35f"/>
<Option name="name highlight fill" value="0000ffff"/>
<Option name="name highlight outline" value="7c00ff96"/>
<Option name="piano roll black outline" value="f4f4f476"/>
<Option name="piano roll black" value="6c6e6a6b"/>
<Option name="piano roll white" value="979b9565"/>
<Option name="play head" value="ff0000ff"/>
<Option name="processor automation line" value="7aa3f9ff"/>
<Option name="punch line" value="a80000ff"/>
<Option name="range drag bar rect" value="969696c6"/>
<Option name="range drag rect" value="82c696c6"/>
<Option name="range marker bar" value="7d7f8ccc"/>
<Option name="recording rect" value="cc2828ff"/>
<Option name="recorded waveform fill" value="ffffffd9"/>
<Option name="recorded waveform outline" value="0f0f1fff"/>
<Option name="rubber band rect" value="c6c6c659"/>
<Option name="ruler base" value="2c2121ff"/>
<Option name="ruler text" value="e5e5e5ff"/>
<Option name="selected crossfade editor line" value="00dbdbff"/>
<Option name="selected crossfade editor wave" value="f9ea14a0"/>
<Option name="selected region base" value="585c61ff"/>
<Option name="selected waveform fill" value="ffa500d9"/>
<Option name="selected waveform outline" value="0f0f0fcc"/>
<Option name="selection rect" value="e8f4d377"/>
<Option name="selection" value="636363b2"/>
<Option name="shuttle" value="6bb620ff"/>
<Option name="silence" value="9efffd7a"/>
<Option name="silence text" value="0e066cff"/>
<Option name="mono panner outline" value="33445eff"/>
<Option name="mono panner fill" value="7a9bccc9"/>
<Option name="mono panner text" value="000000ff"/>
<Option name="mono panner bg" value="2e2929ff"/>
<Option name="mono panner position fill" value="7a89b3ff"/>
<Option name="mono panner position outline" value="33445eff"/>
<Option name="stereo panner outline" value="33445eff"/>
<Option name="stereo panner fill" value="7a9accc9"/>
<Option name="stereo panner text" value="000000ff"/>
<Option name="stereo panner bg" value="2e2929ff"/>
<Option name="stereo panner rule" value="455c7fff"/>
<Option name="stereo panner mono outline" value="a05600ff"/>
<Option name="stereo panner mono fill" value="e99668ca"/>
<Option name="stereo panner mono text" value="000000ff"/>
<Option name="stereo panner mono bg" value="2e2929ff"/>
<Option name="stereo panner inverted outline" value="bf0a00ff"/>
<Option name="stereo panner inverted fill" value="e4a19cc9"/>
<Option name="stereo panner inverted text" value="000000ff"/>
<Option name="stereo panner inverted bg" value="2e2929ff"/>
<Option name="tempo bar" value="70727fcc"/>
<Option name="tempo marker" value="f2425bff"/>
<Option name="time axis frame" value="000000ff"/>
<Option name="selected time axis frame" value="ee0000ff"/>
<Option name="time stretch fill" value="e2b5b596"/>
<Option name="time stretch outline" value="63636396"/>
<Option name="tracknumber label: fill" value="444444ff"/>
<Option name="tracknumber label: fill active" value="333333ff"/>
<Option name="tracknumber label: text" value="c7c7d8ff"/>
<Option name="transport drag rect" value="969696c6"/>
<Option name="transport loop rect" value="1e7728f9"/>
<Option name="transport marker bar" value="8c8e98cc"/>
<Option name="transport punch rect" value="6d2828e5"/>
<Option name="trim handle locked" value="ea0f0f28"/>
<Option name="trim handle" value="1900ff44"/>
<Option name="verbose canvas cursor" value="fffd2ebc"/>
<Option name="vestigial frame" value="0000000f"/>
<Option name="video timeline bar" value="303030ff"/>
<Option name="region base" value="838890ff"/>
<Option name="region area covered by another region" value="505050b0"/>
<Option name="waveform outline" value="000000ff"/>
<Option name="clipped waveform" value="ff0000e5"/>
<Option name="waveform fill" value="ffffffd9"/>
<Option name="zero line" value="7f7f7fe0"/>
<Option name="zoom rect" value="c6d1b26d"/>
<Option name="monitor knob" value="555050ff"/>
<Option name="monitor knob: arc start" value="5d90b0ff"/>
<Option name="monitor knob: arc end" value="154c6eff"/>
<Option name="button border" value="000000f0"/>
<Option name="border color" value="00000000"/>
<Option name="processor prefader: fill" value="873c3cff"/>
<Option name="processor prefader: fill active" value="603535ff"/>
<Option name="processor prefader: led" value="26550eff"/>
<Option name="processor prefader: led active" value="78cb4eff"/>
<Option name="processor prefader: text" value="aaaaa3ff"/>
<Option name="processor prefader: text active" value="eeeeecff"/>
<Option name="processor fader: fill" value="5d90b0ff"/>
<Option name="processor fader: fill active" value="256d8fff"/>
<Option name="processor fader: led" value="26550eff"/>
<Option name="processor fader: led active" value="78cb4eff"/>
<Option name="processor fader: text" value="aaaaa3ff"/>
<Option name="processor fader: text active" value="eeeeecff"/>
<Option name="processor postfader: fill" value="455a3cff"/>
<Option name="processor postfader: fill active" value="254528ff"/>
<Option name="processor postfader: led" value="26550eff"/>
<Option name="processor postfader: led active" value="78cb4eff"/>
<Option name="processor postfader: text" value="aaaaa3ff"/>
<Option name="processor postfader: text active" value="eeeeecff"/>
<Option name="processor control button: fill" value="222222ff"/>
<Option name="processor control button: fill active" value="333333ff"/>
<Option name="processor control button: led" value="101010ff"/>
<Option name="processor control button: led active" value="5d90b0ff"/>
<Option name="processor control button: text" value="ffffffff"/>
<Option name="processor control button: text active" value="ffffffff"/>
<Option name="midi device: fill" value="54555dff"/>
<Option name="midi device: fill active" value="45464cff"/>
<Option name="midi device: led" value="006600ff"/>
<Option name="midi device: led active" value="00ff00ff"/>
<Option name="midi device: text" value="c7c7d8ff"/>
<Option name="midi device: text active" value="eeeeecff"/>
<Option name="monitor button: fill" value="616268ff"/>
<Option name="monitor button: fill active" value="c56505ff"/>
<Option name="monitor button: led" value="660000ff"/>
<Option name="monitor button: led active" value="ff0000ff"/>
<Option name="monitor button: text" value="c7c7d8ff"/>
<Option name="monitor button: text active" value="1a1a1aff"/>
<Option name="solo isolate: fill" value="616268ff"/>
<Option name="solo isolate: fill active" value="564d48ff"/>
<Option name="solo isolate: led" value="660000ff"/>
<Option name="solo isolate: led active" value="ff0000ff"/>
<Option name="solo isolate: text" value="c7c7d8ff"/>
<Option name="solo isolate: text active" value="c8c8d9ff"/>
<Option name="solo safe: fill" value="616268ff"/>
<Option name="solo safe: fill active" value="564d48ff"/>
<Option name="solo safe: led" value="660000ff"/>
<Option name="solo safe: led active" value="ff0000ff"/>
<Option name="solo safe: text" value="c7c7d8ff"/>
<Option name="solo safe: text active" value="c8c8d9ff"/>
<Option name="meterbridge peaklabel" value="ff1111ff"/>
<Option name="meter color BBC" value="ffa500ff"/>
<Option name="monitor section cut: fill" value="5f5a58ff"/>
<Option name="monitor section cut: fill active" value="ffa500ff"/>
<Option name="monitor section cut: led" value="473812ff"/>
<Option name="monitor section cut: led active" value="78cb4eff"/>
<Option name="monitor section cut: text" value="c7c7d8ff"/>
<Option name="monitor section cut: text active" value="000000ff"/>
<Option name="monitor section dim: fill" value="5f5a58ff"/>
<Option name="monitor section dim: fill active" value="e58505ff"/>
<Option name="monitor section dim: led" value="00000000"/>
<Option name="monitor section dim: led active" value="78cb4eff"/>
<Option name="monitor section dim: text" value="c8c8d9ff"/>
<Option name="monitor section dim: text active" value="c8c8d9ff"/>
<Option name="monitor section solo: fill" value="5f5a58ff"/>
<Option name="monitor section solo: fill active" value="4dbb00ff"/>
<Option name="monitor section solo: led" value="473812ff"/>
<Option name="monitor section solo: led active" value="ffa500ff"/>
<Option name="monitor section solo: text" value="00000000"/>
<Option name="monitor section solo: text active" value="00000000"/>
<Option name="monitor section invert: fill" value="5f5a58ff"/>
<Option name="monitor section invert: fill active" value="4242d0ff"/>
<Option name="monitor section invert: led" value="473812ff"/>
<Option name="monitor section invert: led active" value="78cb4eff"/>
<Option name="monitor section invert: text" value="00000000"/>
<Option name="monitor section invert: text active" value="00000000"/>
<Option name="monitor section mono: fill" value="5f5a58ff"/>
<Option name="monitor section mono: fill active" value="3232c0ff"/>
<Option name="monitor section mono: led" value="473812ff"/>
<Option name="monitor section mono: led active" value="78cb4eff"/>
<Option name="monitor section mono: text" value="c7c7d8ff"/>
<Option name="monitor section mono: text active" value="c8c8d9ff"/>
<Option name="monitor section solo model: fill" value="5d5856ff"/>
<Option name="monitor section solo model: fill active" value="564d48ff"/>
<Option name="monitor section solo model: led" value="4f3300ff"/>
<Option name="monitor section solo model: led active" value="ffa500ff"/>
<Option name="monitor section solo model: text" value="c7c7d8ff"/>
<Option name="monitor section solo model: text active" value="c8c8d9ff"/>
<Option name="monitor solo override: fill" value="5d5856ff"/>
<Option name="monitor solo override: fill active" value="564d48ff"/>
<Option name="monitor solo override: led" value="4f3300ff"/>
<Option name="monitor solo override: led active" value="ffa500ff"/>
<Option name="monitor solo override: text" value="c7c7d8ff"/>
<Option name="monitor solo override: text active" value="c8c8d9ff"/>
<Option name="monitor solo exclusive: fill" value="5d5856ff"/>
<Option name="monitor solo exclusive: fill active" value="564c47ff"/>
<Option name="monitor solo exclusive: led" value="4f3300ff"/>
<Option name="monitor solo exclusive: led active" value="ffa500ff"/>
<Option name="monitor solo exclusive: text" value="c7c7d8ff"/>
<Option name="monitor solo exclusive: text active" value="c8c8d9ff"/>
<Option name="rude solo: fill" value="684d4dff"/>
<Option name="rude solo: fill active" value="e21b1bff"/>
<Option name="rude solo: led" value="00000000"/>
<Option name="rude solo: led active" value="00000000"/>
<Option name="rude solo: text" value="969696ff"/>
<Option name="rude solo: text active" value="e5e5e5ff"/>
<Option name="rude isolate: fill" value="21414fff"/>
<Option name="rude isolate: fill active" value="b6e5fdff"/>
<Option name="rude isolate: led" value="00000000"/>
<Option name="rude isolate: led active" value="000000ff"/>
<Option name="rude isolate: text" value="979797ff"/>
<Option name="rude isolate: text active" value="000000ff"/>
<Option name="rude audition: fill" value="684d4dff"/>
<Option name="rude audition: fill active" value="e21b1bff"/>
<Option name="rude audition: led" value="00000000"/>
<Option name="rude audition: led active" value="00000000"/>
<Option name="rude audition: text" value="979797ff"/>
<Option name="rude audition: text active" value="ffffffff"/>
<Option name="feedback alert: fill" value="684d4dff"/>
<Option name="feedback alert: fill active" value="e21b1bff"/>
<Option name="feedback alert: led" value="00000000"/>
<Option name="feedback alert: led active" value="00000000"/>
<Option name="feedback alert: text" value="969696ff"/>
<Option name="feedback alert: text active" value="e5e5e5ff"/>
<Option name="mute button: fill" value="616268ff"/>
<Option name="mute button: fill active" value="bbbb00ff"/>
<Option name="mute button: led" value="00000000"/>
<Option name="mute button: led active" value="00000000"/>
<Option name="mute button: text" value="c7c7d8ff"/>
<Option name="mute button: text active" value="191919ff"/>
<Option name="solo button: fill" value="616268ff"/>
<Option name="solo button: fill active" value="4dbb00ff"/>
<Option name="solo button: led" value="00000000"/>
<Option name="solo button: led active" value="00000000"/>
<Option name="solo button: text" value="c7c7d8ff"/>
<Option name="solo button: text active" value="191919ff"/>
<Option name="invert button: fill" value="616268ff"/>
<Option name="invert button: fill active" value="4242d0ff"/>
<Option name="invert button: led" value="473812ff"/>
<Option name="invert button: led active" value="78cb4eff"/>
<Option name="invert button: text" value="d7d7e8ff"/>
<Option name="invert button: text active" value="bfbfbfff"/>
<Option name="record enable button: fill" value="616268ff"/>
<Option name="record enable button: fill active" value="b50e0eff"/>
<Option name="record enable button: led" value="7b3541ff"/>
<Option name="record enable button: led active" value="ffa3b3ff"/>
<Option name="record enable button: text" value="a5a5a5ff"/>
<Option name="record enable button: text active" value="000000ff"/>
<Option name="generic button: fill" value="616268ff"/>
<Option name="generic button: fill active" value="fd0000ff"/>
<Option name="generic button: led" value="22224fff"/>
<Option name="generic button: led active" value="2222ffff"/>
<Option name="generic button: text" value="c7c7d8ff"/>
<Option name="generic button: text active" value="191919ff"/>
<Option name="send alert button: fill" value="4e5647ff"/>
<Option name="send alert button: fill active" value="85e524ff"/>
<Option name="send alert button: led" value="00000000"/>
<Option name="send alert button: led active" value="00000000"/>
<Option name="send alert button: text" value="ccccccff"/>
<Option name="send alert button: text active" value="000000ff"/>
<Option name="transport button: fill" value="616268ff"/>
<Option name="transport button: fill active" value="00a300ff"/>
<Option name="transport button: led" value="00000000"/>
<Option name="transport button: led active" value="00000000"/>
<Option name="transport button: text" value="00000000"/>
<Option name="transport button: text active" value="00000000"/>
<Option name="transport recenable button: fill" value="5f3f3fff"/>
<Option name="transport recenable button: fill active" value="b50e0eff"/>
<Option name="transport recenable button: led" value="00000000"/>
<Option name="transport recenable button: led active" value="00000000"/>
<Option name="transport recenable button: text" value="00000000"/>
<Option name="transport recenable button: text active" value="00000000"/>
<Option name="transport option button: fill" value="616268ff"/>
<Option name="transport option button: fill active" value="4a4b51ff"/>
<Option name="transport option button: led" value="4f3300ff"/>
<Option name="transport option button: led active" value="ffa500ff"/>
<Option name="transport option button: text" value="d7d7e8ff"/>
<Option name="transport option button: text active" value="c8c8d9ff"/>
<Option name="transport active option button: fill" value="616268ff"/>
<Option name="transport active option button: fill active" value="00a300ff"/>
<Option name="transport active option button: led" value="4f3300ff"/>
<Option name="transport active option button: led active" value="ffa500ff"/>
<Option name="transport active option button: text" value="d7d7e8ff"/>
<Option name="transport active option button: text active" value="000000ff"/>
<Option name="plugin bypass button: fill" value="5d5856ff"/>
<Option name="plugin bypass button: fill active" value="564d48ff"/>
<Option name="plugin bypass button: led" value="660000ff"/>
<Option name="plugin bypass button: led active" value="ff0000ff"/>
<Option name="plugin bypass button: text" value="c7c7d8ff"/>
<Option name="plugin bypass button: text active" value="c8c8d9ff"/>
<Option name="punch button: fill" value="603f3fff"/>
<Option name="punch button: fill active" value="f03020ff"/>
<Option name="punch button: led" value="00000000"/>
<Option name="punch button: led active" value="00000000"/>
<Option name="punch button: text" value="a5a5a5ff"/>
<Option name="punch button: text active" value="d8d8d8ff"/>
<Option name="mouse mode button: fill" value="616268ff"/>
<Option name="mouse mode button: fill active" value="00b200ff"/>
<Option name="mouse mode button: led" value="4f3300ff"/>
<Option name="mouse mode button: led active" value="ffa500ff"/>
<Option name="mouse mode button: text" value="d7d7e8ff"/>
<Option name="mouse mode button: text active" value="000000ff"/>
<Option name="nudge button: fill" value="684744ff"/>
<Option name="nudge button: fill active" value="404045ff"/>
<Option name="nudge button: led" value="4f3300ff"/>
<Option name="nudge button: led active" value="ffa500ff"/>
<Option name="nudge button: text" value="c7c7d8ff"/>
<Option name="nudge button: text active" value="c8c8d9ff"/>
<Option name="zoom menu: fill" value="99997950"/>
<Option name="zoom menu: fill active" value="404045ff"/>
<Option name="zoom menu: led" value="4f3300ff"/>
<Option name="zoom menu: led active" value="ffa500ff"/>
<Option name="zoom menu: text" value="d7d7e8ff"/>
<Option name="zoom menu: text active" value="c8c8d9ff"/>
<Option name="zoom button: fill" value="616268ff"/>
<Option name="zoom button: fill active" value="00a300ff"/>
<Option name="zoom button: led" value="4f3300ff"/>
<Option name="zoom button: led active" value="ffa500ff"/>
<Option name="zoom button: text" value="d7d7e8ff"/>
<Option name="zoom button: text active" value="000000ff"/>
<Option name="route button: fill" value="616268ff"/>
<Option name="route button: fill active" value="121212ff"/>
<Option name="route button: led" value="4f3300ff"/>
<Option name="route button: led active" value="ffa500ff"/>
<Option name="route button: text" value="d7d7e8ff"/>
<Option name="route button: text active" value="191919ff"/>
<Option name="mixer strip button: fill" value="616268ff"/>
<Option name="mixer strip button: fill active" value="ffa500ff"/>
<Option name="mixer strip button: led" value="4f3300ff"/>
<Option name="mixer strip button: led active" value="ffa500ff"/>
<Option name="mixer strip button: text" value="d7d7e8ff"/>
<Option name="mixer strip button: text active" value="000000ff"/>
<Option name="mixer strip name button: fill" value="616268ff"/>
<Option name="mixer strip name button: fill active" value="121212ff"/>
<Option name="mixer strip name button: led" value="4f3300ff"/>
<Option name="mixer strip name button: led active" value="ffa500ff"/>
<Option name="mixer strip name button: text" value="d7d7e8ff"/>
<Option name="mixer strip name button: text active" value="c8c8d9ff"/>
<Option name="midi input button: fill" value="656867ff"/>
<Option name="midi input button: fill active" value="00a300ff"/>
<Option name="midi input button: led" value="00000000"/>
<Option name="midi input button: led active" value="00000000"/>
<Option name="midi input button: text" value="00000000"/>
<Option name="midi input button: text active" value="00000000"/>
<Option name="transport clock: background" value="262626ff"/>
<Option name="transport clock: text" value="8df823ff"/>
<Option name="transport clock: edited text" value="ffa500ff"/>
<Option name="transport clock: cursor" value="ffa500ff"/>
<Option name="secondary clock: background" value="262626ff"/>
<Option name="secondary clock: text" value="8df823ff"/>
<Option name="secondary clock: edited text" value="ffa500ff"/>
<Option name="secondary clock: cursor" value="ffa500ff"/>
<Option name="transport delta clock: background" value="000000ff"/>
<Option name="transport delta clock: edited text" value="ff0000ff"/>
<Option name="transport delta clock: cursor" value="f11000ff"/>
<Option name="transport delta clock: text" value="8ce1f8ff"/>
<Option name="secondary delta clock: edited text" value="ff0000ff"/>
<Option name="secondary delta clock: cursor" value="f11000ff"/>
<Option name="secondary delta clock: background" value="000000ff"/>
<Option name="secondary delta clock: text" value="8ce1f8ff"/>
<Option name="big clock: background" value="020202ff"/>
<Option name="big clock: text" value="f0f0f0ff"/>
<Option name="big clock: edited text" value="ffa500ff"/>
<Option name="big clock: cursor" value="ffa500ff"/>
<Option name="big clock active: background" value="020202ff"/>
<Option name="big clock active: text" value="f11000ff"/>
<Option name="big clock active: edited text" value="ffa500ff"/>
<Option name="big clock active: cursor" value="ffa500ff"/>
<Option name="punch clock: background" value="000000ff"/>
<Option name="punch clock: text" value="6bb620ff"/>
<Option name="punch clock: edited text" value="ff0000ff"/>
<Option name="punch clock: cursor" value="f11000ff"/>
<Option name="selection clock: background" value="000000ff"/>
<Option name="selection clock: text" value="6bb620ff"/>
<Option name="selection clock: edited text" value="ff0000ff"/>
<Option name="selection clock: cursor" value="f11000ff"/>
<Option name="nudge clock: background" value="262626ff"/>
<Option name="nudge clock: text" value="6bb620ff"/>
<Option name="nudge clock: edited text" value="ffa500ff"/>
<Option name="nudge clock: cursor" value="ffa500ff"/>
<Option name="clock: background" value="000000ff"/>
<Option name="clock: text" value="6bb620ff"/>
<Option name="clock: edited text" value="ffa500ff"/>
<Option name="clock: cursor" value="ffa500ff"/>
<Option name="lock button: fill" value="616268ff"/>
<Option name="lock button: fill active" value="404045ff"/>
<Option name="lock button: led" value="00000000"/>
<Option name="lock button: led active" value="00000000"/>
<Option name="lock button: text" value="000024ff"/>
<Option name="lock button: text active" value="c8c8d9ff"/>
<Option name="small font" value="@FONT_SMALL@"/>
<Option name="smaller font" value="@FONT_SMALLER@"/>
<Option name="normal font" value="@FONT_NORMAL@"/>

View File

@ -340,7 +340,7 @@ LevelMeterBase::setup_meters (int len, int initial_width, int thin_width)
break;
case MeterIEC2BBC:
c[0] = c[1] = c[2] = c[3] = c[4] = c[5] = c[6] = c[7] = c[8] = c[9] =
ARDOUR_UI::config()->color_by_name ("meter color BBC");
ARDOUR_UI::config()->color ("meter color BBC");
stp[0] = stp[1] = stp[2] = stp[3] = 115.0;
break;
case MeterIEC2EBU:

View File

@ -328,7 +328,7 @@ meter_render_ticks (Gtk::Widget& w, MeterType type, vector<ARDOUR::DataType> typ
cairo_fill (cr);
height = min(max_pattern_metric_size, height);
uint32_t peakcolor = ARDOUR_UI::config()->color_by_name ("meterbridge peaklabel");
uint32_t peakcolor = ARDOUR_UI::config()->color ("meterbridge peaklabel");
for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {
@ -650,7 +650,7 @@ meter_render_metrics (Gtk::Widget& w, MeterType type, vector<DataType> types)
cairo_set_line_width (cr, 1.0);
height = min(max_pattern_metric_size, height);
uint32_t peakcolor = ARDOUR_UI::config()->color_by_name ("meterbridge peaklabel");
uint32_t peakcolor = ARDOUR_UI::config()->color ("meterbridge peaklabel");
Gdk::Color c; // default text color
for (vector<DataType>::const_iterator i = types.begin(); i != types.end(); ++i) {

View File

@ -853,9 +853,9 @@ void
MonitorSection::solo_use_pfl ()
{
/* this is driven by a toggle on a radio group, and so is invoked twice,
once for the item that became inactive and once for the one that became
active.
*/
once for the item that became inactive and once for the one that became
active.
*/
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Solo"), X_("solo-use-pfl"));
if (act) {

View File

@ -37,6 +37,8 @@
#include "ardour/panner.h"
#include "ardour/panner_shell.h"
#include "canvas/colors.h"
#include "ardour_ui.h"
#include "global_signals.h"
#include "stereo_panner.h"
@ -668,7 +670,8 @@ void
StereoPanner::set_colors ()
{
colors[Normal].fill = ARDOUR_UI::config()->get_StereoPannerFill();
colors[Normal].outline = ARDOUR_UI::config()->get_StereoPannerOutline();
// colors[Normal].outline = ARDOUR_UI::config()->get_StereoPannerOutline();
colors[Normal].outline = ArdourCanvas::HSV (colors[Normal].fill).outline().color ();
colors[Normal].text = ARDOUR_UI::config()->get_StereoPannerText();
colors[Normal].background = ARDOUR_UI::config()->get_StereoPannerBackground();
colors[Normal].rule = ARDOUR_UI::config()->get_StereoPannerRule();

View File

@ -22,12 +22,6 @@ style "default_button" = "small_text"
{
}
style "mouse_mode_button" = "default_button"
{
bg[ACTIVE] = @@COLPREFIX@_contrasting_indicator
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "gain_fader"
{
bg[NORMAL] = shade (0.7, @@COLPREFIX@_bg)
@ -39,10 +33,6 @@ style "gain_fader"
fg[ACTIVE] = shade(1.4, @@COLPREFIX@_bg)
}
style "track_rec_enable_button" = "small_button"
{
}
style "default_menu" = "medium_text"
{
}
@ -111,106 +101,11 @@ style "processor" = "small_text"
{
}
style "mixer_invert_button" = "small_button"
{
bg[ACTIVE] = @@COLPREFIX@_not_so_bright_indicator
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "monitor_mono_button" = "small_button"
{
bg[NORMAL] = mix(0.1,@@COLPREFIX@_mono,@@COLPREFIX@_bg)
bg[ACTIVE] = @@COLPREFIX@_mono
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "monitor_invert_button" = "small_button"
{
bg[NORMAL] = mix(0.1,@@COLPREFIX@_not_so_bright_indicator,@@COLPREFIX@_bg)
bg[ACTIVE] = @@COLPREFIX@_not_so_bright_indicator
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "monitor_mute_button" = "small_button"
{
bg[NORMAL] = mix(0.1,@@COLPREFIX@_mute,@@COLPREFIX@_bg)
bg[ACTIVE] = @@COLPREFIX@_mute
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "monitor_dim_button" = "small_button"
{
bg[NORMAL] = mix(0.1,lighter(@@COLPREFIX@_mute),@@COLPREFIX@_bg)
bg[ACTIVE] = lighter(@@COLPREFIX@_mute)
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "monitor_iso_button" = "small_button"
{
bg[NORMAL] = mix(0.1,@@COLPREFIX@_somewhat_bright_indicator,@@COLPREFIX@_bg)
bg[ACTIVE] = @@COLPREFIX@_somewhat_bright_indicator
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "ruler_label" = "small_bold_text"
{
fg[NORMAL] = @@COLPREFIX@_light_text_on_dark
}
style "transport_button"
{
bg[ACTIVE] = @@COLPREFIX@_contrasting_indicator
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "transport_button_active"
{
bg[NORMAL] = @@COLPREFIX@_contrasting_indicator
bg[ACTIVE] = @@COLPREFIX@_contrasting_indicator
bg[SELECTED] = @@COLPREFIX@_contrasting_indicator
bg[PRELIGHT] = @@COLPREFIX@_contrasting_indicator
fg[NORMAL] = @@COLPREFIX@_darkest
fg[PRELIGHT] = @@COLPREFIX@_darkest
fg[SELECTED] = @@COLPREFIX@_darkest
fg[ACTIVE] = @@COLPREFIX@_darkest
}
style "transport_button_alternate_two"
{
fg[SELECTED] = @@COLPREFIX@_darkest
fg[ACTIVE] = @@COLPREFIX@_darkest
fg[PRELIGHT] = @@COLPREFIX@_darkest
fg[NORMAL] = @@COLPREFIX@_darkest
bg[NORMAL] = shade(0.2,@@COLPREFIX@_bright_indicator)
bg[ACTIVE] = shade(0.2,@@COLPREFIX@_bright_indicator)
bg[SELECTED] = shade(0.2,@@COLPREFIX@_bright_indicator)
bg[PRELIGHT] = shade(0.2,@@COLPREFIX@_bright_indicator)
}
style "transport_rec_button"
{
fg[ACTIVE] = @@COLPREFIX@_darkest
bg[ACTIVE] = darker(@@COLPREFIX@_arm)
}
style "transport_rec_button_active"
{
bg[ACTIVE] = darker(@@COLPREFIX@_arm)
bg[NORMAL] = darker(@@COLPREFIX@_arm)
bg[SELECTED] = darker(@@COLPREFIX@_arm)
bg[PRELIGHT] = darker(@@COLPREFIX@_arm)
}
style "transport_rec_button_alternate"
{
bg[PRELIGHT] = @@COLPREFIX@_arm
bg[NORMAL] = @@COLPREFIX@_arm
bg[SELECTED] = @@COLPREFIX@_arm
bg[ACTIVE] = @@COLPREFIX@_arm
}
style "midi_channel_selector_button"
{
bg[NORMAL] = @@COLPREFIX@_bg

View File

@ -398,7 +398,7 @@ ThemeManager::setup_theme ()
color_list->clear();
for (std::map<std::string,ColorVariable<uint32_t> *>::iterator i = ARDOUR_UI::config()->canvas_colors.begin(); i != ARDOUR_UI::config()->canvas_colors.end(); i++) {
for (std::map<std::string,ColorVariable<uint32_t> *>::iterator i = ARDOUR_UI::config()->configurable_colors.begin(); i != ARDOUR_UI::config()->configurable_colors.end(); i++) {
ColorVariable<uint32_t>* var = i->second;

View File

@ -818,7 +818,7 @@ TimeAxisViewItem::set_frame_gradient ()
v = min (1.0, v * (1.0 - ARDOUR_UI::config()->get_timeline_item_gradient_depth()));
ArdourCanvas::Color darker = ArdourCanvas::hsv_to_color (h, s, v, a);
ArdourCanvas::Color darker = ArdourCanvas::hsva_to_color (h, s, v, a);
stops.push_back (std::make_pair (1.0, darker));
frame->set_gradient (stops, true);

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 1999-2006 Paul Davis
Copyright (C) 1999-2014 Paul Davis
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
@ -32,6 +32,8 @@
#include "ardour/filesystem_paths.h"
#include "ardour_ui.h"
#include "global_signals.h"
#include "ui_config.h"
#include "i18n.h"
@ -39,33 +41,588 @@
using namespace std;
using namespace PBD;
using namespace ARDOUR;
using namespace ArdourCanvas;
static const char* ui_config_file_name = "ui_config";
static const char* default_ui_config_file_name = "default_ui_config";
UIConfiguration* UIConfiguration::_instance = 0;
static std::map<std::string,HSV> full_palette;
static const double hue_cnt = 18.0;
UIConfiguration::UIConfiguration ()
:
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#define UI_CONFIG_VARIABLE(Type,var,name,val) var (name,val),
#define CANVAS_VARIABLE(var,name) var (name),
#define CANVAS_STRING_VARIABLE(var,name) var (name),
#define CANVAS_FONT_VARIABLE(var,name) var (name),
#include "ui_config_vars.h"
#include "canvas_vars.h"
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
/* initialize all the base colors using default
colors for now. these will be reset when/if
we load the UI config file.
*/
#undef CANVAS_BASE_COLOR
#define CANVAS_BASE_COLOR(var,name,val) var (name,val),
#include "base_colors.h"
#undef CANVAS_BASE_COLOR
#undef CANVAS_COLOR
#define CANVAS_COLOR(var,name,base,modifier) var (base,modifier),
#include "colors.h"
#undef CANVAS_COLOR
_dirty (false)
{
_instance = this;
/* pack all base colors into the configurable color map so that
derived colors can use them.
*/
#undef CANVAS_BASE_COLOR
#define CANVAS_BASE_COLOR(var,name,color) configurable_colors.insert (make_pair (name,&var));
#include "base_colors.h"
#undef CANVAS_BASE_COLOR
#undef CANVAS_COLOR
#define CANVAS_COLOR(var,name,base,modifier) relative_colors.insert (make_pair (name,var));
#include "colors.h"
#undef CANVAS_COLOR
/* load up full palette with opposites */
map<string,ColorVariable<uint32_t>*>::iterator f;
for (f = configurable_colors.begin(); f != configurable_colors.end(); ++f) {
/* first the base tone */
full_palette.insert (make_pair (f->first, HSV (f->second->get())));
/* now its opposite */
// full_palette.insert (make_pair (f->first + " opposite", HSV (f->second->get()) + HSV(180.0, 0, 0)));
}
/* now quantize the hues */
for (map<string,HSV>::iterator fp = full_palette.begin(); fp != full_palette.end(); ++fp) {
fp->second.h = hue_cnt * (round (fp->second.h/hue_cnt));
}
load_state();
// original_colors ();
color_compute ();
ARDOUR_UI_UTILS::ColorsChanged.connect (boost::bind (&UIConfiguration::color_theme_changed, this));
}
UIConfiguration::~UIConfiguration ()
{
}
void
UIConfiguration::original_colors ()
{
map<string,HSV> c;
c.insert (make_pair ("active crossfade", HSV (0x20b2af2e)));
c.insert (make_pair ("arrange base", HSV (0x595959ff)));
c.insert (make_pair ("audio bus base", HSV (0x73829968)));
c.insert (make_pair ("audio master bus base", HSV (0x00000000)));
c.insert (make_pair ("audio track base", HSV (0x9daac468)));
c.insert (make_pair ("automation line", HSV (0x44bc59ff)));
c.insert (make_pair ("automation track fill", HSV (0xa0a0ce68)));
c.insert (make_pair ("automation track outline", HSV (0x282828ff)));
c.insert (make_pair ("cd marker bar", HSV (0x9496a3cc)));
c.insert (make_pair ("crossfade editor base", HSV (0x282d49ff)));
c.insert (make_pair ("crossfade editor line", HSV (0x000000ff)));
c.insert (make_pair ("crossfade editor line shading", HSV (0x00a0d154)));
c.insert (make_pair ("crossfade editor point fill", HSV (0x00ff00ff)));
c.insert (make_pair ("crossfade editor point outline", HSV (0x0000ffff)));
c.insert (make_pair ("crossfade editor wave", HSV (0xffffff28)));
c.insert (make_pair ("selected crossfade editor wave fill", HSV (0x00000000)));
c.insert (make_pair ("crossfade line", HSV (0x000000ff)));
c.insert (make_pair ("edit point", HSV (0x0000ffff)));
c.insert (make_pair ("entered automation line", HSV (0xdd6363ff)));
c.insert (make_pair ("control point fill", HSV (0xffffff66)));
c.insert (make_pair ("control point outline", HSV (0xff0000ee)));
c.insert (make_pair ("control point selected", HSV (0x55ccccff)));
c.insert (make_pair ("entered gain line", HSV (0xdd6363ff)));
c.insert (make_pair ("entered marker", HSV (0xdd6363ff)));
c.insert (make_pair ("frame handle", HSV (0x7c00ff96)));
c.insert (make_pair ("gain line", HSV (0x00bc20ff)));
c.insert (make_pair ("gain line inactive", HSV (0x9fbca4c5)));
c.insert (make_pair ("ghost track base", HSV (0x603e7cc6)));
c.insert (make_pair ("ghost track midi outline", HSV (0x00000000)));
c.insert (make_pair ("ghost track wave", HSV (0x202020d9)));
c.insert (make_pair ("ghost track wave fill", HSV (0x20202060)));
c.insert (make_pair ("ghost track wave clip", HSV (0x202020d9)));
c.insert (make_pair ("ghost track zero line", HSV (0xe500e566)));
c.insert (make_pair ("image track", HSV (0xddddd8ff)));
c.insert (make_pair ("inactive crossfade", HSV (0xe8ed3d77)));
c.insert (make_pair ("inactive fade handle", HSV (0xbbbbbbaa)));
c.insert (make_pair ("inactive group tab", HSV (0x434343ff)));
c.insert (make_pair ("location cd marker", HSV (0x1ee8c4ff)));
c.insert (make_pair ("location loop", HSV (0x35964fff)));
c.insert (make_pair ("location marker", HSV (0xc4f411ff)));
c.insert (make_pair ("location punch", HSV (0x7c3a3aff)));
c.insert (make_pair ("location range", HSV (0x497a59ff)));
c.insert (make_pair ("marker bar", HSV (0x99a1adcc)));
c.insert (make_pair ("marker bar separator", HSV (0x555555ff)));
c.insert (make_pair ("marker drag line", HSV (0x004f00f9)));
c.insert (make_pair ("marker label", HSV (0x000000ff)));
c.insert (make_pair ("marker track", HSV (0xddddd8ff)));
c.insert (make_pair ("measure line bar", HSV (0xffffff9c)));
c.insert (make_pair ("measure line beat", HSV (0xa29e9e76)));
c.insert (make_pair ("meter bar", HSV (0x626470cc)));
c.insert (make_pair ("meter fill: 0", HSV (0x008800ff)));
c.insert (make_pair ("meter fill: 1", HSV (0x00aa00ff)));
c.insert (make_pair ("meter fill: 2", HSV (0x00ff00ff)));
c.insert (make_pair ("meter fill: 3", HSV (0x00ff00ff)));
c.insert (make_pair ("meter fill: 4", HSV (0xfff000ff)));
c.insert (make_pair ("meter fill: 5", HSV (0xfff000ff)));
c.insert (make_pair ("meter fill: 6", HSV (0xff8000ff)));
c.insert (make_pair ("meter fill: 7", HSV (0xff8000ff)));
c.insert (make_pair ("meter fill: 8", HSV (0xff0000ff)));
c.insert (make_pair ("meter fill: 9", HSV (0xff0000ff)));
c.insert (make_pair ("meter background: bottom", HSV (0x333333ff)));
c.insert (make_pair ("meter background: top", HSV (0x444444ff)));
c.insert (make_pair ("midi meter fill: 0", HSV (0xeffaa1ff)));
c.insert (make_pair ("midi meter fill: 1", HSV (0xf2c97dff)));
c.insert (make_pair ("midi meter fill: 2", HSV (0xf2c97dff)));
c.insert (make_pair ("midi meter fill: 3", HSV (0xf48f52ff)));
c.insert (make_pair ("midi meter fill: 4", HSV (0xf48f52ff)));
c.insert (make_pair ("midi meter fill: 5", HSV (0xf83913ff)));
c.insert (make_pair ("midi meter fill: 6", HSV (0xf83913ff)));
c.insert (make_pair ("midi meter fill: 7", HSV (0x8fc78eff)));
c.insert (make_pair ("midi meter fill: 8", HSV (0x8fc78eff)));
c.insert (make_pair ("midi meter fill: 9", HSV (0x00f45600)));
c.insert (make_pair ("meterbridge peakindicator: fill", HSV (0x444444ff)));
c.insert (make_pair ("meterbridge peakindicator: fill active", HSV (0xff0000ff)));
c.insert (make_pair ("meterbridge label: fill", HSV (0x444444ff)));
c.insert (make_pair ("meterbridge label: fill active", HSV (0x333333ff)));
c.insert (make_pair ("meterbridge label: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("meter marker", HSV (0xf2425bff)));
c.insert (make_pair ("midi bus base", HSV (0x00000000)));
c.insert (make_pair ("midi frame base", HSV (0x393d3766)));
c.insert (make_pair ("midi note inactive channel", HSV (0x00000000)));
c.insert (make_pair ("midi note color min", HSV (0x3f542aff)));
c.insert (make_pair ("midi note color mid", HSV (0x7ea854ff)));
c.insert (make_pair ("midi note color max", HSV (0xbfff80ff)));
c.insert (make_pair ("selected midi note color min", HSV (0x1e1e33ff)));
c.insert (make_pair ("selected midi note color mid", HSV (0x51518aff)));
c.insert (make_pair ("selected midi note color max", HSV (0x8383deff)));
c.insert (make_pair ("midi note selected", HSV (0xb2b2ffff)));
c.insert (make_pair ("midi note velocity text", HSV (0xf4f214bc)));
c.insert (make_pair ("midi patch change fill", HSV (0x50555aa0)));
c.insert (make_pair ("midi patch change outline", HSV (0xc0c5caff)));
c.insert (make_pair ("midi patch change inactive channel fill", HSV (0x50555ac0)));
c.insert (make_pair ("midi patch change inactive channel outline", HSV (0x20252ac0)));
c.insert (make_pair ("midi sysex fill", HSV (0xf1e139a0)));
c.insert (make_pair ("midi sysex outline", HSV (0xa7a7d4ff)));
c.insert (make_pair ("midi select rect fill", HSV (0x8888ff88)));
c.insert (make_pair ("midi select rect outline", HSV (0x5555ffff)));
c.insert (make_pair ("midi track base", HSV (0xb3cca35f)));
c.insert (make_pair ("name highlight fill", HSV (0x0000ffff)));
c.insert (make_pair ("name highlight outline", HSV (0x7c00ff96)));
c.insert (make_pair ("piano roll black outline", HSV (0xf4f4f476)));
c.insert (make_pair ("piano roll black", HSV (0x6c6e6a6b)));
c.insert (make_pair ("piano roll white", HSV (0x979b9565)));
c.insert (make_pair ("play head", HSV (0xff0000ff)));
c.insert (make_pair ("processor automation line", HSV (0x7aa3f9ff)));
c.insert (make_pair ("punch line", HSV (0xa80000ff)));
c.insert (make_pair ("range drag bar rect", HSV (0x969696c6)));
c.insert (make_pair ("range drag rect", HSV (0x82c696c6)));
c.insert (make_pair ("range marker bar", HSV (0x7d7f8ccc)));
c.insert (make_pair ("recording rect", HSV (0xcc2828ff)));
c.insert (make_pair ("recorded waveform fill", HSV (0xffffffd9)));
c.insert (make_pair ("recorded waveform outline", HSV (0x0f0f1fff)));
c.insert (make_pair ("rubber band rect", HSV (0xc6c6c659)));
c.insert (make_pair ("ruler base", HSV (0x2c2121ff)));
c.insert (make_pair ("ruler text", HSV (0xe5e5e5ff)));
c.insert (make_pair ("selected crossfade editor line", HSV (0x00dbdbff)));
c.insert (make_pair ("selected crossfade editor wave", HSV (0xf9ea14a0)));
c.insert (make_pair ("selected region base", HSV (0x585c61ff)));
c.insert (make_pair ("selected waveform fill", HSV (0xffa500d9)));
c.insert (make_pair ("selected waveform outline", HSV (0x0f0f0fcc)));
c.insert (make_pair ("selection rect", HSV (0xe8f4d377)));
c.insert (make_pair ("selection", HSV (0x636363b2)));
c.insert (make_pair ("shuttle", HSV (0x6bb620ff)));
c.insert (make_pair ("silence", HSV (0x9efffd7a)));
c.insert (make_pair ("silence text", HSV (0x0e066cff)));
c.insert (make_pair ("mono panner outline", HSV (0x33445eff)));
c.insert (make_pair ("mono panner fill", HSV (0x7a9bccc9)));
c.insert (make_pair ("mono panner text", HSV (0x000000ff)));
c.insert (make_pair ("mono panner bg", HSV (0x2e2929ff)));
c.insert (make_pair ("mono panner position fill", HSV (0x7a89b3ff)));
c.insert (make_pair ("mono panner position outline", HSV (0x33445eff)));
c.insert (make_pair ("stereo panner outline", HSV (0x33445eff)));
c.insert (make_pair ("stereo panner fill", HSV (0x7a9accc9)));
c.insert (make_pair ("stereo panner text", HSV (0x000000ff)));
c.insert (make_pair ("stereo panner bg", HSV (0x2e2929ff)));
c.insert (make_pair ("stereo panner rule", HSV (0x455c7fff)));
c.insert (make_pair ("stereo panner mono outline", HSV (0xa05600ff)));
c.insert (make_pair ("stereo panner mono fill", HSV (0xe99668ca)));
c.insert (make_pair ("stereo panner mono text", HSV (0x000000ff)));
c.insert (make_pair ("stereo panner mono bg", HSV (0x2e2929ff)));
c.insert (make_pair ("stereo panner inverted outline", HSV (0xbf0a00ff)));
c.insert (make_pair ("stereo panner inverted fill", HSV (0xe4a19cc9)));
c.insert (make_pair ("stereo panner inverted text", HSV (0x000000ff)));
c.insert (make_pair ("stereo panner inverted bg", HSV (0x2e2929ff)));
c.insert (make_pair ("tempo bar", HSV (0x70727fcc)));
c.insert (make_pair ("tempo marker", HSV (0xf2425bff)));
c.insert (make_pair ("time axis frame", HSV (0x000000ff)));
c.insert (make_pair ("selected time axis frame", HSV (0xee0000ff)));
c.insert (make_pair ("time stretch fill", HSV (0xe2b5b596)));
c.insert (make_pair ("time stretch outline", HSV (0x63636396)));
c.insert (make_pair ("tracknumber label: fill", HSV (0x444444ff)));
c.insert (make_pair ("tracknumber label: fill active", HSV (0x333333ff)));
c.insert (make_pair ("tracknumber label: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("transport drag rect", HSV (0x969696c6)));
c.insert (make_pair ("transport loop rect", HSV (0x1e7728f9)));
c.insert (make_pair ("transport marker bar", HSV (0x8c8e98cc)));
c.insert (make_pair ("transport punch rect", HSV (0x6d2828e5)));
c.insert (make_pair ("trim handle locked", HSV (0xea0f0f28)));
c.insert (make_pair ("trim handle", HSV (0x1900ff44)));
c.insert (make_pair ("verbose canvas cursor", HSV (0xfffd2ebc)));
c.insert (make_pair ("vestigial frame", HSV (0x0000000f)));
c.insert (make_pair ("video timeline bar", HSV (0x303030ff)));
c.insert (make_pair ("region base", HSV (0x838890ff)));
c.insert (make_pair ("region area covered by another region", HSV (0x505050b0)));
c.insert (make_pair ("waveform outline", HSV (0x000000ff)));
c.insert (make_pair ("clipped waveform", HSV (0xff0000e5)));
c.insert (make_pair ("waveform fill", HSV (0xffffffd9)));
c.insert (make_pair ("zero line", HSV (0x7f7f7fe0)));
c.insert (make_pair ("zoom rect", HSV (0xc6d1b26d)));
c.insert (make_pair ("monitor knob", HSV (0x555050ff)));
c.insert (make_pair ("monitor knob: arc start", HSV (0x5d90b0ff)));
c.insert (make_pair ("monitor knob: arc end", HSV (0x154c6eff)));
c.insert (make_pair ("button border", HSV (0x000000f0)));
c.insert (make_pair ("border color", HSV (0x00000000)));
c.insert (make_pair ("processor prefader: fill", HSV (0x873c3cff)));
c.insert (make_pair ("processor prefader: fill active", HSV (0x603535ff)));
c.insert (make_pair ("processor prefader: led", HSV (0x26550eff)));
c.insert (make_pair ("processor prefader: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("processor prefader: text", HSV (0xaaaaa3ff)));
c.insert (make_pair ("processor prefader: text active", HSV (0xeeeeecff)));
c.insert (make_pair ("processor fader: fill", HSV (0x5d90b0ff)));
c.insert (make_pair ("processor fader: fill active", HSV (0x256d8fff)));
c.insert (make_pair ("processor fader: led", HSV (0x26550eff)));
c.insert (make_pair ("processor fader: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("processor fader: text", HSV (0xaaaaa3ff)));
c.insert (make_pair ("processor fader: text active", HSV (0xeeeeecff)));
c.insert (make_pair ("processor postfader: fill", HSV (0x455a3cff)));
c.insert (make_pair ("processor postfader: fill active", HSV (0x254528ff)));
c.insert (make_pair ("processor postfader: led", HSV (0x26550eff)));
c.insert (make_pair ("processor postfader: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("processor postfader: text", HSV (0xaaaaa3ff)));
c.insert (make_pair ("processor postfader: text active", HSV (0xeeeeecff)));
c.insert (make_pair ("processor control button: fill", HSV (0x222222ff)));
c.insert (make_pair ("processor control button: fill active", HSV (0x333333ff)));
c.insert (make_pair ("processor control button: led", HSV (0x101010ff)));
c.insert (make_pair ("processor control button: led active", HSV (0x5d90b0ff)));
c.insert (make_pair ("processor control button: text", HSV (0xffffffff)));
c.insert (make_pair ("processor control button: text active", HSV (0xffffffff)));
c.insert (make_pair ("midi device: fill", HSV (0x54555dff)));
c.insert (make_pair ("midi device: fill active", HSV (0x45464cff)));
c.insert (make_pair ("midi device: led", HSV (0x006600ff)));
c.insert (make_pair ("midi device: led active", HSV (0x00ff00ff)));
c.insert (make_pair ("midi device: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("midi device: text active", HSV (0xeeeeecff)));
c.insert (make_pair ("monitor button: fill", HSV (0x616268ff)));
c.insert (make_pair ("monitor button: fill active", HSV (0xc56505ff)));
c.insert (make_pair ("monitor button: led", HSV (0x660000ff)));
c.insert (make_pair ("monitor button: led active", HSV (0xff0000ff)));
c.insert (make_pair ("monitor button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor button: text active", HSV (0x1a1a1aff)));
c.insert (make_pair ("solo isolate: fill", HSV (0x616268ff)));
c.insert (make_pair ("solo isolate: fill active", HSV (0x564d48ff)));
c.insert (make_pair ("solo isolate: led", HSV (0x660000ff)));
c.insert (make_pair ("solo isolate: led active", HSV (0xff0000ff)));
c.insert (make_pair ("solo isolate: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("solo isolate: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("solo safe: fill", HSV (0x616268ff)));
c.insert (make_pair ("solo safe: fill active", HSV (0x564d48ff)));
c.insert (make_pair ("solo safe: led", HSV (0x660000ff)));
c.insert (make_pair ("solo safe: led active", HSV (0xff0000ff)));
c.insert (make_pair ("solo safe: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("solo safe: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("meterbridge peaklabel", HSV (0xff1111ff)));
c.insert (make_pair ("meter color BBC", HSV (0xffa500ff)));
c.insert (make_pair ("monitor section cut: fill", HSV (0x5f5a58ff)));
c.insert (make_pair ("monitor section cut: fill active", HSV (0xffa500ff)));
c.insert (make_pair ("monitor section cut: led", HSV (0x473812ff)));
c.insert (make_pair ("monitor section cut: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("monitor section cut: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor section cut: text active", HSV (0x000000ff)));
c.insert (make_pair ("monitor section dim: fill", HSV (0x5f5a58ff)));
c.insert (make_pair ("monitor section dim: fill active", HSV (0xe58505ff)));
c.insert (make_pair ("monitor section dim: led", HSV (0x00000000)));
c.insert (make_pair ("monitor section dim: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("monitor section dim: text", HSV (0xc8c8d9ff)));
c.insert (make_pair ("monitor section dim: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("monitor section solo: fill", HSV (0x5f5a58ff)));
c.insert (make_pair ("monitor section solo: fill active", HSV (0x4dbb00ff)));
c.insert (make_pair ("monitor section solo: led", HSV (0x473812ff)));
c.insert (make_pair ("monitor section solo: led active", HSV (0xffa500ff)));
c.insert (make_pair ("monitor section solo: text", HSV (0x00000000)));
c.insert (make_pair ("monitor section solo: text active", HSV (0x00000000)));
c.insert (make_pair ("monitor section invert: fill", HSV (0x5f5a58ff)));
c.insert (make_pair ("monitor section invert: fill active", HSV (0x4242d0ff)));
c.insert (make_pair ("monitor section invert: led", HSV (0x473812ff)));
c.insert (make_pair ("monitor section invert: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("monitor section invert: text", HSV (0x00000000)));
c.insert (make_pair ("monitor section invert: text active", HSV (0x00000000)));
c.insert (make_pair ("monitor section mono: fill", HSV (0x5f5a58ff)));
c.insert (make_pair ("monitor section mono: fill active", HSV (0x3232c0ff)));
c.insert (make_pair ("monitor section mono: led", HSV (0x473812ff)));
c.insert (make_pair ("monitor section mono: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("monitor section mono: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor section mono: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("monitor section solo model: fill", HSV (0x5d5856ff)));
c.insert (make_pair ("monitor section solo model: fill active", HSV (0x564d48ff)));
c.insert (make_pair ("monitor section solo model: led", HSV (0x4f3300ff)));
c.insert (make_pair ("monitor section solo model: led active", HSV (0xffa500ff)));
c.insert (make_pair ("monitor section solo model: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor section solo model: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("monitor solo override: fill", HSV (0x5d5856ff)));
c.insert (make_pair ("monitor solo override: fill active", HSV (0x564d48ff)));
c.insert (make_pair ("monitor solo override: led", HSV (0x4f3300ff)));
c.insert (make_pair ("monitor solo override: led active", HSV (0xffa500ff)));
c.insert (make_pair ("monitor solo override: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor solo override: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("monitor solo exclusive: fill", HSV (0x5d5856ff)));
c.insert (make_pair ("monitor solo exclusive: fill active", HSV (0x564c47ff)));
c.insert (make_pair ("monitor solo exclusive: led", HSV (0x4f3300ff)));
c.insert (make_pair ("monitor solo exclusive: led active", HSV (0xffa500ff)));
c.insert (make_pair ("monitor solo exclusive: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("monitor solo exclusive: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("rude solo: fill", HSV (0x684d4dff)));
c.insert (make_pair ("rude solo: fill active", HSV (0xe21b1bff)));
c.insert (make_pair ("rude solo: led", HSV (0x00000000)));
c.insert (make_pair ("rude solo: led active", HSV (0x00000000)));
c.insert (make_pair ("rude solo: text", HSV (0x969696ff)));
c.insert (make_pair ("rude solo: text active", HSV (0xe5e5e5ff)));
c.insert (make_pair ("rude isolate: fill", HSV (0x21414fff)));
c.insert (make_pair ("rude isolate: fill active", HSV (0xb6e5fdff)));
c.insert (make_pair ("rude isolate: led", HSV (0x00000000)));
c.insert (make_pair ("rude isolate: led active", HSV (0x000000ff)));
c.insert (make_pair ("rude isolate: text", HSV (0x979797ff)));
c.insert (make_pair ("rude isolate: text active", HSV (0x000000ff)));
c.insert (make_pair ("rude audition: fill", HSV (0x684d4dff)));
c.insert (make_pair ("rude audition: fill active", HSV (0xe21b1bff)));
c.insert (make_pair ("rude audition: led", HSV (0x00000000)));
c.insert (make_pair ("rude audition: led active", HSV (0x00000000)));
c.insert (make_pair ("rude audition: text", HSV (0x979797ff)));
c.insert (make_pair ("rude audition: text active", HSV (0xffffffff)));
c.insert (make_pair ("feedback alert: fill", HSV (0x684d4dff)));
c.insert (make_pair ("feedback alert: fill active", HSV (0xe21b1bff)));
c.insert (make_pair ("feedback alert: led", HSV (0x00000000)));
c.insert (make_pair ("feedback alert: led active", HSV (0x00000000)));
c.insert (make_pair ("feedback alert: text", HSV (0x969696ff)));
c.insert (make_pair ("feedback alert: text active", HSV (0xe5e5e5ff)));
c.insert (make_pair ("mute button: fill", HSV (0x616268ff)));
c.insert (make_pair ("mute button: fill active", HSV (0xbbbb00ff)));
c.insert (make_pair ("mute button: led", HSV (0x00000000)));
c.insert (make_pair ("mute button: led active", HSV (0x00000000)));
c.insert (make_pair ("mute button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("mute button: text active", HSV (0x191919ff)));
c.insert (make_pair ("solo button: fill", HSV (0x616268ff)));
c.insert (make_pair ("solo button: fill active", HSV (0x4dbb00ff)));
c.insert (make_pair ("solo button: led", HSV (0x00000000)));
c.insert (make_pair ("solo button: led active", HSV (0x00000000)));
c.insert (make_pair ("solo button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("solo button: text active", HSV (0x191919ff)));
c.insert (make_pair ("invert button: fill", HSV (0x616268ff)));
c.insert (make_pair ("invert button: fill active", HSV (0x4242d0ff)));
c.insert (make_pair ("invert button: led", HSV (0x473812ff)));
c.insert (make_pair ("invert button: led active", HSV (0x78cb4eff)));
c.insert (make_pair ("invert button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("invert button: text active", HSV (0xbfbfbfff)));
c.insert (make_pair ("record enable button: fill", HSV (0x616268ff)));
c.insert (make_pair ("record enable button: fill active", HSV (0xb50e0eff)));
c.insert (make_pair ("record enable button: led", HSV (0x7b3541ff)));
c.insert (make_pair ("record enable button: led active", HSV (0xffa3b3ff)));
c.insert (make_pair ("record enable button: text", HSV (0xa5a5a5ff)));
c.insert (make_pair ("record enable button: text active", HSV (0x000000ff)));
c.insert (make_pair ("generic button: fill", HSV (0x616268ff)));
c.insert (make_pair ("generic button: fill active", HSV (0xfd0000ff)));
c.insert (make_pair ("generic button: led", HSV (0x22224fff)));
c.insert (make_pair ("generic button: led active", HSV (0x2222ffff)));
c.insert (make_pair ("generic button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("generic button: text active", HSV (0x191919ff)));
c.insert (make_pair ("send alert button: fill", HSV (0x4e5647ff)));
c.insert (make_pair ("send alert button: fill active", HSV (0x85e524ff)));
c.insert (make_pair ("send alert button: led", HSV (0x00000000)));
c.insert (make_pair ("send alert button: led active", HSV (0x00000000)));
c.insert (make_pair ("send alert button: text", HSV (0xccccccff)));
c.insert (make_pair ("send alert button: text active", HSV (0x000000ff)));
c.insert (make_pair ("transport button: fill", HSV (0x616268ff)));
c.insert (make_pair ("transport button: fill active", HSV (0x00a300ff)));
c.insert (make_pair ("transport button: led", HSV (0x00000000)));
c.insert (make_pair ("transport button: led active", HSV (0x00000000)));
c.insert (make_pair ("transport button: text", HSV (0x00000000)));
c.insert (make_pair ("transport button: text active", HSV (0x00000000)));
c.insert (make_pair ("transport recenable button: fill", HSV (0x5f3f3fff)));
c.insert (make_pair ("transport recenable button: fill active", HSV (0xb50e0eff)));
c.insert (make_pair ("transport recenable button: led", HSV (0x00000000)));
c.insert (make_pair ("transport recenable button: led active", HSV (0x00000000)));
c.insert (make_pair ("transport recenable button: text", HSV (0x00000000)));
c.insert (make_pair ("transport recenable button: text active", HSV (0x00000000)));
c.insert (make_pair ("transport option button: fill", HSV (0x616268ff)));
c.insert (make_pair ("transport option button: fill active", HSV (0x4a4b51ff)));
c.insert (make_pair ("transport option button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("transport option button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("transport option button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("transport option button: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("transport active option button: fill", HSV (0x616268ff)));
c.insert (make_pair ("transport active option button: fill active", HSV (0x00a300ff)));
c.insert (make_pair ("transport active option button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("transport active option button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("transport active option button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("transport active option button: text active", HSV (0x000000ff)));
c.insert (make_pair ("plugin bypass button: fill", HSV (0x5d5856ff)));
c.insert (make_pair ("plugin bypass button: fill active", HSV (0x564d48ff)));
c.insert (make_pair ("plugin bypass button: led", HSV (0x660000ff)));
c.insert (make_pair ("plugin bypass button: led active", HSV (0xff0000ff)));
c.insert (make_pair ("plugin bypass button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("plugin bypass button: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("punch button: fill", HSV (0x603f3fff)));
c.insert (make_pair ("punch button: fill active", HSV (0xf03020ff)));
c.insert (make_pair ("punch button: led", HSV (0x00000000)));
c.insert (make_pair ("punch button: led active", HSV (0x00000000)));
c.insert (make_pair ("punch button: text", HSV (0xa5a5a5ff)));
c.insert (make_pair ("punch button: text active", HSV (0xd8d8d8ff)));
c.insert (make_pair ("mouse mode button: fill", HSV (0x616268ff)));
c.insert (make_pair ("mouse mode button: fill active", HSV (0x00b200ff)));
c.insert (make_pair ("mouse mode button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("mouse mode button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("mouse mode button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("mouse mode button: text active", HSV (0x000000ff)));
c.insert (make_pair ("nudge button: fill", HSV (0x684744ff)));
c.insert (make_pair ("nudge button: fill active", HSV (0x404045ff)));
c.insert (make_pair ("nudge button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("nudge button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("nudge button: text", HSV (0xc7c7d8ff)));
c.insert (make_pair ("nudge button: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("zoom menu: fill", HSV (0x99997950)));
c.insert (make_pair ("zoom menu: fill active", HSV (0x404045ff)));
c.insert (make_pair ("zoom menu: led", HSV (0x4f3300ff)));
c.insert (make_pair ("zoom menu: led active", HSV (0xffa500ff)));
c.insert (make_pair ("zoom menu: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("zoom menu: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("zoom button: fill", HSV (0x616268ff)));
c.insert (make_pair ("zoom button: fill active", HSV (0x00a300ff)));
c.insert (make_pair ("zoom button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("zoom button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("zoom button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("zoom button: text active", HSV (0x000000ff)));
c.insert (make_pair ("route button: fill", HSV (0x616268ff)));
c.insert (make_pair ("route button: fill active", HSV (0x121212ff)));
c.insert (make_pair ("route button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("route button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("route button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("route button: text active", HSV (0x191919ff)));
c.insert (make_pair ("mixer strip button: fill", HSV (0x616268ff)));
c.insert (make_pair ("mixer strip button: fill active", HSV (0xffa500ff)));
c.insert (make_pair ("mixer strip button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("mixer strip button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("mixer strip button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("mixer strip button: text active", HSV (0x000000ff)));
c.insert (make_pair ("mixer strip name button: fill", HSV (0x616268ff)));
c.insert (make_pair ("mixer strip name button: fill active", HSV (0x121212ff)));
c.insert (make_pair ("mixer strip name button: led", HSV (0x4f3300ff)));
c.insert (make_pair ("mixer strip name button: led active", HSV (0xffa500ff)));
c.insert (make_pair ("mixer strip name button: text", HSV (0xd7d7e8ff)));
c.insert (make_pair ("mixer strip name button: text active", HSV (0xc8c8d9ff)));
c.insert (make_pair ("midi input button: fill", HSV (0x656867ff)));
c.insert (make_pair ("midi input button: fill active", HSV (0x00a300ff)));
c.insert (make_pair ("midi input button: led", HSV (0x00000000)));
c.insert (make_pair ("midi input button: led active", HSV (0x00000000)));
c.insert (make_pair ("midi input button: text", HSV (0x00000000)));
c.insert (make_pair ("midi input button: text active", HSV (0x00000000)));
c.insert (make_pair ("transport clock: background", HSV (0x262626ff)));
c.insert (make_pair ("transport clock: text", HSV (0x8df823ff)));
c.insert (make_pair ("transport clock: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("transport clock: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("secondary clock: background", HSV (0x262626ff)));
c.insert (make_pair ("secondary clock: text", HSV (0x8df823ff)));
c.insert (make_pair ("secondary clock: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("secondary clock: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("transport delta clock: background", HSV (0x000000ff)));
c.insert (make_pair ("transport delta clock: edited text", HSV (0xff0000ff)));
c.insert (make_pair ("transport delta clock: cursor", HSV (0xf11000ff)));
c.insert (make_pair ("transport delta clock: text", HSV (0x8ce1f8ff)));
c.insert (make_pair ("secondary delta clock: edited text", HSV (0xff0000ff)));
c.insert (make_pair ("secondary delta clock: cursor", HSV (0xf11000ff)));
c.insert (make_pair ("secondary delta clock: background", HSV (0x000000ff)));
c.insert (make_pair ("secondary delta clock: text", HSV (0x8ce1f8ff)));
c.insert (make_pair ("big clock: background", HSV (0x020202ff)));
c.insert (make_pair ("big clock: text", HSV (0xf0f0f0ff)));
c.insert (make_pair ("big clock: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("big clock: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("big clock active: background", HSV (0x020202ff)));
c.insert (make_pair ("big clock active: text", HSV (0xf11000ff)));
c.insert (make_pair ("big clock active: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("big clock active: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("punch clock: background", HSV (0x000000ff)));
c.insert (make_pair ("punch clock: text", HSV (0x6bb620ff)));
c.insert (make_pair ("punch clock: edited text", HSV (0xff0000ff)));
c.insert (make_pair ("punch clock: cursor", HSV (0xf11000ff)));
c.insert (make_pair ("selection clock: background", HSV (0x000000ff)));
c.insert (make_pair ("selection clock: text", HSV (0x6bb620ff)));
c.insert (make_pair ("selection clock: edited text", HSV (0xff0000ff)));
c.insert (make_pair ("selection clock: cursor", HSV (0xf11000ff)));
c.insert (make_pair ("nudge clock: background", HSV (0x262626ff)));
c.insert (make_pair ("nudge clock: text", HSV (0x6bb620ff)));
c.insert (make_pair ("nudge clock: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("nudge clock: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("clock: background", HSV (0x000000ff)));
c.insert (make_pair ("clock: text", HSV (0x6bb620ff)));
c.insert (make_pair ("clock: edited text", HSV (0xffa500ff)));
c.insert (make_pair ("clock: cursor", HSV (0xffa500ff)));
c.insert (make_pair ("lock button: fill", HSV (0x616268ff)));
c.insert (make_pair ("lock button: fill active", HSV (0x404045ff)));
c.insert (make_pair ("lock button: led", HSV (0x00000000)));
c.insert (make_pair ("lock button: led active", HSV (0x00000000)));
c.insert (make_pair ("lock button: text", HSV (0x000024ff)));
c.insert (make_pair ("lock button: text active", HSV (0xc8c8d9ff)));
for (map<string,HSV>::iterator fp = c.begin(); fp != c.end(); ++fp) {
const double hue_cnt = 18.0;
fp->second.h = hue_cnt * (round (fp->second.h/hue_cnt));
}
#undef CANVAS_COLOR
#define CANVAS_COLOR(var,name,base,modifier) print_relative_def (#var,name,c[name]);
#include "colors.h"
#undef CANVAS_COLOR
}
void
UIConfiguration::color_theme_changed ()
{
map<std::string,RelativeHSV>::iterator current_color;
/* we need to reset the quantized hues before we start, because
* otherwise when we call RelativeHSV::get() in color_compute()
* we don't get an answer based on the new base colors, but instead
* based on any existing hue quantization.
*/
for (current_color = relative_colors.begin(); current_color != relative_colors.end(); ++current_color) {
current_color->second.quantized_hue = -1;
}
color_compute ();
}
void
UIConfiguration::map_parameters (boost::function<void (std::string)>& functor)
{
@ -146,10 +703,9 @@ UIConfiguration::load_state ()
_dirty = false;
}
if (!found)
if (!found) {
error << _("could not find any ui configuration file, canvas will look broken.") << endmsg;
pack_canvasvars();
}
return 0;
}
@ -203,15 +759,12 @@ UIConfiguration::get_variables (std::string which_node)
node = new XMLNode(which_node);
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#define UI_CONFIG_VARIABLE(Type,var,Name,value) if (node->name() == "UI") { var.add_to_node (*node); }
#define CANVAS_VARIABLE(var,Name) if (node->name() == "Canvas") { var.add_to_node (*node); }
#define CANVAS_STRING_VARIABLE(var,Name) if (node->name() == "Canvas") { var.add_to_node (*node); }
#define CANVAS_FONT_VARIABLE(var,Name) if (node->name() == "Canvas") { var.add_to_node (*node); }
#include "ui_config_vars.h"
#include "canvas_vars.h"
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
@ -244,19 +797,52 @@ UIConfiguration::set_state (const XMLNode& root, int /*version*/)
return 0;
}
void
UIConfiguration::print_relative_def (string camelcase, string name, Color c)
{
HSV variable (c);
HSV closest;
double shortest_distance = DBL_MAX;
string closest_name;
for (map<string,HSV>::iterator f = full_palette.begin(); f != full_palette.end(); ++f) {
double d;
HSV fixed (f->second);
// d = variable.distance (fixed);
d = fabs (variable.h - fixed.h);
if (d < shortest_distance) {
closest = fixed;
closest_name = f->first;
shortest_distance = d;
}
}
/* we now know the closest color of the fixed colors to
this variable color. Compute the HSV diff and
use it to redefine the variable color in terms of the
fixed one.
*/
HSV delta = variable.delta (closest);
cerr << "CANVAS_COLOR(" << camelcase << ",\"" << name << "\", \"" << closest_name << "\", HSV("
<< delta.h << ',' << delta.s << ',' << delta.v << ',' << variable.a << ")) /*"
<< shortest_distance << " */" << endl;
}
void
UIConfiguration::set_variables (const XMLNode& node)
{
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#define UI_CONFIG_VARIABLE(Type,var,name,val) \
if (var.set_from_node (node)) { \
ParameterChanged (name); \
}
#define CANVAS_VARIABLE(var,name) \
if (var.set_from_node (node)) { \
ParameterChanged (name); \
}
#define CANVAS_STRING_VARIABLE(var,name) \
if (var.set_from_node (node)) { \
ParameterChanged (name); \
@ -268,32 +854,51 @@ UIConfiguration::set_variables (const XMLNode& node)
#include "ui_config_vars.h"
#include "canvas_vars.h"
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
/* Reset base colors */
#undef CANVAS_BASE_COLOR
#define CANVAS_BASE_COLOR(var,name,val) \
var.set_from_node (node);
#include "base_colors.h"
#undef CANVAS_BASE_COLOR
}
void
UIConfiguration::pack_canvasvars ()
UIConfiguration::set_dirty ()
{
#undef CANVAS_VARIABLE
#define CANVAS_VARIABLE(var,name) canvas_colors.insert (std::pair<std::string,ColorVariable<uint32_t>* >(name,&var));
#define CANVAS_STRING_VARIABLE(var,name)
#define CANVAS_FONT_VARIABLE(var,name)
#include "canvas_vars.h"
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
_dirty = true;
}
uint32_t
UIConfiguration::color_by_name (const std::string& name)
bool
UIConfiguration::dirty () const
{
map<std::string,ColorVariable<uint32_t>* >::iterator i = canvas_colors.find (name);
return _dirty;
}
if (i != canvas_colors.end()) {
ArdourCanvas::Color
UIConfiguration::base_color_by_name (const std::string& name) const
{
map<std::string,ColorVariable<uint32_t>* >::const_iterator i = configurable_colors.find (name);
if (i != configurable_colors.end()) {
return i->second->get();
}
string::size_type opp;
if ((opp = name.find (X_(" opposite"))) != string::npos) {
string base = name.substr (0, opp);
i = configurable_colors.find (base);
if (i != configurable_colors.end()) {
HSV hsv (i->second->get());
return hsv.opposite().color ();
}
}
#if 0 // yet unsed experimental style postfix
/* Idea: use identical colors but different font/sizes
* for variants of the same 'widget'.
@ -314,7 +919,7 @@ UIConfiguration::color_by_name (const std::string& name)
*/
const size_t name_len = name.size();
const size_t name_sep = name.find(':');
for (i = canvas_colors.begin(); i != canvas_colors.end(), name_sep != string::npos; ++i) {
for (i = configurable_colors.begin(); i != configurable_colors.end(), name_sep != string::npos; ++i) {
const size_t cmp_len = i->first.size();
const size_t cmp_sep = i->first.find(':');
if (cmp_len >= name_len || cmp_sep == string::npos) continue;
@ -324,18 +929,134 @@ UIConfiguration::color_by_name (const std::string& name)
}
#endif
// cerr << string_compose (_("Color %1 not found"), name) << endl;
cerr << string_compose (_("Color %1 not found"), name) << endl;
return RGBA_TO_UINT (g_random_int()%256,g_random_int()%256,g_random_int()%256,0xff);
}
void
UIConfiguration::set_dirty ()
ArdourCanvas::Color
UIConfiguration::color (const std::string& name) const
{
_dirty = true;
map<string,string>::const_iterator e = color_aliases.find (name);
if (e != color_aliases.end ()) {
map<string,HSV>::const_iterator ac = actual_colors.find (e->second);
if (ac != actual_colors.end()) {
return ac->second;
}
}
cerr << string_compose (_("Color %1 not found"), name) << endl;
return rgba_to_color ((g_random_int()%256)/255.0,
(g_random_int()%256)/255.0,
(g_random_int()%256)/255.0,
0xff);
}
bool
UIConfiguration::dirty () const
ArdourCanvas::HSV
UIConfiguration::RelativeHSV::get() const
{
return _dirty;
HSV base (UIConfiguration::instance()->base_color_by_name (base_color));
/* this operation is a little wierd. because of the way we originally
* computed the alpha specification for the modifiers used here
* we need to reset base's alpha to zero before adding the modifier.
*/
base.a = 0.0;
HSV self (base + modifier);
if (quantized_hue >= 0.0) {
self.h = quantized_hue;
}
return self;
}
void
UIConfiguration::color_compute ()
{
using namespace ArdourCanvas;
map<std::string,ColorVariable<uint32_t>* >::iterator f;
map<std::string,HSV*>::iterator v;
/* now compute distances */
cerr << "Attempt to reduce " << relative_colors.size() << endl;
map<std::string,RelativeHSV>::iterator current_color;
color_aliases.clear ();
/* First quantize the hues.
This ought to use a perceptual model such as CIE94 or CIEDE2000 that
takes into account non-uniformity in human wavelength
discrimination.
For now (November 2014) simply divide the hue space (360 degrees)
into small pieces.
*/
/* quantize all current relative color definitions */
for (current_color = relative_colors.begin(); current_color != relative_colors.end(); ++current_color) {
HSV hsv (current_color->second.get());
if (hsv.is_gray ()) {
continue;
}
current_color->second.quantized_hue = hue_cnt * (round (hsv.h/hue_cnt));
}
actual_colors.clear ();
for (current_color = relative_colors.begin(); current_color != relative_colors.end(); ++current_color) {
map<std::string,HSV>::iterator possible_match;
std::string equivalent_name;
bool matched;
matched = false;
for (possible_match = actual_colors.begin(); possible_match != actual_colors.end(); ++possible_match) {
HSV a (current_color->second.get());
HSV b (possible_match->second);
/* This uses perceptual distance to find visually
* similar colors.
*/
if (a.distance (b) < 6.0) {
matched = true;
break;
}
}
if (!matched) {
/* color does not match any other, generate a generic
* name and store two aliases.
*/
string alias = string_compose ("color %1", actual_colors.size() + 1);
actual_colors.insert (make_pair (alias, current_color->second.get()));
color_aliases.insert (make_pair (current_color->first, alias));
} else {
/* this color was within the JND CIE76 distance of
* another, so throw it away.
*/
color_aliases.insert (make_pair (current_color->first, possible_match->first));
}
}
cerr << "Ended with " << actual_colors.size() << " colors" << endl;
}

View File

@ -28,6 +28,8 @@
#include "pbd/xml++.h"
#include "ardour/configuration_variable.h"
#include "canvas/colors.h"
#include "utils.h"
/* This is very similar to ARDOUR::ConfigVariable but expects numeric values to
@ -81,7 +83,9 @@ class UIConfiguration : public PBD::Stateful
UIConfiguration();
~UIConfiguration();
std::map<std::string,ColorVariable<uint32_t> *> canvas_colors;
static UIConfiguration* instance() { return _instance; }
std::map<std::string,ColorVariable<uint32_t> *> configurable_colors;
bool dirty () const;
void set_dirty ();
@ -95,8 +99,11 @@ class UIConfiguration : public PBD::Stateful
XMLNode& get_variables (std::string);
void set_variables (const XMLNode&);
void pack_canvasvars ();
void reset_derived_colors ();
uint32_t color_by_name (const std::string&);
ArdourCanvas::Color base_color_by_name (const std::string&) const;
ArdourCanvas::Color color (const std::string&) const;
ArdourCanvas::HSV color_hsv (const std::string&) const;
sigc::signal<void,std::string> ParameterChanged;
void map_parameters (boost::function<void (std::string)>&);
@ -107,11 +114,7 @@ class UIConfiguration : public PBD::Stateful
bool set_##var (Type val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
#include "ui_config_vars.h"
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#define CANVAS_VARIABLE(var,name) \
uint32_t get_##var () const { return var.get(); } \
bool set_##var (uint32_t val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
#define CANVAS_STRING_VARIABLE(var,name) \
std::string get_##var () const { return var.get(); } \
bool set_##var (const std::string& val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
@ -119,12 +122,43 @@ class UIConfiguration : public PBD::Stateful
Pango::FontDescription get_##var () const { return ARDOUR_UI_UTILS::sanitized_font (var.get()); } \
bool set_##var (const std::string& val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; }
#include "canvas_vars.h"
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
#undef CANVAS_BASE_COLOR
#define CANVAS_BASE_COLOR(var,name,val) \
ArdourCanvas::Color get_##var() const { return var.get(); } \
bool set_##var (ArdourCanvas::Color v) { bool ret = var.set (v); if (ret) { ParameterChanged (#var); } return ret; } \
bool set_##var(const ArdourCanvas::HSV& v) const { return set_##var (v.color()); }
#include "base_colors.h"
#undef CANVAS_BASE_COLOR
#undef CANVAS_COLOR
#define CANVAS_COLOR(var,name,base,modifier) ArdourCanvas::Color get_##var() const { return var.get().color(); }
#include "colors.h"
#undef CANVAS_COLOR
private:
struct RelativeHSV {
RelativeHSV (const std::string& b, const ArdourCanvas::HSV& mod)
: base_color (b)
, modifier (mod)
, quantized_hue (-1.0) {}
std::string base_color;
ArdourCanvas::HSV modifier;
double quantized_hue;
ArdourCanvas::HSV get() const;
};
/* these are loaded from serialized state (e.g. XML) */
std::map<std::string,RelativeHSV> relative_colors;
/* these are computed during color_compute()*/
std::map<std::string,ArdourCanvas::HSV> actual_colors;
/* these map from the name/key of relative colors to the color/value of actual colors */
std::map<std::string,std::string> color_aliases;
/* declare variables */
#undef UI_CONFIG_VARIABLE
@ -132,17 +166,34 @@ class UIConfiguration : public PBD::Stateful
#include "ui_config_vars.h"
#undef UI_CONFIG_VARIABLE
#undef CANVAS_VARIABLE
#define CANVAS_VARIABLE(var,name) ColorVariable<uint32_t> var;
#define CANVAS_STRING_VARIABLE(var,name) ARDOUR::ConfigVariable<std::string> var;
#define CANVAS_FONT_VARIABLE(var,name) ARDOUR::ConfigVariable<std::string> var;
#include "canvas_vars.h"
#undef CANVAS_VARIABLE
#undef CANVAS_STRING_VARIABLE
#undef CANVAS_FONT_VARIABLE
/* declare base color variables (these are modifiable by the user) */
#undef CANVAS_BASE_COLOR
#define CANVAS_BASE_COLOR(var,name,val) ColorVariable<uint32_t> var;
#include "base_colors.h"
#undef CANVAS_BASE_COLOR
/* declare relative color variables (not directly modifiable) */
#undef CANVAS_COLOR
#define CANVAS_COLOR(var,name,base,modifier) RelativeHSV var;
#include "colors.h"
#undef CANVAS_COLOR
XMLNode& state ();
bool _dirty;
static UIConfiguration* _instance;
void color_compute ();
void print_relative_def (std::string camelcase, std::string name, ArdourCanvas::Color c);
void color_theme_changed ();
void original_colors ();
};
#endif /* __ardour_ui_configuration_h__ */

View File

@ -128,12 +128,6 @@ widget "*MixerStripPeakDisplay*" style:highest "red_active_small_entry"
widget "*MixerStripPeakDisplayPeak*" style:highest "peak_display_peaked_entry"
widget "*MixerStripSelectedFrame" style:highest "selected_strip_frame"
widget "*MixerStripFrame" style:highest "base_frame"
widget "*monitor section invert" style:highest "monitor_invert_button"
widget "*monitor section cut" style:highest "monitor_mute_button"
widget "*monitor section dim" style:highest "monitor_dim_button"
widget "*monitor section mono" style:highest "monitor_mono_button"
widget "*monitor solo exclusive" style:highest "monitor_mono_button"
widget "*monitor solo override" style:highest "monitor_mono_button"
widget "*FadeCurve" style:highest "medium_bold_entry"
widget "*FadeCurve*" style:highest "medium_bold_entry"
widget "*RouteParamsListDisplay" style:highest "inspector_track_list_display"

View File

@ -31,34 +31,40 @@ namespace ArdourCanvas
struct LIBCANVAS_API HSV;
struct LIBCANVAS_API HSVA;
extern LIBCANVAS_API Color hsv_to_color (double h, double s, double v, double a = 1.0);
extern LIBCANVAS_API Color hsv_to_color (const HSV&, double a = 1.0);
extern LIBCANVAS_API Color hsva_to_color (const HSVA&);
extern LIBCANVAS_API Color hsva_to_color (double h, double s, double v, double a = 1.0);
extern LIBCANVAS_API void color_to_hsva (Color color, double& h, double& s, double& v, double& a);
extern LIBCANVAS_API void color_to_hsv (Color color, double& h, double& s, double& v);
extern LIBCANVAS_API void color_to_rgba (Color, double& r, double& g, double& b, double& a);
extern LIBCANVAS_API Color rgba_to_color (double r, double g, double b, double a);
uint32_t LIBCANVAS_API contrasting_text_color (uint32_t c);
struct LIBCANVAS_API HSV
struct LIBCANVAS_API HSV
{
HSV ();
HSV (double h, double s, double v);
HSV (double h, double s, double v, double a = 1.0);
HSV (Color);
virtual ~HSV() {}
double h;
double s;
double v;
double a;
bool is_gray() const { return s == 0; }
operator Color() const { return hsv_to_color (*this); }
bool is_gray() const;
Color color() const { return hsva_to_color (h,s, v, a); }
operator Color() const { return color(); }
HSV operator+ (const HSV&) const;
HSV operator- (const HSV&) const;
HSV operator* (double) const;
HSV& operator=(Color);
HSV& operator=(const std::string&);
bool operator== (const HSV& other);
double distance (const HSV& other) const;
HSV delta (const HSV& other) const;
HSV darker (double factor = 1.3) const { return shade (factor); }
HSV lighter (double factor = 0.7) const { return shade (factor); }
@ -66,26 +72,13 @@ struct LIBCANVAS_API HSV
HSV shade (double factor) const;
HSV mix (const HSV& other, double amt) const;
void print (std::ostream&) const;
HSV opposite() const;
HSV complement() const { return opposite(); }
protected:
virtual void clamp();
};
struct LIBCANVAS_API HSVA : public HSV
{
HSVA ();
HSVA (double h, double s, double v, double a);
HSVA (Color);
double a;
operator Color() const { return hsva_to_color (*this); }
HSVA operator+ (const HSVA&) const;
HSVA operator- (const HSVA&) const;
HSV bw_text () const;
HSV text() const;
HSV selected () const;
HSV outline() const;
void print (std::ostream&) const;
@ -96,6 +89,5 @@ struct LIBCANVAS_API HSVA : public HSV
}
std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSV& hsv);
std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSVA& hsva);
#endif /* __ardour_canvas_colors_h__ */

View File

@ -0,0 +1,54 @@
/**
* @file colorspace.h
* @author Pascal Getreuer 2005-2010 <getreuer@gmail.com>
*/
#ifndef _ARDOURCANVAS_COLORSPACE_H_
#define _ARDOURCANVAS_COLORSPACE_H_
/** @brief XYZ color of the D65 white point */
#define WHITEPOINT_X 0.950456
#define WHITEPOINT_Y 1.0
#define WHITEPOINT_Z 1.088754
void Rgb2Yuv(double *Y, double *U, double *V, double R, double G, double B);
void Yuv2Rgb(double *R, double *G, double *B, double Y, double U, double V);
void Rgb2Ycbcr(double *Y, double *Cb, double *Cr, double R, double G, double B);
void Ycbcr2Rgb(double *R, double *G, double *B, double Y, double Cb, double Cr);
void Rgb2Jpegycbcr(double *R, double *G, double *B, double Y, double Cb, double Cr);
void Jpegycbcr2Rgb(double *R, double *G, double *B, double Y, double Cb, double Cr);
void Rgb2Ypbpr(double *Y, double *Pb, double *Pr, double R, double G, double B);
void Ypbpr2Rgb(double *R, double *G, double *B, double Y, double Pb, double Pr);
void Rgb2Ydbdr(double *Y, double *Db, double *Dr, double R, double G, double B);
void Ydbdr2Rgb(double *R, double *G, double *B, double Y, double Db, double Dr);
void Rgb2Yiq(double *Y, double *I, double *Q, double R, double G, double B);
void Yiq2Rgb(double *R, double *G, double *B, double Y, double I, double Q);
void Rgb2Hsv(double *H, double *S, double *V, double R, double G, double B);
void Hsv2Rgb(double *R, double *G, double *B, double H, double S, double V);
void Rgb2Hsl(double *H, double *S, double *L, double R, double G, double B);
void Hsl2Rgb(double *R, double *G, double *B, double H, double S, double L);
void Rgb2Hsi(double *H, double *S, double *I, double R, double G, double B);
void Hsi2Rgb(double *R, double *G, double *B, double H, double S, double I);
void Rgb2Xyz(double *X, double *Y, double *Z, double R, double G, double B);
void Xyz2Rgb(double *R, double *G, double *B, double X, double Y, double Z);
void Xyz2Lab(double *L, double *a, double *b, double X, double Y, double Z);
void Lab2Xyz(double *X, double *Y, double *Z, double L, double a, double b);
void Xyz2Luv(double *L, double *u, double *v, double X, double Y, double Z);
void Luv2Xyz(double *X, double *Y, double *Z, double L, double u, double v);
void Xyz2Lch(double *L, double *C, double *H, double X, double Y, double Z);
void Lch2Xyz(double *X, double *Y, double *Z, double L, double C, double H);
void Xyz2Cat02lms(double *L, double *M, double *S, double X, double Y, double Z);
void Cat02lms2Xyz(double *X, double *Y, double *Z, double L, double M, double S);
void Rgb2Lab(double *L, double *a, double *b, double R, double G, double B);
void Lab2Rgb(double *R, double *G, double *B, double L, double a, double b);
void Rgb2Luv(double *L, double *u, double *v, double R, double G, double B);
void Luv2Rgb(double *R, double *G, double *B, double L, double u, double v);
void Rgb2Lch(double *L, double *C, double *H, double R, double G, double B);
void Lch2Rgb(double *R, double *G, double *B, double L, double C, double H);
void Rgb2Cat02lms(double *L, double *M, double *S, double R, double G, double B);
void Cat02lms2Rgb(double *R, double *G, double *B, double L, double M, double S);
#endif /* _ARDOURCANVAS_COLORSPACE_H_ */

View File

@ -21,6 +21,7 @@
#include <stdint.h>
#include "canvas/colors.h"
#include "canvas/colorspace.h"
using namespace std;
using namespace ArdourCanvas;
@ -31,7 +32,14 @@ using std::min;
void
ArdourCanvas::color_to_hsv (Color color, double& h, double& s, double& v)
{
double r, g, b, a;
double a;
color_to_hsva (color, h, s, v, a);
}
void
ArdourCanvas::color_to_hsva (Color color, double& h, double& s, double& v, double& a)
{
double r, g, b;
double cmax;
double cmin;
double delta;
@ -57,7 +65,8 @@ ArdourCanvas::color_to_hsv (Color color, double& h, double& s, double& v)
if (cmax == 0) {
// r = g = b == 0 ... v is undefined, s = 0
s = 0.0;
h = -1.0;
h = 0.0;
return;
}
if (delta != 0.0) {
@ -70,6 +79,13 @@ ArdourCanvas::color_to_hsv (Color color, double& h, double& s, double& v)
}
h *= 60.0;
if (h < 0.0) {
/* negative values are legal but confusing, because
they alias positive values.
*/
h = 360 + h;
}
}
if (delta == 0 || cmax == 0) {
@ -80,23 +96,16 @@ ArdourCanvas::color_to_hsv (Color color, double& h, double& s, double& v)
}
ArdourCanvas::Color
ArdourCanvas::hsv_to_color (const HSV& hsv, double a)
{
return hsv_to_color (hsv.h, hsv.s, hsv.v, a);
}
ArdourCanvas::Color
ArdourCanvas::hsv_to_color (double h, double s, double v, double a)
ArdourCanvas::hsva_to_color (double h, double s, double v, double a)
{
s = min (1.0, max (0.0, s));
v = min (1.0, max (0.0, v));
if (s == 0) {
// achromatic (grey)
return rgba_to_color (v, v, v, a);
}
h = min (360.0, max (0.0, h));
h = fmod (h + 360.0, 360.0);
double c = v * s;
double x = c * (1.0 - fabs(fmod(h / 60.0, 2) - 1.0));
@ -197,31 +206,50 @@ ArdourCanvas::contrasting_text_color (uint32_t c)
return (luminance (c) < 0.50) ? white : black;
}
HSV::HSV ()
: h (1.0)
: h (0.0)
, s (1.0)
, v (1.0)
, a (1.0)
{
}
HSV::HSV (double hh, double ss, double vv)
HSV::HSV (double hh, double ss, double vv, double aa)
: h (hh)
, s (ss)
, v (vv)
, a (aa)
{
if (h < 0.0) {
/* normalize negative hue values into positive range */
h = 360.0 + h;
}
}
HSV::HSV (Color c)
{
color_to_hsv (c, h, s, v);
color_to_hsva (c, h, s, v, a);
}
bool
HSV::is_gray () const
{
return s == 0;
}
void
HSV::clamp ()
{
s = min (s, 1.0);
v = min (v, 1.0);
h = min (255.0, h);
h = fmod (h, 360.0);
if (h < 0.0) {
/* normalize negative hue values into positive range */
h = 360.0 + h;
}
s = min (1.0, s);
v = min (1.0, v);
a = min (1.0, a);
}
HSV
@ -231,7 +259,8 @@ HSV::operator+ (const HSV& operand) const
hsv.h = h + operand.h;
hsv.s = s + operand.s;
hsv.v = v + operand.v;
hsv.clamp();
hsv.a = a + operand.a;
hsv.clamp ();
return hsv;
}
@ -241,20 +270,37 @@ HSV::operator- (const HSV& operand) const
HSV hsv;
hsv.h = h - operand.h;
hsv.s = s - operand.s;
hsv.v = v - operand.v;
hsv.clamp();
hsv.v = s - operand.v;
hsv.a = a - operand.a;
hsv.clamp ();
return hsv;
}
HSV
HSV::operator* (double d) const
HSV&
HSV::operator=(Color c)
{
HSV hsv;
hsv.h = h * d;
hsv.s = s * d;
hsv.v = v * d;
hsv.clamp();
return hsv;
color_to_hsva (c, h, s, v, a);
clamp ();
return *this;
}
HSV&
HSV::operator=(const std::string& str)
{
uint32_t c;
c = strtol (str.c_str(), 0, 16);
color_to_hsva (c, h, s, v, a);
clamp ();
return *this;
}
bool
HSV::operator== (const HSV& other)
{
return h == other.h &&
s == other.s &&
v == other.v &&
a == other.a;
}
HSV
@ -274,16 +320,14 @@ HSV::shade (double factor) const
if (factor > 1.0) {
if (s < 88) {
hsv.v *= 1.0/(factor/10.0);
} else {
hsv.s *= factor;
}
hsv.v += (hsv.v * (factor * 10.0));
}
hsv.s *= factor;
} else {
if (s < 88) {
hsv.v *= 1.0/factor;
} else {
hsv.s *= factor;
}
hsv.v -= (hsv.v * (factor * 10.0));
}
hsv.s *= factor;
}
hsv.clamp();
@ -291,6 +335,18 @@ HSV::shade (double factor) const
return hsv;
}
HSV
HSV::outline () const
{
if (luminance (color()) < 0.50) {
/* light color, darker outline: black with 15% opacity */
return HSV (0.0, 0.0, 0.0, 0.15);
} else {
/* dark color, lighter outline: white with 15% opacity */
return HSV (0.0, 0.0, 1.0, 0.15);
}
}
HSV
HSV::mix (const HSV& other, double amount) const
{
@ -305,77 +361,104 @@ HSV::mix (const HSV& other, double amount) const
return hsv;
}
HSV
HSV::delta (const HSV& other) const
{
HSV d;
d.h = h - other.h;
d.s = s - other.s;
d.v = v - other.v;
/* do not clamp - we are returning a delta */
return d;
}
double
HSV::distance (const HSV& other) const
{
/* Use CIE94 definition for now */
double sL, sA, sB;
double oL, oA, oB;
double r, g, b, a;
Color c;
c = hsva_to_color (h, s, v, a);
color_to_rgba (c, r, g, b, a);
Rgb2Lab (&sL, &sA, &sB, r, g, b);
c = hsva_to_color (other.h, other.s, other.v, other.a);
color_to_rgba (c, r, g, b, a);
Rgb2Lab (&oL, &oA, &oB, r, g, b);
// Weighting factors depending on the application (1 = default)
const double whtL = 1.0;
const double whtC = 1.0;
const double whtH = 1.0;
const double xC1 = sqrt ((sA * sA) + (sB * oB));
const double xC2 = sqrt ((oA * oA) + (oB * oB));
double xDL = oL - sL;
double xDC = xC2 - xC1;
const double xDE = sqrt (((sL - oL) * (sL - oL))
+ ((sA - oA) * (sA - oA))
+ ((sB - oB) * (sB - oB)));
double xDH;
if (sqrt (xDE) > (sqrt (abs (xDL)) + sqrt (abs (xDC)))) {
xDH = sqrt ((xDE * xDE) - (xDL * xDL) - (xDC * xDC));
} else {
xDH = 0;
}
const double xSC = 1 + (0.045 * xC1);
const double xSH = 1 + (0.015 * xC1);
xDL /= whtL;
xDC /= whtC * xSC;
xDH /= whtH * xSH;
return sqrt ((xDL * xDL) + (xDC * xDC) + (xDH * xDH));
}
HSV
HSV::opposite () const
{
HSV hsv (*this);
hsv.h = fmod (h + 180.0, 360.0);
return hsv;
}
HSV
HSV::bw_text () const
{
return HSV (contrasting_text_color (color()));
}
HSV
HSV::text () const
{
return opposite ();
}
HSV
HSV::selected () const
{
/* XXX hack */
return HSV (Color (0xff0000));
}
void
HSV::print (std::ostream& o) const
{
if (!is_gray()) {
o << "hsv " << h << '|' << s << '|' << v;
o << '(' << s << ',' << v << ',' << a << ')';
} else {
o << "hsv gray";
o << "gray(" << v << ')';
}
}
HSVA::HSVA ()
: a (1.0)
{
}
HSVA::HSVA (double hh, double ss, double vv, double aa)
: HSV (hh, ss, vv)
, a (aa)
{
}
HSVA::HSVA (Color c)
{
color_to_hsv (c, h, s, v);
a = c & 0xff;
}
void
HSVA::clamp ()
{
HSV::clamp ();
a = min (1.0, a);
}
HSVA
HSVA::operator+ (const HSVA& operand) const
{
HSVA hsv;
hsv.h = h + operand.h;
hsv.s = s + operand.s;
hsv.v = v + operand.v;
hsv.a = a + operand.a;
return hsv;
}
HSVA
HSVA::operator- (const HSVA& operand) const
{
HSVA hsv;
hsv.h = h - operand.h;
hsv.s = s - operand.s;
hsv.a = a - operand.a;
return hsv;
}
void
HSVA::print (std::ostream& o) const
{
if (!is_gray()) {
o << "hsva " << h << '|' << s << '|' << v << '|' << a;
} else {
o << "hsva gray";
}
}
ArdourCanvas::Color
ArdourCanvas::hsva_to_color (const HSVA& hsva)
{
return hsv_to_color (hsva.h, hsva.s, hsva.v, hsva.a);
}
std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSV& hsv) { hsv.print (o); return o; }
std::ostream& operator<<(std::ostream& o, const ArdourCanvas::HSVA& hsva) { hsva.print (o); return o; }

940
libs/canvas/colorspace.cc Normal file
View File

@ -0,0 +1,940 @@
/**
* @file colorspace.c
* @author Pascal Getreuer 2005-2010 <getreuer@gmail.com>
*
* == Summary ==
* This file implements routines for color transformations between the spaces
* sRGB, Y'UV, Y'CbCr, Y'PbPr, Y'DbDr, Y'IQ, HSV, HSL, HSI, CIEXYZ, CIELAB,
* CIELUV, CIELCH, and CIECAT02 LMS.
*
* == Usage ==
* First call GetColorTransform, specifying the source and destination color
* spaces as "dest<-src" or "src->dest". Then call ApplyColorTransform to
* perform the transform:
@code
double S[3] = {173, 0.8, 0.5};
double D[3];
colortransform Trans;
if(!(GetColorTransform(&Trans, "HSI -> Lab")))
{
printf("Invalid syntax or unknown color space\n");
return;
}
ApplyColorTransform(Trans, &D[0], &D[1], &D[2], S[0], S[1], S[2]);
@endcode
* "num" is a typedef defined at the beginning of colorspace.h that may be set
* to either double or float, depending on the application.
*
* Specific transformation routines can also be called directly. The following
* converts an sRGB color to CIELAB and then back to sRGB:
@code
double R = 0.85, G = 0.32, B = 0.5;
double L, a, b;
Rgb2Lab(&L, &a, &b, R, G, B);
Lab2Rgb(&R, &G, &B, L, a, b);
@endcode
* Generally, the calling syntax is
@code
Foo2Bar(&B0, &B1, &B2, F0, F1, F2);
@endcode
* where (F0,F1,F2) are the coordinates of a color in space "Foo" and
* (B0,B1,B2) are the transformed coordinates in space "Bar." For any
* transformation routine, its inverse has the sytax
@code
Bar2Foo(&F0, &F1, &F2, B0, B1, B2);
@endcode
*
* The conversion routines are consistently named with the first letter of a
* color space capitalized with following letters in lower case and omitting
* prime symbols. For example, "Rgb2Ydbdr" converts sRGB to Y'DbDr. For
* any transformation routine Foo2Bar, its inverse is Bar2Foo.
*
* All transformations assume a two degree observer angle and a D65 illuminant.
* The white point can be changed by modifying the WHITEPOINT_X, WHITEPOINT_Y,
* WHITEPOINT_Z definitions at the beginning of colorspace.h.
*
* == List of transformation routines ==
* - Rgb2Yuv(double *Y, double *U, double *V, double R, double G, double B)
* - Rgb2Ycbcr(double *Y, double *Cb, double *Cr, double R, double G, double B)
* - Rgb2Jpegycbcr(double *Y, double *Cb, double *Cr, double R, double G, double B)
* - Rgb2Ypbpr(double *Y, double *Pb, double *Pr, double R, double G, double B)
* - Rgb2Ydbdr(double *Y, double *Db, double *Dr, double R, double G, double B)
* - Rgb2Yiq(double *Y, double *I, double *Q, double R, double G, double B)
* - Rgb2Hsv(double *H, double *S, double *V, double R, double G, double B)
* - Rgb2Hsl(double *H, double *S, double *L, double R, double G, double B)
* - Rgb2Hsi(double *H, double *S, double *I, double R, double G, double B)
* - Rgb2Xyz(double *X, double *Y, double *Z, double R, double G, double B)
* - Xyz2Lab(double *L, double *a, double *b, double X, double Y, double Z)
* - Xyz2Luv(double *L, double *u, double *v, double X, double Y, double Z)
* - Xyz2Lch(double *L, double *C, double *h, double X, double Y, double Z)
* - Xyz2Cat02lms(double *L, double *M, double *S, double X, double Y, double Z)
* - Rgb2Lab(double *L, double *a, double *b, double R, double G, double B)
* - Rgb2Luv(double *L, double *u, double *v, double R, double G, double B)
* - Rgb2Lch(double *L, double *C, double *h, double R, double G, double B)
* - Rgb2Cat02lms(double *L, double *M, double *S, double R, double G, double B)
* (Similarly for the inverse transformations.)
*
* It is possible to transform between two arbitrary color spaces by first
* transforming from the source space to sRGB and then transforming from
* sRGB to the desired destination space. For transformations between CIE
* color spaces, it is convenient to use XYZ as the intermediate space. This
* is the strategy used by GetColorTransform and ApplyColorTransform.
*
* == References ==
* The definitions of these spaces and the many of the transformation formulas
* can be found in
*
* Poynton, "Frequently Asked Questions About Gamma"
* http://www.poynton.com/notes/colour_and_gamma/GammaFAQ.html
*
* Poynton, "Frequently Asked Questions About Color"
* http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html
*
* and Wikipedia articles
* http://en.wikipedia.org/wiki/SRGB
* http://en.wikipedia.org/wiki/YUV
* http://en.wikipedia.org/wiki/YCbCr
* http://en.wikipedia.org/wiki/YPbPr
* http://en.wikipedia.org/wiki/YDbDr
* http://en.wikipedia.org/wiki/YIQ
* http://en.wikipedia.org/wiki/HSL_and_HSV
* http://en.wikipedia.org/wiki/CIE_1931_color_space
* http://en.wikipedia.org/wiki/Lab_color_space
* http://en.wikipedia.org/wiki/CIELUV_color_space
* http://en.wikipedia.org/wiki/LMS_color_space
*
* == License (BSD) ==
* Copyright (c) 2005-2010, Pascal Getreuer
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "canvas/colorspace.h"
/** @brief Min of A and B */
#define MIN(A,B) (((A) <= (B)) ? (A) : (B))
/** @brief Max of A and B */
#define MAX(A,B) (((A) >= (B)) ? (A) : (B))
/** @brief Min of A, B, and C */
#define MIN3(A,B,C) (((A) <= (B)) ? MIN(A,C) : MIN(B,C))
/** @brief Max of A, B, and C */
#define MAX3(A,B,C) (((A) >= (B)) ? MAX(A,C) : MAX(B,C))
#ifndef M_PI
/** @brief The constant pi */
#define M_PI 3.14159265358979323846264338327950288
#endif
/**
* @brief sRGB gamma correction, transforms R to R'
* http://en.wikipedia.org/wiki/SRGB
*/
#define GAMMACORRECTION(t) \
(((t) <= 0.0031306684425005883) ? \
(12.92*(t)) : (1.055*pow((t), 0.416666666666666667) - 0.055))
/**
* @brief Inverse sRGB gamma correction, transforms R' to R
*/
#define INVGAMMACORRECTION(t) \
(((t) <= 0.0404482362771076) ? \
((t)/12.92) : pow(((t) + 0.055)/1.055, 2.4))
/**
* @brief CIE L*a*b* f function (used to convert XYZ to L*a*b*)
* http://en.wikipedia.org/wiki/Lab_color_space
*/
#define LABF(t) \
((t >= 8.85645167903563082e-3) ? \
pow(t,0.333333333333333) : (841.0/108.0)*(t) + (4.0/29.0))
/**
* @brief CIE L*a*b* inverse f function
* http://en.wikipedia.org/wiki/Lab_color_space
*/
#define LABINVF(t) \
((t >= 0.206896551724137931) ? \
((t)*(t)*(t)) : (108.0/841.0)*((t) - (4.0/29.0)))
/** @brief u'v' coordinates of the white point for CIE Lu*v* */
#define WHITEPOINT_U ((4*WHITEPOINT_X) \
/(WHITEPOINT_X + 15*WHITEPOINT_Y + 3*WHITEPOINT_Z))
#define WHITEPOINT_V ((9*WHITEPOINT_Y) \
/(WHITEPOINT_X + 15*WHITEPOINT_Y + 3*WHITEPOINT_Z))
/** @brief Enumeration of the supported color spaces */
#define UNKNOWN_SPACE 0
#define RGB_SPACE 1
#define YUV_SPACE 2
#define YCBCR_SPACE 3
#define JPEGYCBCR_SPACE 4
#define YPBPR_SPACE 5
#define YDBDR_SPACE 6
#define YIQ_SPACE 7
#define HSV_SPACE 8
#define HSL_SPACE 9
#define HSI_SPACE 10
#define XYZ_SPACE 11
#define LAB_SPACE 12
#define LUV_SPACE 13
#define LCH_SPACE 14
#define CAT02LMS_SPACE 15
#define NUM_TRANSFORM_PAIRS 18
/*
* == Linear color transformations ==
*
* The following routines implement transformations between sRGB and
* the linearly-related color spaces Y'UV, Y'PbPr, Y'DbDr, and Y'IQ.
*/
/**
* @brief Convert sRGB to NTSC/PAL Y'UV Luma + Chroma
*
* @param Y, U, V pointers to hold the result
* @param R, G, B the input sRGB values
*
* Wikipedia: http://en.wikipedia.org/wiki/YUV
*/
void Rgb2Yuv(double *Y, double *U, double *V, double R, double G, double B)
{
*Y = (double)( 0.299*R + 0.587*G + 0.114*B);
*U = (double)(-0.147*R - 0.289*G + 0.436*B);
*V = (double)( 0.615*R - 0.515*G - 0.100*B);
}
/**
* @brief Convert NTSC/PAL Y'UV to sRGB
*
* @param R, G, B pointers to hold the result
* @param Y, U, V the input YUV values
*/
void Yuv2Rgb(double *R, double *G, double *B, double Y, double U, double V)
{
*R = (double)(Y - 3.945707070708279e-05*U + 1.1398279671717170825*V);
*G = (double)(Y - 0.3946101641414141437*U - 0.5805003156565656797*V);
*B = (double)(Y + 2.0319996843434342537*U - 4.813762626262513e-04*V);
}
/** @brief sRGB to Y'CbCr Luma + Chroma */
void Rgb2Ycbcr(double *Y, double *Cb, double *Cr, double R, double G, double B)
{
*Y = (double)( 65.481*R + 128.553*G + 24.966*B + 16);
*Cb = (double)(-37.797*R - 74.203*G + 112.0 *B + 128);
*Cr = (double)(112.0 *R - 93.786*G - 18.214*B + 128);
}
/** @brief Y'CbCr to sRGB */
void Ycbcr2Rgb(double *R, double *G, double *B, double Y, double Cr, double Cb)
{
Y -= 16;
Cb -= 128;
Cr -= 128;
*R = (double)(0.00456621004566210107*Y + 1.1808799897946415e-09*Cr + 0.00625892896994393634*Cb);
*G = (double)(0.00456621004566210107*Y - 0.00153632368604490212*Cr - 0.00318811094965570701*Cb);
*B = (double)(0.00456621004566210107*Y + 0.00791071623355474145*Cr + 1.1977497040190077e-08*Cb);
}
/** @brief sRGB to JPEG-Y'CbCr Luma + Chroma */
void Rgb2Jpegycbcr(double *Y, double *Cb, double *Cr, double R, double G, double B)
{
Rgb2Ypbpr(Y, Cb, Cr, R, G, B);
*Cb += (double)0.5;
*Cr += (double)0.5;
}
/** @brief JPEG-Y'CbCr to sRGB */
void Jpegycbcr2Rgb(double *R, double *G, double *B, double Y, double Cb, double Cr)
{
Cb -= (double)0.5;
Cr -= (double)0.5;
Ypbpr2Rgb(R, G, B, Y, Cb, Cr);
}
/** @brief sRGB to Y'PbPr Luma (ITU-R BT.601) + Chroma */
void Rgb2Ypbpr(double *Y, double *Pb, double *Pr, double R, double G, double B)
{
*Y = (double)( 0.299 *R + 0.587 *G + 0.114 *B);
*Pb = (double)(-0.1687367*R - 0.331264*G + 0.5 *B);
*Pr = (double)( 0.5 *R - 0.418688*G - 0.081312*B);
}
/** @brief Y'PbPr to sRGB */
void Ypbpr2Rgb(double *R, double *G, double *B, double Y, double Pb, double Pr)
{
*R = (double)(0.99999999999914679361*Y - 1.2188941887145875e-06*Pb + 1.4019995886561440468*Pr);
*G = (double)(0.99999975910502514331*Y - 0.34413567816504303521*Pb - 0.71413649331646789076*Pr);
*B = (double)(1.00000124040004623180*Y + 1.77200006607230409200*Pb + 2.1453384174593273e-06*Pr);
}
/** @brief sRGB to SECAM Y'DbDr Luma + Chroma */
void Rgb2Ydbdr(double *Y, double *Db, double *Dr, double R, double G, double B)
{
*Y = (double)( 0.299*R + 0.587*G + 0.114*B);
*Db = (double)(-0.450*R - 0.883*G + 1.333*B);
*Dr = (double)(-1.333*R + 1.116*G + 0.217*B);
}
/** @brief SECAM Y'DbDr to sRGB */
void Ydbdr2Rgb(double *R, double *G, double *B, double Y, double Db, double Dr)
{
*R = (double)(Y + 9.2303716147657e-05*Db - 0.52591263066186533*Dr);
*G = (double)(Y - 0.12913289889050927*Db + 0.26789932820759876*Dr);
*B = (double)(Y + 0.66467905997895482*Db - 7.9202543533108e-05*Dr);
}
/** @brief sRGB to NTSC YIQ */
void Rgb2Yiq(double *Y, double *I, double *Q, double R, double G, double B)
{
*Y = (double)(0.299 *R + 0.587 *G + 0.114 *B);
*I = (double)(0.595716*R - 0.274453*G - 0.321263*B);
*Q = (double)(0.211456*R - 0.522591*G + 0.311135*B);
}
/** @brief Convert NTSC YIQ to sRGB */
void Yiq2Rgb(double *R, double *G, double *B, double Y, double I, double Q)
{
*R = (double)(Y + 0.9562957197589482261*I + 0.6210244164652610754*Q);
*G = (double)(Y - 0.2721220993185104464*I - 0.6473805968256950427*Q);
*B = (double)(Y - 1.1069890167364901945*I + 1.7046149983646481374*Q);
}
/*
* == Hue Saturation Value/Lightness/Intensity color transformations ==
*
* The following routines implement transformations between sRGB and
* color spaces HSV, HSL, and HSI.
*/
/**
* @brief Convert an sRGB color to Hue-Saturation-Value (HSV)
*
* @param H, S, V pointers to hold the result
* @param R, G, B the input sRGB values scaled in [0,1]
*
* This routine transforms from sRGB to the hexcone HSV color space. The
* sRGB values are assumed to be between 0 and 1. The output values are
* H = hexagonal hue angle (0 <= H < 360),
* S = C/V (0 <= S <= 1),
* V = max(R',G',B') (0 <= V <= 1),
* where C = max(R',G',B') - min(R',G',B'). The inverse color transformation
* is given by Hsv2Rgb.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Rgb2Hsv(double *H, double *S, double *V, double R, double G, double B)
{
double Max = MAX3(R, G, B);
double Min = MIN3(R, G, B);
double C = Max - Min;
*V = Max;
if(C > 0)
{
if(Max == R)
{
*H = (G - B) / C;
if(G < B)
*H += 6;
}
else if(Max == G)
*H = 2 + (B - R) / C;
else
*H = 4 + (R - G) / C;
*H *= 60;
*S = C / Max;
}
else
*H = *S = 0;
}
/**
* @brief Convert a Hue-Saturation-Value (HSV) color to sRGB
*
* @param R, G, B pointers to hold the result
* @param H, S, V the input HSV values
*
* The input values are assumed to be scaled as
* 0 <= H < 360,
* 0 <= S <= 1,
* 0 <= V <= 1.
* The output sRGB values are scaled between 0 and 1. This is the inverse
* transformation of Rgb2Hsv.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Hsv2Rgb(double *R, double *G, double *B, double H, double S, double V)
{
double C = S * V;
double Min = V - C;
double X;
H -= 360*floor(H/360);
H /= 60;
X = C*(1 - fabs(H - 2*floor(H/2) - 1));
switch((int)H)
{
case 0:
*R = Min + C;
*G = Min + X;
*B = Min;
break;
case 1:
*R = Min + X;
*G = Min + C;
*B = Min;
break;
case 2:
*R = Min;
*G = Min + C;
*B = Min + X;
break;
case 3:
*R = Min;
*G = Min + X;
*B = Min + C;
break;
case 4:
*R = Min + X;
*G = Min;
*B = Min + C;
break;
case 5:
*R = Min + C;
*G = Min;
*B = Min + X;
break;
default:
*R = *G = *B = 0;
}
}
/**
* @brief Convert an sRGB color to Hue-Saturation-Lightness (HSL)
*
* @param H, S, L pointers to hold the result
* @param R, G, B the input sRGB values scaled in [0,1]
*
* This routine transforms from sRGB to the double hexcone HSL color space
* The sRGB values are assumed to be between 0 and 1. The outputs are
* H = hexagonal hue angle (0 <= H < 360),
* S = { C/(2L) if L <= 1/2 (0 <= S <= 1),
* { C/(2 - 2L) if L > 1/2
* L = (max(R',G',B') + min(R',G',B'))/2 (0 <= L <= 1),
* where C = max(R',G',B') - min(R',G',B'). The inverse color transformation
* is given by Hsl2Rgb.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Rgb2Hsl(double *H, double *S, double *L, double R, double G, double B)
{
double Max = MAX3(R, G, B);
double Min = MIN3(R, G, B);
double C = Max - Min;
*L = (Max + Min)/2;
if(C > 0)
{
if(Max == R)
{
*H = (G - B) / C;
if(G < B)
*H += 6;
}
else if(Max == G)
*H = 2 + (B - R) / C;
else
*H = 4 + (R - G) / C;
*H *= 60;
*S = (*L <= 0.5) ? (C/(2*(*L))) : (C/(2 - 2*(*L)));
}
else
*H = *S = 0;
}
/**
* @brief Convert a Hue-Saturation-Lightness (HSL) color to sRGB
*
* @param R, G, B pointers to hold the result
* @param H, S, L the input HSL values
*
* The input values are assumed to be scaled as
* 0 <= H < 360,
* 0 <= S <= 1,
* 0 <= L <= 1.
* The output sRGB values are scaled between 0 and 1. This is the inverse
* transformation of Rgb2Hsl.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Hsl2Rgb(double *R, double *G, double *B, double H, double S, double L)
{
double C = (L <= 0.5) ? (2*L*S) : ((2 - 2*L)*S);
double Min = L - 0.5*C;
double X;
H -= 360*floor(H/360);
H /= 60;
X = C*(1 - fabs(H - 2*floor(H/2) - 1));
switch((int)H)
{
case 0:
*R = Min + C;
*G = Min + X;
*B = Min;
break;
case 1:
*R = Min + X;
*G = Min + C;
*B = Min;
break;
case 2:
*R = Min;
*G = Min + C;
*B = Min + X;
break;
case 3:
*R = Min;
*G = Min + X;
*B = Min + C;
break;
case 4:
*R = Min + X;
*G = Min;
*B = Min + C;
break;
case 5:
*R = Min + C;
*G = Min;
*B = Min + X;
break;
default:
*R = *G = *B = 0;
}
}
/**
* @brief Convert an sRGB color to Hue-Saturation-Intensity (HSI)
*
* @param H, S, I pointers to hold the result
* @param R, G, B the input sRGB values scaled in [0,1]
*
* This routine transforms from sRGB to the cylindrical HSI color space. The
* sRGB values are assumed to be between 0 and 1. The output values are
* H = polar hue angle (0 <= H < 360),
* S = 1 - min(R',G',B')/I (0 <= S <= 1),
* I = (R'+G'+B')/3 (0 <= I <= 1).
* The inverse color transformation is given by Hsi2Rgb.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Rgb2Hsi(double *H, double *S, double *I, double R, double G, double B)
{
double alpha = 0.5*(2*R - G - B);
double beta = 0.866025403784439*(G - B);
*I = (R + G + B)/3;
if(*I > 0)
{
*S = 1 - MIN3(R,G,B) / *I;
*H = atan2(beta, alpha)*(180/M_PI);
if(*H < 0)
*H += 360;
}
else
*H = *S = 0;
}
/**
* @brief Convert a Hue-Saturation-Intesity (HSI) color to sRGB
*
* @param R, G, B pointers to hold the result
* @param H, S, I the input HSI values
*
* The input values are assumed to be scaled as
* 0 <= H < 360,
* 0 <= S <= 1,
* 0 <= I <= 1.
* The output sRGB values are scaled between 0 and 1. This is the inverse
* transformation of Rgb2Hsi.
*
* Wikipedia: http://en.wikipedia.org/wiki/HSL_and_HSV
*/
void Hsi2Rgb(double *R, double *G, double *B, double H, double S, double I)
{
H -= 360*floor(H/360);
if(H < 120)
{
*B = I*(1 - S);
*R = I*(1 + S*cos(H*(M_PI/180))/cos((60 - H)*(M_PI/180)));
*G = 3*I - *R - *B;
}
else if(H < 240)
{
H -= 120;
*R = I*(1 - S);
*G = I*(1 + S*cos(H*(M_PI/180))/cos((60 - H)*(M_PI/180)));
*B = 3*I - *R - *G;
}
else
{
H -= 240;
*G = I*(1 - S);
*B = I*(1 + S*cos(H*(M_PI/180))/cos((60 - H)*(M_PI/180)));
*R = 3*I - *G - *B;
}
}
/*
* == CIE color transformations ==
*
* The following routines implement transformations between sRGB and
* the CIE color spaces XYZ, L*a*b, L*u*v*, and L*C*H*. These
* transforms assume a 2 degree observer angle and a D65 illuminant.
*/
/**
* @brief Transform sRGB to CIE XYZ with the D65 white point
*
* @param X, Y, Z pointers to hold the result
* @param R, G, B the input sRGB values
*
* Poynton, "Frequently Asked Questions About Color," page 10
* Wikipedia: http://en.wikipedia.org/wiki/SRGB
* Wikipedia: http://en.wikipedia.org/wiki/CIE_1931_color_space
*/
void Rgb2Xyz(double *X, double *Y, double *Z, double R, double G, double B)
{
R = INVGAMMACORRECTION(R);
G = INVGAMMACORRECTION(G);
B = INVGAMMACORRECTION(B);
*X = (double)(0.4123955889674142161*R + 0.3575834307637148171*G + 0.1804926473817015735*B);
*Y = (double)(0.2125862307855955516*R + 0.7151703037034108499*G + 0.07220049864333622685*B);
*Z = (double)(0.01929721549174694484*R + 0.1191838645808485318*G + 0.9504971251315797660*B);
}
/**
* @brief Transform CIE XYZ to sRGB with the D65 white point
*
* @param R, G, B pointers to hold the result
* @param X, Y, Z the input XYZ values
*
* Official sRGB specification (IEC 61966-2-1:1999)
* Poynton, "Frequently Asked Questions About Color," page 10
* Wikipedia: http://en.wikipedia.org/wiki/SRGB
* Wikipedia: http://en.wikipedia.org/wiki/CIE_1931_color_space
*/
void Xyz2Rgb(double *R, double *G, double *B, double X, double Y, double Z)
{
double R1, B1, G1, Min;
R1 = (double)( 3.2406*X - 1.5372*Y - 0.4986*Z);
G1 = (double)(-0.9689*X + 1.8758*Y + 0.0415*Z);
B1 = (double)( 0.0557*X - 0.2040*Y + 1.0570*Z);
Min = MIN3(R1, G1, B1);
/* Force nonnegative values so that gamma correction is well-defined. */
if(Min < 0)
{
R1 -= Min;
G1 -= Min;
B1 -= Min;
}
/* Transform from RGB to R'G'B' */
*R = GAMMACORRECTION(R1);
*G = GAMMACORRECTION(G1);
*B = GAMMACORRECTION(B1);
}
/**
* Convert CIE XYZ to CIE L*a*b* (CIELAB) with the D65 white point
*
* @param L, a, b pointers to hold the result
* @param X, Y, Z the input XYZ values
*
* Wikipedia: http://en.wikipedia.org/wiki/Lab_color_space
*/
void Xyz2Lab(double *L, double *a, double *b, double X, double Y, double Z)
{
X /= WHITEPOINT_X;
Y /= WHITEPOINT_Y;
Z /= WHITEPOINT_Z;
X = LABF(X);
Y = LABF(Y);
Z = LABF(Z);
*L = 116*Y - 16;
*a = 500*(X - Y);
*b = 200*(Y - Z);
}
/**
* Convert CIE L*a*b* (CIELAB) to CIE XYZ with the D65 white point
*
* @param X, Y, Z pointers to hold the result
* @param L, a, b the input L*a*b* values
*
* Wikipedia: http://en.wikipedia.org/wiki/Lab_color_space
*/
void Lab2Xyz(double *X, double *Y, double *Z, double L, double a, double b)
{
L = (L + 16)/116;
a = L + a/500;
b = L - b/200;
*X = WHITEPOINT_X*LABINVF(a);
*Y = WHITEPOINT_Y*LABINVF(L);
*Z = WHITEPOINT_Z*LABINVF(b);
}
/**
* Convert CIE XYZ to CIE L*u*v* (CIELUV) with the D65 white point
*
* @param L, u, v pointers to hold the result
* @param X, Y, Z the input XYZ values
*
* Wikipedia: http://en.wikipedia.org/wiki/CIELUV_color_space
*/
void Xyz2Luv(double *L, double *u, double *v, double X, double Y, double Z)
{
double u1, v1, Denom;
if((Denom = X + 15*Y + 3*Z) > 0)
{
u1 = (4*X) / Denom;
v1 = (9*Y) / Denom;
}
else
u1 = v1 = 0;
Y /= WHITEPOINT_Y;
Y = LABF(Y);
*L = 116*Y - 16;
*u = 13*(*L)*(u1 - WHITEPOINT_U);
*v = 13*(*L)*(v1 - WHITEPOINT_V);
}
/**
* Convert CIE L*u*v* (CIELUV) to CIE XYZ with the D65 white point
*
* @param X, Y, Z pointers to hold the result
* @param L, u, v the input L*u*v* values
*
* Wikipedia: http://en.wikipedia.org/wiki/CIELUV_color_space
*/
void Luv2Xyz(double *X, double *Y, double *Z, double L, double u, double v)
{
*Y = (L + 16)/116;
*Y = WHITEPOINT_Y*LABINVF(*Y);
if(L != 0)
{
u /= L;
v /= L;
}
u = u/13 + WHITEPOINT_U;
v = v/13 + WHITEPOINT_V;
*X = (*Y) * ((9*u)/(4*v));
*Z = (*Y) * ((3 - 0.75*u)/v - 5);
}
/**
* Convert CIE XYZ to CIE L*C*H* with the D65 white point
*
* @param L, C, H pointers to hold the result
* @param X, Y, Z the input XYZ values
*
* CIE L*C*H* is related to CIE L*a*b* by
* a* = C* cos(H* pi/180),
* b* = C* sin(H* pi/180).
*/
void Xyz2Lch(double *L, double *C, double *H, double X, double Y, double Z)
{
double a, b;
Xyz2Lab(L, &a, &b, X, Y, Z);
*C = sqrt(a*a + b*b);
*H = atan2(b, a)*180.0/M_PI;
if(*H < 0)
*H += 360;
}
/**
* Convert CIE L*C*H* to CIE XYZ with the D65 white point
*
* @param X, Y, Z pointers to hold the result
* @param L, C, H the input L*C*H* values
*/
void Lch2Xyz(double *X, double *Y, double *Z, double L, double C, double H)
{
double a = C * cos(H*(M_PI/180.0));
double b = C * sin(H*(M_PI/180.0));
Lab2Xyz(X, Y, Z, L, a, b);
}
/** @brief XYZ to CAT02 LMS */
void Xyz2Cat02lms(double *L, double *M, double *S, double X, double Y, double Z)
{
*L = (double)( 0.7328*X + 0.4296*Y - 0.1624*Z);
*M = (double)(-0.7036*X + 1.6975*Y + 0.0061*Z);
*S = (double)( 0.0030*X + 0.0136*Y + 0.9834*Z);
}
/** @brief CAT02 LMS to XYZ */
void Cat02lms2Xyz(double *X, double *Y, double *Z, double L, double M, double S)
{
*X = (double)( 1.096123820835514*L - 0.278869000218287*M + 0.182745179382773*S);
*Y = (double)( 0.454369041975359*L + 0.473533154307412*M + 0.072097803717229*S);
*Z = (double)(-0.009627608738429*L - 0.005698031216113*M + 1.015325639954543*S);
}
/*
* == Glue functions for multi-stage transforms ==
*/
void Rgb2Lab(double *L, double *a, double *b, double R, double G, double B)
{
double X, Y, Z;
Rgb2Xyz(&X, &Y, &Z, R, G, B);
Xyz2Lab(L, a, b, X, Y, Z);
}
void Lab2Rgb(double *R, double *G, double *B, double L, double a, double b)
{
double X, Y, Z;
Lab2Xyz(&X, &Y, &Z, L, a, b);
Xyz2Rgb(R, G, B, X, Y, Z);
}
void Rgb2Luv(double *L, double *u, double *v, double R, double G, double B)
{
double X, Y, Z;
Rgb2Xyz(&X, &Y, &Z, R, G, B);
Xyz2Luv(L, u, v, X, Y, Z);
}
void Luv2Rgb(double *R, double *G, double *B, double L, double u, double v)
{
double X, Y, Z;
Luv2Xyz(&X, &Y, &Z, L, u, v);
Xyz2Rgb(R, G, B, X, Y, Z);
}
void Rgb2Lch(double *L, double *C, double *H, double R, double G, double B)
{
double X, Y, Z;
Rgb2Xyz(&X, &Y, &Z, R, G, B);
Xyz2Lch(L, C, H, X, Y, Z);
}
void Lch2Rgb(double *R, double *G, double *B, double L, double C, double H)
{
double X, Y, Z;
Lch2Xyz(&X, &Y, &Z, L, C, H);
Xyz2Rgb(R, G, B, X, Y, Z);
}
void Rgb2Cat02lms(double *L, double *M, double *S, double R, double G, double B)
{
double X, Y, Z;
Rgb2Xyz(&X, &Y, &Z, R, G, B);
Xyz2Cat02lms(L, M, S, X, Y, Z);
}
void Cat02lms2Rgb(double *R, double *G, double *B, double L, double M, double S)
{
double X, Y, Z;
Cat02lms2Xyz(&X, &Y, &Z, L, M, S);
Xyz2Rgb(R, G, B, X, Y, Z);
}

View File

@ -683,7 +683,7 @@ WaveView::draw_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peak
color_to_hsv (_fill_color, h, s, v);
/* change v towards white */
v *= 1.0 - gradient_depth();
Color center = hsv_to_color (h, s, v, a);
Color center = hsva_to_color (h, s, v, a);
color_to_rgba (center, r, g, b, a);
gradient->add_color_stop_rgba (stops[0], r, g, b, a);

View File

@ -33,6 +33,7 @@ canvas_sources = [
'canvas.cc',
'circle.cc',
'colors.cc',
'colorspace.cc',
'container.cc',
'curve.cc',
'debug.cc',