diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index a6da80b56f..44aa81bdd9 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -173,6 +173,11 @@ LookAndFeel_V2::LookAndFeel_V2() BubbleComponent::backgroundColourId, 0xeeeeeebb, BubbleComponent::outlineColourId, 0x77000000, + TableHeaderComponent::textColourId, 0xff000000, + TableHeaderComponent::backgroundColourId, 0xffe8ebf9, + TableHeaderComponent::outlineColourId, 0x33000000, + TableHeaderComponent::highlightColourId, 0x8899aadd, + DirectoryContentsDisplayComponent::highlightColourId, textHighlightColour, DirectoryContentsDisplayComponent::textColourId, 0xff000000, @@ -2323,26 +2328,33 @@ void LookAndFeel_V2::drawTableHeaderBackground (Graphics& g, TableHeaderComponen Rectangle area (header.getLocalBounds()); area.removeFromTop (area.getHeight() / 2); - g.setGradientFill (ColourGradient (Colour (0xffe8ebf9), 0.0f, (float) area.getY(), - Colour (0xfff6f8f9), 0.0f, (float) area.getBottom(), + auto backgroundColour = header.findColour (TableHeaderComponent::backgroundColourId); + + g.setGradientFill (ColourGradient (backgroundColour, + 0.0f, (float) area.getY(), + backgroundColour.withMultipliedSaturation (.5f), + 0.0f, (float) area.getBottom(), false)); g.fillRect (area); - g.setColour (Colour (0x33000000)); + g.setColour (header.findColour (TableHeaderComponent::outlineColourId)); g.fillRect (area.removeFromBottom (1)); for (int i = header.getNumColumns (true); --i >= 0;) g.fillRect (header.getColumnPosition (i).removeFromRight (1)); } -void LookAndFeel_V2::drawTableHeaderColumn (Graphics& g, const String& columnName, int /*columnId*/, +void LookAndFeel_V2::drawTableHeaderColumn (Graphics& g, TableHeaderComponent& header, + const String& columnName, int /*columnId*/, int width, int height, bool isMouseOver, bool isMouseDown, int columnFlags) { + auto highlightColour = header.findColour (TableHeaderComponent::highlightColourId); + if (isMouseDown) - g.fillAll (Colour (0x8899aadd)); + g.fillAll (highlightColour); else if (isMouseOver) - g.fillAll (Colour (0x5599aadd)); + g.fillAll (highlightColour.withMultipliedAlpha (0.625f)); Rectangle area (width, height); area.reduce (4, 0); @@ -2358,7 +2370,7 @@ void LookAndFeel_V2::drawTableHeaderColumn (Graphics& g, const String& columnNam g.fillPath (sortArrow, sortArrow.getTransformToScaleToFit (area.removeFromRight (height / 2).reduced (2).toFloat(), true)); } - g.setColour (Colours::black); + g.setColour (header.findColour (TableHeaderComponent::textColourId)); g.setFont (Font (height * 0.5f, Font::bold)); g.drawFittedText (columnName, area, Justification::centredLeft, 1); } diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h index 31fd22bc9d..227490c7bc 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h @@ -291,9 +291,9 @@ public: //============================================================================== void drawTableHeaderBackground (Graphics&, TableHeaderComponent&) override; - void drawTableHeaderColumn (Graphics&, const String& columnName, int columnId, - int width, int height, bool isMouseOver, bool isMouseDown, - int columnFlags) override; + void drawTableHeaderColumn (Graphics&, TableHeaderComponent&, const String& columnName, + int columnId, int width, int height, bool isMouseOver, + bool isMouseDown, int columnFlags) override; //============================================================================== void paintToolbarBackground (Graphics&, int width, int height, Toolbar&) override; diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp index 5108791ffc..b0090d8e31 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp @@ -39,6 +39,8 @@ LookAndFeel_V3::LookAndFeel_V3() setColour (Slider::thumbColourId, Colour (0xffddddff)); setColour (BubbleComponent::backgroundColourId, Colour (0xeeeeeedd)); setColour (ScrollBar::thumbColourId, Colour::greyLevel (0.8f).contrasting().withAlpha (0.13f)); + setColour (TableHeaderComponent::backgroundColourId, Colours::white.withAlpha (0.6f)); + setColour (TableHeaderComponent::outlineColourId, Colours::black.withAlpha (0.5f)); } LookAndFeel_V3::~LookAndFeel_V3() {} @@ -153,14 +155,15 @@ void LookAndFeel_V3::drawButtonBackground (Graphics& g, Button& button, const Co void LookAndFeel_V3::drawTableHeaderBackground (Graphics& g, TableHeaderComponent& header) { Rectangle r (header.getLocalBounds()); + auto outlineColour = header.findColour (TableHeaderComponent::outlineColourId); - g.setColour (Colours::black.withAlpha (0.5f)); + g.setColour (outlineColour); g.fillRect (r.removeFromBottom (1)); - g.setColour (Colours::white.withAlpha (0.6f)); + g.setColour (header.findColour (TableHeaderComponent::backgroundColourId)); g.fillRect (r); - g.setColour (Colours::black.withAlpha (0.5f)); + g.setColour (outlineColour); for (int i = header.getNumColumns (true); --i >= 0;) g.fillRect (header.getColumnPosition (i).removeFromRight (1)); diff --git a/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp b/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp index 22375b45b3..444e7d50c6 100644 --- a/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp +++ b/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp @@ -537,7 +537,7 @@ void TableHeaderComponent::paint (Graphics& g) g.setOrigin (x, 0); g.reduceClipRegion (0, 0, ci->width, getHeight()); - lf.drawTableHeaderColumn (g, ci->name, ci->id, ci->width, getHeight(), + lf.drawTableHeaderColumn (g, *this, ci->name, ci->id, ci->width, getHeight(), ci->id == columnIdUnderMouse, ci->id == columnIdUnderMouse && isMouseButtonDown(), ci->propertyFlags); diff --git a/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h b/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h index 2b0a2fbc7e..4efedbdf82 100644 --- a/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h +++ b/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h @@ -366,6 +366,24 @@ public: */ virtual void reactToMenuItem (int menuReturnId, int columnIdClicked); + //============================================================================== + /** A set of colour IDs to use to change the colour of various aspects of the TableHeaderComponent. + + @see Component::setColour, Component::findColour, LookAndFeel::setColour, LookAndFeel::findColour + */ + enum ColourIds + { + textColourId = 0x1003800, /**< The colour for the text in the header. */ + backgroundColourId = 0x1003810, /**< The colour of the table header background. + It's up to the LookAndFeel how this is used. */ + outlineColourId = 0x1003820, /**< The colour of the table header's outline. */ + highlightColourId = 0x1003830, /**< The colour of the table header background when + the mouse is over or down above the the table + header. It's up to the LookAndFeel to use a + variant of this colour to destiuish between + the down and hover state. */ + }; + //============================================================================== /** This abstract base class is implemented by LookAndFeel classes. */ struct JUCE_API LookAndFeelMethods @@ -374,7 +392,8 @@ public: virtual void drawTableHeaderBackground (Graphics&, TableHeaderComponent&) = 0; - virtual void drawTableHeaderColumn (Graphics&, const String& columnName, int columnId, + virtual void drawTableHeaderColumn (Graphics&, TableHeaderComponent&, + const String& columnName, int columnId, int width, int height, bool isMouseOver, bool isMouseDown, int columnFlags) = 0; };