diff --git a/Source/LookAndFeel.cpp b/Source/LookAndFeel.cpp index aa064ba..0697f89 100644 --- a/Source/LookAndFeel.cpp +++ b/Source/LookAndFeel.cpp @@ -27,9 +27,12 @@ OscirenderLookAndFeel::OscirenderLookAndFeel() { setColour(effectComponentBackgroundColourId, juce::Colours::transparentBlack); setColour(effectComponentHandleColourId, Colours::veryDark); setColour(juce::CodeEditorComponent::backgroundColourId, Colours::darker); - setColour(juce::CodeEditorComponent::defaultTextColourId, juce::Colours::white); + setColour(juce::CodeEditorComponent::defaultTextColourId, Dracula::foreground); setColour(juce::CodeEditorComponent::lineNumberBackgroundId, Colours::veryDark); - setColour(juce::CodeEditorComponent::lineNumberTextId, juce::Colours::white); + setColour(juce::CodeEditorComponent::lineNumberTextId, Dracula::foreground); + setColour(juce::CodeEditorComponent::highlightColourId, Colours::grey); + setColour(juce::CaretComponent::caretColourId, Dracula::foreground); + setColour(juce::TextEditor::highlightColourId, Colours::grey); getCurrentColourScheme().setUIColour(ColourScheme::widgetBackground, Colours::veryDark); } @@ -163,4 +166,28 @@ void OscirenderLookAndFeel::drawMenuBarBackground(juce::Graphics& g, int width, g.setColour(menuBar.findColour(juce::TextButton::buttonColourId)); g.fillRect(r); -} \ No newline at end of file +} + +juce::CodeEditorComponent::ColourScheme OscirenderLookAndFeel::getDefaultColourScheme() { + juce::CodeEditorComponent::ColourScheme cs; + + static const juce::CodeEditorComponent::ColourScheme::TokenType types[] = { + {"Error", juce::Colour(Dracula::red)}, + {"Comment", juce::Colour(Dracula::comment)}, + {"Keyword", juce::Colour(Dracula::pink)}, + {"Operator", juce::Colour(Dracula::foreground)}, + {"Identifier", juce::Colour(Dracula::foreground)}, + {"Integer", juce::Colour(Dracula::purple)}, + {"Float", juce::Colour(Dracula::purple)}, + {"String", juce::Colour(Dracula::yellow)}, + {"Bracket", juce::Colour(Dracula::foreground)}, + {"Punctuation", juce::Colour(Dracula::pink)}, + {"Preprocessor Text", juce::Colour(Dracula::comment)} + }; + + for (auto& t : types) { + cs.set(t.name, juce::Colour(t.colour)); + } + + return cs; +} diff --git a/Source/LookAndFeel.h b/Source/LookAndFeel.h index 0da1ffd..4965ae1 100644 --- a/Source/LookAndFeel.h +++ b/Source/LookAndFeel.h @@ -15,7 +15,22 @@ namespace Colours { const juce::Colour darker{0xff212121}; const juce::Colour veryDark{0xff111111}; const juce::Colour grey{0xff555555}; - const juce::Colour accentColor{0xff00CC00}; + const juce::Colour accentColor{0xff00cc00}; +} + +namespace Dracula { + const juce::Colour background{0xff282a36}; + const juce::Colour currentLine{0xff44475a}; + const juce::Colour selection{0xff44475a}; + const juce::Colour foreground{0xfff8f8f2}; + const juce::Colour comment{0xff6272a4}; + const juce::Colour cyan{0xff8be9fd}; + const juce::Colour green{0xff50fa7b}; + const juce::Colour orange{0xffffb86c}; + const juce::Colour pink{0xffff79c6}; + const juce::Colour purple{0xffbd93f9}; + const juce::Colour red{0xffff5555}; + const juce::Colour yellow{0xfff1fa8c}; } class OscirenderLookAndFeel : public juce::LookAndFeel_V4 { @@ -43,5 +58,5 @@ public: bool shouldDrawButtonAsDown) override; void drawMenuBarBackground(juce::Graphics& g, int width, int height, bool, juce::MenuBarComponent& menuBar) override; - + juce::CodeEditorComponent::ColourScheme getDefaultColourScheme(); }; \ No newline at end of file diff --git a/Source/PluginEditor.cpp b/Source/PluginEditor.cpp index 7656c37..14fe7fb 100644 --- a/Source/PluginEditor.cpp +++ b/Source/PluginEditor.cpp @@ -32,6 +32,8 @@ OscirenderAudioProcessorEditor::OscirenderAudioProcessorEditor(OscirenderAudioPr path.addTriangle(0.0f, 0.5f, 1.0f, 1.0f, 1.0f, 0.0f); collapseButton.setShape(path, false, true, true); + colourScheme = lookAndFeel.getDefaultColourScheme(); + { juce::SpinLock::ScopedLockType lock(audioProcessor.parsersLock); initialiseCodeEditors(); @@ -171,6 +173,7 @@ void OscirenderAudioProcessorEditor::addCodeEditor(int index) { editor->setAccessible(false); // listen for changes to the code editor codeDocument->addListener(this); + editor->setColourScheme(colourScheme); } void OscirenderAudioProcessorEditor::removeCodeEditor(int index) { diff --git a/Source/PluginEditor.h b/Source/PluginEditor.h index baeade5..062e8e3 100644 --- a/Source/PluginEditor.h +++ b/Source/PluginEditor.h @@ -47,6 +47,7 @@ private: VolumeComponent volume{audioProcessor}; std::vector> codeDocuments; std::vector> codeEditors; + juce::CodeEditorComponent::ColourScheme colourScheme; juce::LuaTokeniser luaTokeniser; juce::XmlTokeniser xmlTokeniser; juce::ShapeButton collapseButton;