| @@ -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<int> 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<int> 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); | |||
| } | |||
| @@ -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; | |||
| @@ -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<int> 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)); | |||
| @@ -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); | |||
| @@ -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; | |||
| }; | |||