diff options
-rw-r--r-- | gtk2_ardour/ardour_button.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/ardour_knob.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/base_colors.h | 54 | ||||
-rw-r--r-- | gtk2_ardour/button_joiner.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/canvas_vars.h | 236 | ||||
-rw-r--r-- | gtk2_ardour/colors.h | 493 | ||||
-rw-r--r-- | gtk2_ardour/default_ui_config.in | 463 | ||||
-rw-r--r-- | gtk2_ardour/level_meter.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/meter_patterns.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/monitor_section.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/stereo_panner.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/styles.rc.in | 105 | ||||
-rw-r--r-- | gtk2_ardour/theme_manager.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view_item.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/ui_config.cc | 795 | ||||
-rw-r--r-- | gtk2_ardour/ui_config.h | 71 | ||||
-rw-r--r-- | gtk2_ardour/widget_list.rc | 6 | ||||
-rw-r--r-- | libs/canvas/canvas/colors.h | 54 | ||||
-rw-r--r-- | libs/canvas/canvas/colorspace.h | 54 | ||||
-rw-r--r-- | libs/canvas/colors.cc | 247 | ||||
-rw-r--r-- | libs/canvas/colorspace.cc | 940 | ||||
-rw-r--r-- | libs/canvas/wave_view.cc | 2 | ||||
-rw-r--r-- | libs/canvas/wscript | 1 |
24 files changed, 2584 insertions, 1002 deletions
diff --git a/gtk2_ardour/ardour_button.cc b/gtk2_ardour/ardour_button.cc index 447fc1ef0c..ddd8b9ca3e 100644 --- a/gtk2_ardour/ardour_button.cc +++ b/gtk2_ardour/ardour_button.cc @@ -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)); } /** diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc index c244411562..c0dc03fe2b 100644 --- a/gtk2_ardour/ardour_knob.cc +++ b/gtk2_ardour/ardour_knob.cc @@ -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 diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index dcd626d287..b6c2040792 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -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() */ diff --git a/gtk2_ardour/base_colors.h b/gtk2_ardour/base_colors.h new file mode 100644 index 0000000000..570a7825c8 --- /dev/null +++ b/gtk2_ardour/base_colors.h @@ -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 */ + + + + diff --git a/gtk2_ardour/button_joiner.cc b/gtk2_ardour/button_joiner.cc index 0c60cba1db..da9ae45847 100644 --- a/gtk2_ardour/button_joiner.cc +++ b/gtk2_ardour/button_joiner.cc @@ -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); diff --git a/gtk2_ardour/canvas_vars.h b/gtk2_ardour/canvas_vars.h index 206c509f06..995db6ae13 100644 --- a/gtk2_ardour/canvas_vars.h +++ b/gtk2_ardour/canvas_vars.h @@ -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") diff --git a/gtk2_ardour/colors.h b/gtk2_ardour/colors.h new file mode 100644 index 0000000000..afa0f1150b --- /dev/null +++ b/gtk2_ardour/colors.h @@ -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 */ diff --git a/gtk2_ardour/default_ui_config.in b/gtk2_ardour/default_ui_config.in index 81bd773e9f..74fc202293 100644 --- a/gtk2_ardour/default_ui_config.in +++ b/gtk2_ardour/default_ui_config.in @@ -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@"/> diff --git a/gtk2_ardour/level_meter.cc b/gtk2_ardour/level_meter.cc index 1257c7a6b3..e7e16c8fc6 100644 --- a/gtk2_ardour/level_meter.cc +++ b/gtk2_ardour/level_meter.cc @@ -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: diff --git a/gtk2_ardour/meter_patterns.cc b/gtk2_ardour/meter_patterns.cc index 16036ad83e..0158ff794c 100644 --- a/gtk2_ardour/meter_patterns.cc +++ b/gtk2_ardour/meter_patterns.cc @@ -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) { diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index 483933ec5d..1a18c4bc47 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -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) { diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc index 4492c73cfc..a52e696e90 100644 --- a/gtk2_ardour/stereo_panner.cc +++ b/gtk2_ardour/stereo_panner.cc @@ -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(); diff --git a/gtk2_ardour/styles.rc.in b/gtk2_ardour/styles.rc.in index 7c7f5f9b05..329fdc92ea 100644 --- a/gtk2_ardour/styles.rc.in +++ b/gtk2_ardour/styles.rc.in @@ -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 diff --git a/gtk2_ardour/theme_manager.cc b/gtk2_ardour/theme_manager.cc index 1a5aa0e7ce..9fdf7b24d2 100644 --- a/gtk2_ardour/theme_manager.cc +++ b/gtk2_ardour/theme_manager.cc @@ -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; diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc index 5948cebddd..0d5f649a99 100644 --- a/gtk2_ardour/time_axis_view_item.cc +++ b/gtk2_ardour/time_axis_view_item.cc @@ -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); diff --git a/gtk2_ardour/ui_config.cc b/gtk2_ardour/ui_config.cc index 86e08d7fa6..28d7fcc392 100644 --- a/gtk2_ardour/ui_config.cc +++ b/gtk2_ardour/ui_config.cc @@ -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 @@ -245,18 +798,51 @@ UIConfiguration::set_state (const XMLNode& root, int /*version*/) } 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; +} + +bool +UIConfiguration::dirty () const +{ + return _dirty; } -uint32_t -UIConfiguration::color_by_name (const std::string& name) +ArdourCanvas::Color +UIConfiguration::base_color_by_name (const std::string& name) const { - map<std::string,ColorVariable<uint32_t>* >::iterator i = canvas_colors.find (name); + map<std::string,ColorVariable<uint32_t>* >::const_iterator i = configurable_colors.find (name); - if (i != canvas_colors.end()) { + 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; } diff --git a/gtk2_ardour/ui_config.h b/gtk2_ardour/ui_config.h index 0000eb63f5..0754425c27 100644 --- a/gtk2_ardour/ui_config.h +++ b/gtk2_ardour/ui_config.h @@ -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__ */ diff --git a/gtk2_ardour/widget_list.rc b/gtk2_ardour/widget_list.rc index 689bd7096a..2739eab9bf 100644 --- a/gtk2_ardour/widget_list.rc +++ b/gtk2_ardour/widget_list.rc @@ -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" diff --git a/libs/canvas/canvas/colors.h b/libs/canvas/canvas/colors.h index 17e93cf128..5e13c5ca96 100644 --- a/libs/canvas/canvas/colors.h +++ b/libs/canvas/canvas/colors.h @@ -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; - - 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); } + HSV opposite() const; + HSV complement() const { return opposite(); } - 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__ */ diff --git a/libs/canvas/canvas/colorspace.h b/libs/canvas/canvas/colorspace.h new file mode 100644 index 0000000000..445b7e2c63 --- /dev/null +++ b/libs/canvas/canvas/colorspace.h @@ -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_ */ diff --git a/libs/canvas/colors.cc b/libs/canvas/colors.cc index a3a7565fc8..7be91c1c6f 100644 --- a/libs/canvas/colors.cc +++ b/libs/canvas/colors.cc @@ -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(); @@ -292,6 +336,18 @@ HSV::shade (double factor) const } 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 { HSV hsv; @@ -305,77 +361,104 @@ HSV::mix (const HSV& other, double amount) const return hsv; } -void -HSV::print (std::ostream& o) const +HSV +HSV::delta (const HSV& other) const { - if (!is_gray()) { - o << "hsv " << h << '|' << s << '|' << v; - } else { - o << "hsv gray"; - } + 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; } -HSVA::HSVA () - : a (1.0) +double +HSV::distance (const HSV& other) const { -} + /* Use CIE94 definition for now */ -HSVA::HSVA (double hh, double ss, double vv, double aa) - : HSV (hh, ss, vv) - , a (aa) -{ + 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)); } -HSVA::HSVA (Color c) +HSV +HSV::opposite () const { - color_to_hsv (c, h, s, v); - a = c & 0xff; + HSV hsv (*this); + hsv.h = fmod (h + 180.0, 360.0); + return hsv; } -void -HSVA::clamp () +HSV +HSV::bw_text () const { - HSV::clamp (); - a = min (1.0, a); + return HSV (contrasting_text_color (color())); } -HSVA -HSVA::operator+ (const HSVA& operand) const +HSV +HSV::text () 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; + return opposite (); } -HSVA -HSVA::operator- (const HSVA& operand) const +HSV +HSV::selected () const { - HSVA hsv; - hsv.h = h - operand.h; - hsv.s = s - operand.s; - hsv.a = a - operand.a; - return hsv; + /* XXX hack */ + return HSV (Color (0xff0000)); } + void -HSVA::print (std::ostream& o) const +HSV::print (std::ostream& o) const { if (!is_gray()) { - o << "hsva " << h << '|' << s << '|' << v << '|' << a; + o << '(' << s << ',' << v << ',' << a << ')'; } else { - o << "hsva gray"; + o << "gray(" << v << ')'; } } -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; } diff --git a/libs/canvas/colorspace.cc b/libs/canvas/colorspace.cc new file mode 100644 index 0000000000..5a71b715be --- /dev/null +++ b/libs/canvas/colorspace.cc @@ -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); +} diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc index b5538a834a..553bcdf5d3 100644 --- a/libs/canvas/wave_view.cc +++ b/libs/canvas/wave_view.cc @@ -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); diff --git a/libs/canvas/wscript b/libs/canvas/wscript index 684871e54f..468c5ea28e 100644 --- a/libs/canvas/wscript +++ b/libs/canvas/wscript @@ -33,6 +33,7 @@ canvas_sources = [ 'canvas.cc', 'circle.cc', 'colors.cc', + 'colorspace.cc', 'container.cc', 'curve.cc', 'debug.cc', |