diff --git a/examples/audio plugin host/Source/FilterIOConfiguration.cpp b/examples/audio plugin host/Source/FilterIOConfiguration.cpp index 77773d70a0..eb77a538ed 100644 --- a/examples/audio plugin host/Source/FilterIOConfiguration.cpp +++ b/examples/audio plugin host/Source/FilterIOConfiguration.cpp @@ -23,15 +23,18 @@ ============================================================================== */ + #include "../JuceLibraryCode/JuceHeader.h" #include "GraphEditorPanel.h" #include "InternalFilters.h" #include "MainHostWindow.h" - #include "FilterIOConfiguration.h" + //============================================================================== -class NumberedBoxes : public TableListBox, private TableListBoxModel, private Button::Listener +class NumberedBoxes : public TableListBox, + private TableListBoxModel, + private Button::Listener { public: struct Listener @@ -56,21 +59,19 @@ public: canAddColumn (canCurrentlyAddColumn), canRemoveColumn (canCurrentlyRemoveColumn) { - TableHeaderComponent& tableHeader = getHeader(); + auto& tableHeader = getHeader(); for (int i = 0; i < 16; ++i) tableHeader.addColumn (String (i + 1), i + 1, 40); setHeaderHeight (0); setRowHeight (40); - - if (ScrollBar* scrollbar = getHorizontalScrollBar()) - scrollbar->setAutoHide (false); + getHorizontalScrollBar().setAutoHide (false); } void setSelected (int columnId) { - if (TextButton* button = dynamic_cast (getCellComponent (columnId, 0))) + if (auto* button = dynamic_cast (getCellComponent (columnId, 0))) button->setToggleState (true, NotificationType::dontSendNotification); } @@ -80,7 +81,7 @@ public: { canAddColumn = canCurrentlyAdd; - if (TextButton* button = dynamic_cast (getCellComponent (plusButtonColumnId, 0))) + if (auto* button = dynamic_cast (getCellComponent (plusButtonColumnId, 0))) button->setEnabled (true); } } @@ -91,7 +92,7 @@ public: { canRemoveColumn = canCurrentlyRemove; - if (TextButton* button = dynamic_cast (getCellComponent (minusButtonColumnId, 0))) + if (auto* button = dynamic_cast (getCellComponent (minusButtonColumnId, 0))) button->setEnabled (true); } } @@ -105,9 +106,10 @@ private: Component* refreshComponentForCell (int, int columnId, bool, Component* existingComponentToUpdate) override { - TextButton* textButton = dynamic_cast (existingComponentToUpdate); + auto* textButton = dynamic_cast (existingComponentToUpdate); + if (textButton == nullptr) - textButton = new TextButton (""); + textButton = new TextButton(); textButton->setButtonText (getButtonName (columnId)); textButton->setConnectedEdges (Button::ConnectedOnLeft | Button::ConnectedOnRight | @@ -124,7 +126,7 @@ private: textButton->setRadioGroupId (1, NotificationType::dontSendNotification); textButton->setClickingTogglesState (true); - Colour busColour = Colours::green.withRotatedHue (static_cast (columnId) / 5.0f); + auto busColour = Colours::green.withRotatedHue (static_cast (columnId) / 5.0f); textButton->setColour (TextButton::buttonColourId, busColour); textButton->setColour (TextButton::buttonOnColourId, busColour.withMultipliedBrightness (2.0f)); } @@ -145,17 +147,18 @@ private: void buttonClicked (Button* btn) override { - const String& text = btn->getButtonText(); + auto text = btn->getButtonText(); - if (text == "+") listener.addColumn(); - else if (text == "-") listener.removeColumn(); + if (text == "+") listener.addColumn(); + if (text == "-") listener.removeColumn(); } void buttonStateChanged (Button* btn) override { - const String& text = btn->getButtonText(); + auto text = btn->getButtonText(); - if (text == "+" || text == "-") return; + if (text == "+" || text == "-") + return; if (btn->getToggleState()) listener.columnSelected (text.getIntValue()); @@ -167,8 +170,10 @@ private: }; //============================================================================== -class FilterIOConfigurationWindow::InputOutputConfig - : public Component, private ComboBox::Listener, private Button::Listener, private NumberedBoxes::Listener +class FilterIOConfigurationWindow::InputOutputConfig : public Component, + private ComboBox::Listener, + private Button::Listener, + private NumberedBoxes::Listener { public: InputOutputConfig (FilterIOConfigurationWindow& parent, bool direction) @@ -208,7 +213,7 @@ public: void resized() override { - Rectangle r = getLocalBounds().reduced (10); + auto r = getLocalBounds().reduced (10); ioTitle.setBounds (r.removeFromTop (14)); r.reduce (10, 0); @@ -217,7 +222,7 @@ public: ioBuses.setBounds (r.removeFromTop (60)); { - Rectangle label = r.removeFromTop (24); + auto label = r.removeFromTop (24); nameLabel.setBounds (label.removeFromLeft (100)); enabledToggle.setBounds (label.removeFromRight (80)); @@ -225,7 +230,7 @@ public: } { - Rectangle label = r.removeFromTop (24); + auto label = r.removeFromTop (24); layoutLabel.setBounds (label.removeFromLeft (100)); layouts.setBounds (label); @@ -235,12 +240,13 @@ public: private: void updateBusButtons() { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* filter = owner.getAudioProcessor()) { - TableHeaderComponent& header = ioBuses.getHeader(); + auto& header = ioBuses.getHeader(); header.removeAllColumns(); const int n = filter->getBusCount (isInput); + for (int i = 0; i < n; ++i) header.addColumn ("", i + 1, 40); @@ -256,14 +262,13 @@ private: void updateBusLayout() { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* filter = owner.getAudioProcessor()) { - if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + if (auto* bus = filter->getBus (isInput, currentBus)) { name.setText (bus->getName(), NotificationType::dontSendNotification); int i; - for (i = 1; i < AudioChannelSet::maxChannelsOfNamedLayout; ++i) if ((layouts.indexOfItemId(i) == -1) != bus->supportedLayoutWithChannels (i).isDisabled()) break; @@ -275,7 +280,8 @@ private: for (i = 1; i < AudioChannelSet::maxChannelsOfNamedLayout; ++i) { - AudioChannelSet set = bus->supportedLayoutWithChannels (i); + auto set = bus->supportedLayoutWithChannels (i); + if (! set.isDisabled()) layouts.addItem (set.getDescription(), i); } @@ -298,18 +304,18 @@ private: { if (combo == &layouts) { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* processor = owner.getAudioProcessor()) { - if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + if (auto* bus = processor->getBus (isInput, currentBus)) { - const int selectedNumChannels = layouts.getSelectedId(); + auto selectedNumChannels = layouts.getSelectedId(); if (selectedNumChannels != bus->getLastEnabledLayout().size()) { if (isPositiveAndBelow (selectedNumChannels, (int) AudioChannelSet::maxChannelsOfNamedLayout) - && bus->setCurrentLayoutWithoutEnabling (bus->supportedLayoutWithChannels (selectedNumChannels))) + && bus->setCurrentLayoutWithoutEnabling (bus->supportedLayoutWithChannels (selectedNumChannels))) { - if (InputOutputConfig* config = owner.getConfig (! isInput)) + if (auto* config = owner.getConfig (! isInput)) config->updateBusLayout(); owner.update(); @@ -326,9 +332,9 @@ private: { if (btn == &enabledToggle && enabledToggle.isEnabled()) { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* processor = owner.getAudioProcessor()) { - if (AudioProcessor::Bus* bus = filter->getBus (isInput, currentBus)) + if (auto* bus = processor->getBus (isInput, currentBus)) { if (bus->isEnabled() != enabledToggle.getToggleState()) { @@ -362,16 +368,16 @@ private: //============================================================================== void addColumn() override { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* processor = owner.getAudioProcessor()) { - if (filter->canAddBus (isInput)) + if (processor->canAddBus (isInput)) { - if (filter->addBus (isInput)) + if (processor->addBus (isInput)) { updateBusButtons(); updateBusLayout(); - if (InputOutputConfig* config = owner.getConfig (! isInput)) + if (auto* config = owner.getConfig (! isInput)) { config->updateBusButtons(); config->updateBusLayout(); @@ -385,18 +391,18 @@ private: void removeColumn() override { - if (AudioProcessor* filter = owner.getAudioProcessor()) + if (auto* processor = owner.getAudioProcessor()) { - if (filter->getBusCount (isInput) > 1 && filter->canRemoveBus (isInput)) + if (processor->getBusCount (isInput) > 1 && processor->canRemoveBus (isInput)) { - if (filter->removeBus (isInput)) + if (processor->removeBus (isInput)) { - currentBus = jmin (filter->getBusCount (isInput) - 1, currentBus); + currentBus = jmin (processor->getBusCount (isInput) - 1, currentBus); updateBusButtons(); updateBusLayout(); - if (InputOutputConfig* config = owner.getConfig (! isInput)) + if (auto* config = owner.getConfig (! isInput)) { config->updateBusButtons(); config->updateBusLayout(); @@ -411,6 +417,7 @@ private: void columnSelected (int columnId) override { const int newBus = columnId - 1; + if (currentBus != newBus) { currentBus = newBus; @@ -460,9 +467,9 @@ FilterIOConfigurationWindow::FilterIOConfigurationWindow (AudioProcessor* const FilterIOConfigurationWindow::~FilterIOConfigurationWindow() { - if (AudioProcessorGraph* graph = getGraph()) + if (auto* graph = getGraph()) { - if (AudioProcessor* p = getAudioProcessor()) + if (auto* p = getAudioProcessor()) { ScopedLock renderLock (graph->getCallbackLock()); @@ -485,7 +492,7 @@ void FilterIOConfigurationWindow::paint (Graphics& g) void FilterIOConfigurationWindow::resized() { - Rectangle r = getLocalBounds().reduced (10); + auto r = getLocalBounds().reduced (10); title.setBounds (r.removeFromTop (14)); r.reduce (10, 0); @@ -499,25 +506,25 @@ void FilterIOConfigurationWindow::resized() void FilterIOConfigurationWindow::update() { - const int32 nodeId = getNodeId(); + auto nodeId = getNodeId(); - if (AudioProcessorGraph* graph = getGraph()) + if (auto* graph = getGraph()) if (nodeId != -1) graph->disconnectNode (static_cast (nodeId)); - if (GraphDocumentComponent* graphEditor = getGraphEditor()) - if (GraphEditorPanel* panel = graphEditor->graphPanel) + if (auto* graphEditor = getGraphEditor()) + if (auto* panel = graphEditor->graphPanel) panel->updateComponents(); } int32 FilterIOConfigurationWindow::getNodeId() const { - if (AudioProcessorGraph* graph = getGraph()) + if (auto* graph = getGraph()) { const int n = graph->getNumNodes(); for (int i = 0; i < n; ++i) - if (AudioProcessorGraph::Node* node = graph->getNode (i)) + if (auto* node = graph->getNode (i)) if (node->getProcessor() == getAudioProcessor()) return static_cast (node->nodeId); } @@ -530,7 +537,7 @@ MainHostWindow* FilterIOConfigurationWindow::getMainWindow() const Component* comp; for (int idx = 0; (comp = Desktop::getInstance().getComponent(idx)) != nullptr; ++idx) - if (MainHostWindow* mainWindow = dynamic_cast (comp)) + if (auto* mainWindow = dynamic_cast (comp)) return mainWindow; return nullptr; @@ -538,20 +545,18 @@ MainHostWindow* FilterIOConfigurationWindow::getMainWindow() const GraphDocumentComponent* FilterIOConfigurationWindow::getGraphEditor() const { - if (MainHostWindow* mainWindow = getMainWindow()) - { - if (GraphDocumentComponent* graphEditor = mainWindow->getGraphEditor()) + if (auto* mainWindow = getMainWindow()) + if (auto* graphEditor = mainWindow->getGraphEditor()) return graphEditor; - } return nullptr; } AudioProcessorGraph* FilterIOConfigurationWindow::getGraph() const { - if (GraphDocumentComponent* graphEditor = getGraphEditor()) - if (FilterGraph* filterGraph = graphEditor->graph) - return &filterGraph->getGraph(); + if (auto* graphEditor = getGraphEditor()) + if (auto* graph = graphEditor->graph.get()) + return &graph->getGraph(); return nullptr; } diff --git a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp index 65fc283103..f1407a4a7c 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp @@ -61,7 +61,7 @@ void FileListComponent::deselectAllFiles() void FileListComponent::scrollToTop() { - getVerticalScrollBar()->setCurrentRangeStart (0); + getVerticalScrollBar().setCurrentRangeStart (0); } void FileListComponent::setSelectedFile (const File& f) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp index febfba3685..e6ba4e0d07 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp @@ -91,7 +91,7 @@ public: { jassert (parentContentsList != nullptr); - DirectoryContentsList* const l = new DirectoryContentsList (parentContentsList->getFilter(), thread); + auto l = new DirectoryContentsList (parentContentsList->getFilter(), thread); l->setDirectory (file, parentContentsList->isFindingDirectories(), @@ -299,7 +299,7 @@ void FileTreeComponent::deselectAllFiles() void FileTreeComponent::scrollToTop() { - getViewport()->getVerticalScrollBar()->setCurrentRangeStart (0); + getViewport()->getVerticalScrollBar().setCurrentRangeStart (0); } void FileTreeComponent::setDragAndDropDescription (const String& description) diff --git a/modules/juce_gui_basics/layout/juce_Viewport.cpp b/modules/juce_gui_basics/layout/juce_Viewport.cpp index a1f746aa12..d534530045 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.cpp +++ b/modules/juce_gui_basics/layout/juce_Viewport.cpp @@ -35,11 +35,11 @@ Viewport::Viewport (const String& name) : Component (name) scrollBarThickness = getLookAndFeel().getDefaultScrollbarWidth(); - addChildComponent (verticalScrollBar); - addChildComponent (horizontalScrollBar); + addChildComponent (verticalScrollBar = createScrollBarComponent (true)); + addChildComponent (horizontalScrollBar = createScrollBarComponent (false)); - verticalScrollBar.addListener (this); - horizontalScrollBar.addListener (this); + getVerticalScrollBar().addListener (this); + getHorizontalScrollBar().addListener (this); setInterceptsMouseClicks (false, true); setWantsKeyboardFocus (true); @@ -140,7 +140,7 @@ bool Viewport::autoScroll (const int mouseX, const int mouseY, const int activeB { int dx = 0, dy = 0; - if (horizontalScrollBar.isVisible() || canScrollHorizontally()) + if (getHorizontalScrollBar().isVisible() || canScrollHorizontally()) { if (mouseX < activeBorderThickness) dx = activeBorderThickness - mouseX; @@ -153,7 +153,7 @@ bool Viewport::autoScroll (const int mouseX, const int mouseY, const int activeB dx = jmin (dx, maximumSpeed, -contentComp->getX()); } - if (verticalScrollBar.isVisible() || canScrollVertically()) + if (getVerticalScrollBar().isVisible() || canScrollVertically()) { if (mouseY < activeBorderThickness) dy = activeBorderThickness - mouseY; @@ -223,7 +223,7 @@ struct Viewport::DragToScrollListener : private MouseListener, { if (numTouches == 1 && ! isViewportDragBlocked) { - Point totalOffset = e.getOffsetFromDragStart().toFloat(); + auto totalOffset = e.getOffsetFromDragStart().toFloat(); if (! isDragging && totalOffset.getDistanceFromOrigin() > 8.0f) { @@ -326,8 +326,8 @@ void Viewport::updateVisibleArea() for (int i = 3; --i >= 0;) { - hBarVisible = canShowHBar && ! horizontalScrollBar.autoHides(); - vBarVisible = canShowVBar && ! verticalScrollBar.autoHides(); + hBarVisible = canShowHBar && ! getHorizontalScrollBar().autoHides(); + vBarVisible = canShowVBar && ! getVerticalScrollBar().autoHides(); contentArea = getLocalBounds(); if (contentComp != nullptr && ! contentArea.contains (contentComp->getBounds())) @@ -371,27 +371,30 @@ void Viewport::updateVisibleArea() auto visibleOrigin = -contentBounds.getPosition(); - horizontalScrollBar.setBounds (0, contentArea.getHeight(), contentArea.getWidth(), scrollbarWidth); - horizontalScrollBar.setRangeLimits (0.0, contentBounds.getWidth()); - horizontalScrollBar.setCurrentRange (visibleOrigin.x, contentArea.getWidth()); - horizontalScrollBar.setSingleStepSize (singleStepX); - horizontalScrollBar.cancelPendingUpdate(); + auto& hbar = getHorizontalScrollBar(); + auto& vbar = getVerticalScrollBar(); + + hbar.setBounds (0, contentArea.getHeight(), contentArea.getWidth(), scrollbarWidth); + hbar.setRangeLimits (0.0, contentBounds.getWidth()); + hbar.setCurrentRange (visibleOrigin.x, contentArea.getWidth()); + hbar.setSingleStepSize (singleStepX); + hbar.cancelPendingUpdate(); if (canShowHBar && ! hBarVisible) visibleOrigin.setX (0); - verticalScrollBar.setBounds (contentArea.getWidth(), 0, scrollbarWidth, contentArea.getHeight()); - verticalScrollBar.setRangeLimits (0.0, contentBounds.getHeight()); - verticalScrollBar.setCurrentRange (visibleOrigin.y, contentArea.getHeight()); - verticalScrollBar.setSingleStepSize (singleStepY); - verticalScrollBar.cancelPendingUpdate(); + vbar.setBounds (contentArea.getWidth(), 0, scrollbarWidth, contentArea.getHeight()); + vbar.setRangeLimits (0.0, contentBounds.getHeight()); + vbar.setCurrentRange (visibleOrigin.y, contentArea.getHeight()); + vbar.setSingleStepSize (singleStepY); + vbar.cancelPendingUpdate(); if (canShowVBar && ! vBarVisible) visibleOrigin.setY (0); // Force the visibility *after* setting the ranges to avoid flicker caused by edge conditions in the numbers. - horizontalScrollBar.setVisible (hBarVisible); - verticalScrollBar.setVisible (vBarVisible); + hbar.setVisible (hBarVisible); + vbar.setVisible (vBarVisible); if (contentComp != nullptr) { @@ -414,8 +417,8 @@ void Viewport::updateVisibleArea() visibleAreaChanged (visibleArea); } - horizontalScrollBar.handleUpdateNowIfNeeded(); - verticalScrollBar.handleUpdateNowIfNeeded(); + hbar.handleUpdateNowIfNeeded(); + vbar.handleUpdateNowIfNeeded(); } //============================================================================== @@ -480,11 +483,11 @@ void Viewport::scrollBarMoved (ScrollBar* scrollBarThatHasMoved, double newRange { const int newRangeStartInt = roundToInt (newRangeStart); - if (scrollBarThatHasMoved == &horizontalScrollBar) + if (scrollBarThatHasMoved == horizontalScrollBar) { setViewPosition (newRangeStartInt, getViewPositionY()); } - else if (scrollBarThatHasMoved == &verticalScrollBar) + else if (scrollBarThatHasMoved == verticalScrollBar) { setViewPosition (getViewPositionX(), newRangeStartInt); } @@ -511,8 +514,8 @@ bool Viewport::useMouseWheelMoveIfNeeded (const MouseEvent& e, const MouseWheelD { if (! (e.mods.isAltDown() || e.mods.isCtrlDown() || e.mods.isCommandDown())) { - const bool canScrollVert = (allowScrollingWithoutScrollbarV || verticalScrollBar.isVisible()); - const bool canScrollHorz = (allowScrollingWithoutScrollbarH || horizontalScrollBar.isVisible()); + const bool canScrollVert = (allowScrollingWithoutScrollbarV || getVerticalScrollBar().isVisible()); + const bool canScrollHorz = (allowScrollingWithoutScrollbarH || getHorizontalScrollBar().isVisible()); if (canScrollHorz || canScrollVert) { @@ -566,13 +569,13 @@ bool Viewport::keyPressed (const KeyPress& key) { const bool isUpDownKey = isUpDownKeyPress (key); - if (verticalScrollBar.isVisible() && isUpDownKey) - return verticalScrollBar.keyPressed (key); + if (getVerticalScrollBar().isVisible() && isUpDownKey) + return getVerticalScrollBar().keyPressed (key); const bool isLeftRightKey = isLeftRightKeyPress (key); - if (horizontalScrollBar.isVisible() && (isUpDownKey || isLeftRightKey)) - return horizontalScrollBar.keyPressed (key); + if (getHorizontalScrollBar().isVisible() && (isUpDownKey || isLeftRightKey)) + return getHorizontalScrollBar().keyPressed (key); return false; } @@ -582,4 +585,9 @@ bool Viewport::respondsToKey (const KeyPress& key) return isUpDownKeyPress (key) || isLeftRightKeyPress (key); } +ScrollBar* Viewport::createScrollBarComponent (bool isVertical) +{ + return new ScrollBar (isVertical); +} + } // namespace juce diff --git a/modules/juce_gui_basics/layout/juce_Viewport.h b/modules/juce_gui_basics/layout/juce_Viewport.h index 32fe809b2e..c67a3f2b64 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.h +++ b/modules/juce_gui_basics/layout/juce_Viewport.h @@ -231,12 +231,12 @@ public: /** Returns a pointer to the scrollbar component being used. Handy if you need to customise the bar somehow. */ - ScrollBar* getVerticalScrollBar() noexcept { return &verticalScrollBar; } + ScrollBar& getVerticalScrollBar() noexcept { return *verticalScrollBar; } /** Returns a pointer to the scrollbar component being used. Handy if you need to customise the bar somehow. */ - ScrollBar* getHorizontalScrollBar() noexcept { return &horizontalScrollBar; } + ScrollBar& getHorizontalScrollBar() noexcept { return *horizontalScrollBar; } /** True if there's any off-screen content that could be scrolled vertically, or false if everything is currently visible. @@ -277,9 +277,16 @@ public: /** @internal */ static bool respondsToKey (const KeyPress&); +protected: + //============================================================================== + /** Creates the Scrollbar components that will be used for that Viewport. + Subclasses can override this if they need to customise the scroolbars in some way. + */ + virtual ScrollBar* createScrollBarComponent (bool isVertical); + private: //============================================================================== - ScrollBar verticalScrollBar { true }, horizontalScrollBar { false }; + ScopedPointer verticalScrollBar, horizontalScrollBar; Component contentHolder; WeakReference contentComp; Rectangle lastVisibleArea; diff --git a/modules/juce_gui_basics/widgets/juce_ListBox.cpp b/modules/juce_gui_basics/widgets/juce_ListBox.cpp index 7f39a4eca8..6bc5134840 100644 --- a/modules/juce_gui_basics/widgets/juce_ListBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ListBox.cpp @@ -791,16 +791,16 @@ void ListBox::mouseWheelMove (const MouseEvent& e, const MouseWheelDetails& whee { bool eventWasUsed = false; - if (wheel.deltaX != 0.0f && viewport->getHorizontalScrollBar()->isVisible()) + if (wheel.deltaX != 0.0f && getHorizontalScrollBar().isVisible()) { eventWasUsed = true; - viewport->getHorizontalScrollBar()->mouseWheelMove (e, wheel); + getHorizontalScrollBar().mouseWheelMove (e, wheel); } - if (wheel.deltaY != 0.0f && viewport->getVerticalScrollBar()->isVisible()) + if (wheel.deltaY != 0.0f && getVerticalScrollBar().isVisible()) { eventWasUsed = true; - viewport->getVerticalScrollBar()->mouseWheelMove (e, wheel); + getVerticalScrollBar().mouseWheelMove (e, wheel); } if (! eventWasUsed) @@ -834,8 +834,8 @@ void ListBox::setMinimumContentWidth (const int newMinimumWidth) int ListBox::getVisibleContentWidth() const noexcept { return viewport->getMaximumVisibleWidth(); } -ScrollBar* ListBox::getVerticalScrollBar() const noexcept { return viewport->getVerticalScrollBar(); } -ScrollBar* ListBox::getHorizontalScrollBar() const noexcept { return viewport->getHorizontalScrollBar(); } +ScrollBar& ListBox::getVerticalScrollBar() const noexcept { return viewport->getVerticalScrollBar(); } +ScrollBar& ListBox::getHorizontalScrollBar() const noexcept { return viewport->getHorizontalScrollBar(); } void ListBox::colourChanged() { diff --git a/modules/juce_gui_basics/widgets/juce_ListBox.h b/modules/juce_gui_basics/widgets/juce_ListBox.h index 191af7824f..3ff9865f36 100644 --- a/modules/juce_gui_basics/widgets/juce_ListBox.h +++ b/modules/juce_gui_basics/widgets/juce_ListBox.h @@ -379,11 +379,11 @@ public: /** Scrolls if necessary to make sure that a particular row is visible. */ void scrollToEnsureRowIsOnscreen (int row); - /** Returns a pointer to the vertical scrollbar. */ - ScrollBar* getVerticalScrollBar() const noexcept; + /** Returns a reference to the vertical scrollbar. */ + ScrollBar& getVerticalScrollBar() const noexcept; - /** Returns a pointer to the horizontal scrollbar. */ - ScrollBar* getHorizontalScrollBar() const noexcept; + /** Returns a reference to the horizontal scrollbar. */ + ScrollBar& getHorizontalScrollBar() const noexcept; /** Finds the row index that contains a given x,y position. The position is relative to the ListBox's top-left. diff --git a/modules/juce_gui_basics/widgets/juce_TableListBox.cpp b/modules/juce_gui_basics/widgets/juce_TableListBox.cpp index 784bdbeba1..f2d4b884bd 100644 --- a/modules/juce_gui_basics/widgets/juce_TableListBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_TableListBox.cpp @@ -357,20 +357,18 @@ Component* TableListBox::getCellComponent (int columnId, int rowNumber) const void TableListBox::scrollToEnsureColumnIsOnscreen (int columnId) { - if (auto* scrollbar = getHorizontalScrollBar()) - { - auto pos = header->getColumnPosition (header->getIndexOfColumnId (columnId, true)); + auto& scrollbar = getHorizontalScrollBar(); + auto pos = header->getColumnPosition (header->getIndexOfColumnId (columnId, true)); - auto x = scrollbar->getCurrentRangeStart(); - auto w = scrollbar->getCurrentRangeSize(); + auto x = scrollbar.getCurrentRangeStart(); + auto w = scrollbar.getCurrentRangeSize(); - if (pos.getX() < x) - x = pos.getX(); - else if (pos.getRight() > x + w) - x += jmax (0.0, pos.getRight() - (x + w)); + if (pos.getX() < x) + x = pos.getX(); + else if (pos.getRight() > x + w) + x += jmax (0.0, pos.getRight() - (x + w)); - scrollbar->setCurrentRangeStart (x); - } + scrollbar.setCurrentRangeStart (x); } int TableListBox::getNumRows() diff --git a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp index 2a212ef24f..e07685f871 100644 --- a/modules/juce_gui_basics/widgets/juce_TextEditor.cpp +++ b/modules/juce_gui_basics/widgets/juce_TextEditor.cpp @@ -1869,8 +1869,7 @@ bool TextEditor::pageDown (bool selecting) void TextEditor::scrollByLines (int deltaLines) { - if (auto* scrollbar = viewport->getVerticalScrollBar()) - scrollbar->moveScrollbarInSteps (deltaLines); + viewport->getVerticalScrollBar().moveScrollbarInSteps (deltaLines); } bool TextEditor::scrollDown()