diff --git a/src/media/MediaDisplayComponent.cpp b/src/media/MediaDisplayComponent.cpp index 7d9c9023..2a1765b0 100644 --- a/src/media/MediaDisplayComponent.cpp +++ b/src/media/MediaDisplayComponent.cpp @@ -6,6 +6,27 @@ #include +void OptionalBannerComponent::paint(Graphics& g) +{ + const float cx = static_cast(getWidth()) / 2.0f; + const float cy = static_cast(getHeight()) / 2.0f; + + g.setColour(Colour::fromRGB(90, 105, 105)); + g.fillAll(); + + g.setColour(Colours::white); + g.setFont(12.0f); + + Graphics::ScopedSaveState state(g); + g.addTransform(AffineTransform::rotation(-MathConstants::halfPi, cx, cy)); + + Rectangle textBounds( + 0, 0, static_cast(getHeight()), static_cast(getWidth())); + textBounds.setCentre(cx, cy); + + g.drawText("OPTIONAL", textBounds, Justification::centred, false); +} + namespace { struct TickScheme @@ -164,6 +185,8 @@ MediaDisplayComponent::MediaDisplayComponent(String name, bool req, bool fromDAW horizontalScrollBar.setAutoHide(false); horizontalScrollBar.addListener(this); + addAndMakeVisible(optionalBanner); + timeAxisStrip = std::make_unique(this); mediaAreaContainer.addAndMakeVisible(overheadPanel); @@ -335,6 +358,16 @@ void MediaDisplayComponent::resized() { // Place header beside media mainFlexBox.flexDirection = FlexBox::Direction::row; + + if (! isRequired() && isInputTrack() && ! isThumbnailTrack()) + { + mainFlexBox.items.add(FlexItem(optionalBanner).withWidth(24)); + } + else + { + optionalBanner.setBounds(0, 0, 0, 0); + } + // Fixed area for track label and buttons mainFlexBox.items.add(FlexItem(headerComponent).withFlex(1).withMaxWidth(40).withMargin(4)); } diff --git a/src/media/MediaDisplayComponent.h b/src/media/MediaDisplayComponent.h index 39b91e58..7769861b 100644 --- a/src/media/MediaDisplayComponent.h +++ b/src/media/MediaDisplayComponent.h @@ -27,6 +27,23 @@ enum class DisplayMode Thumbnail // Reduced functionality }; +class OptionalBannerComponent : public Component +{ +public: + void paint(Graphics& g) override; +}; + +class TimeAxisStrip : public Component +{ +public: + explicit TimeAxisStrip(MediaDisplayComponent* ownerIn) : owner(ownerIn) {} + + void paint(Graphics& g) override; + +private: + MediaDisplayComponent* owner = nullptr; +}; + class ColorablePanel : public Component { public: @@ -48,17 +65,6 @@ class ColorablePanel : public Component Colour backgroundColor; }; -class TimeAxisStrip : public Component -{ -public: - explicit TimeAxisStrip(MediaDisplayComponent* ownerIn) : owner(ownerIn) {} - - void paint(Graphics& g) override; - -private: - MediaDisplayComponent* owner = nullptr; -}; - class MediaDisplayComponent : public Component, public ChangeListener, public ChangeBroadcaster, @@ -272,6 +278,9 @@ class MediaDisplayComponent : public Component, MultiButton::Mode copyFileButtonActiveInfo; MultiButton::Mode copyFileButtonInactiveInfo; + // Banner shown on left edge of optional input tracks + OptionalBannerComponent optionalBanner; + // Panel displaying overhead labels ColorablePanel overheadPanel { overheadPanelColor };