diff --git a/Source/Components/Buttons.h b/Source/Components/Buttons.h index 7c132b6f5..acc13d91d 100644 --- a/Source/Components/Buttons.h +++ b/Source/Components/Buttons.h @@ -121,6 +121,14 @@ class ToolbarRadioButton final : public TextButton { class SmallIconButton : public TextButton { using TextButton::TextButton; + bool hitTest(int x, int y) override + { + if (getLocalBounds().reduced(2).contains(x, y)) + return true; + + return false; + } + void mouseEnter(MouseEvent const& e) override { repaint(); diff --git a/Source/Sidebar/Inspector.h b/Source/Sidebar/Inspector.h index 2d9b90391..8f7621600 100644 --- a/Source/Sidebar/Inspector.h +++ b/Source/Sidebar/Inspector.h @@ -155,6 +155,11 @@ class Inspector final : public Component { loadParameters(properties); } + bool isEmpty() + { + return properties.empty(); + } + bool loadParameters(SmallArray& objectParameters) { properties = objectParameters; diff --git a/Source/Sidebar/Sidebar.cpp b/Source/Sidebar/Sidebar.cpp index f5c8c787a..9dc82b330 100644 --- a/Source/Sidebar/Sidebar.cpp +++ b/Source/Sidebar/Sidebar.cpp @@ -108,21 +108,6 @@ void Sidebar::paint(Graphics& g) if (!sidebarHidden) { g.setColour(findColour(PlugDataColour::sidebarBackgroundColourId)); g.fillRect(0, 30, getWidth(), getHeight()); - } -} - -void Sidebar::paintOverChildren(Graphics& g) -{ - g.setColour(findColour(PlugDataColour::toolbarOutlineColourId)); - g.drawLine(0.5f, 30, 0.5f, getHeight() + 0.5f); - - g.drawLine(dividerBounds.getX() + 4, dividerBounds.getCentreY(), dividerBounds.getRight() - 4, dividerBounds.getCentreY()); - - if (!sidebarHidden) { - g.drawLine(0, 30, getWidth(), 30); - - g.setColour(findColour(PlugDataColour::toolbarOutlineColourId).withAlpha(0.5f)); - g.drawLine(getWidth() - 30, 30, getWidth() - 30, getHeight() + 0.5f); auto panelName = panelNames[currentPanel]; if (inspectorButton.isInspectorAuto() && inspector->isVisible()) @@ -131,7 +116,7 @@ void Sidebar::paintOverChildren(Graphics& g) if (inspectorButton.isInspectorPinned()) { auto inpectorPos = Point(0, dividerFactor * getHeight()); - if(!inspector->isVisible()) inpectorPos.setY(getHeight() - 30); + if (inspector->isEmpty()) inpectorPos.setY(getHeight() - 30); g.setColour(findColour(PlugDataColour::sidebarActiveBackgroundColourId)); g.fillRect(inpectorPos.x, inpectorPos.y, getWidth() - 30, 30); auto inspectorTitle = inspector->getTitle(); @@ -142,6 +127,21 @@ void Sidebar::paintOverChildren(Graphics& g) } } +void Sidebar::paintOverChildren(Graphics& g) +{ + g.setColour(findColour(PlugDataColour::toolbarOutlineColourId)); + g.drawLine(0.5f, 30, 0.5f, getHeight() + 0.5f); + + g.drawLine(dividerBounds.getX() + 4, dividerBounds.getCentreY(), dividerBounds.getRight() - 4, dividerBounds.getCentreY()); + + if (!sidebarHidden) { + g.drawLine(0, 30, getWidth(), 30); + + g.setColour(findColour(PlugDataColour::toolbarOutlineColourId).withAlpha(0.5f)); + g.drawLine(getWidth() - 30, 30, getWidth() - 30, getHeight() + 0.5f); + } +} + void Sidebar::settingsChanged(String const& name, var const& value) { if (name == "centre_sidepanel_buttons") { @@ -192,7 +192,7 @@ void Sidebar::resized() } inspector->setBounds(bounds); } else { - auto bottomB = bounds.removeFromBottom(dividerPos); + auto bottomB = bounds.removeFromBottom(inspector->isEmpty() ? 30 : dividerPos); auto resetB = bottomB.removeFromTop(30); inspector->setBounds(bottomB); auto const resetBounds = resetB.removeFromLeft(30); @@ -200,7 +200,7 @@ void Sidebar::resized() extraSettingsButton->setVisible(true); if (resetInspectorButton) { resetInspectorButton->setBounds(resetBounds); - resetInspectorButton->setVisible(true); + resetInspectorButton->setVisible(!inspector->isEmpty()); } } } else { @@ -241,7 +241,7 @@ void Sidebar::mouseDrag(MouseEvent const& e) setBounds(getParentWidth() - newWidth, getY(), newWidth, getHeight()); getParentComponent()->resized(); - } else if (isDraggingDivider) { + } else if (isDraggingDivider && !inspector->isEmpty()) { auto const newDividerY = static_cast(jlimit(30, getHeight() - 30, e.getEventRelativeTo(this).getPosition().y - dragOffset)); dividerFactor = newDividerY / getHeight(); resized(); @@ -266,7 +266,7 @@ void Sidebar::mouseMove(MouseEvent const& e) if (resizeCursor) e.originalComponent->setMouseCursor(MouseCursor::LeftRightResizeCursor); - else if (inspectorButton.isInspectorPinned() && resizeVertical) { + else if (inspectorButton.isInspectorPinned() && resizeVertical && !inspector->isEmpty() && e.getPosition().getX() < (getWidth() - 30)) { isDraggingDivider = true; e.originalComponent->setMouseCursor(MouseCursor::UpDownResizeCursor); } else @@ -331,7 +331,7 @@ void Sidebar::showPanel(SidePanel const panelToShow) break; case SidePanel::InspectorPan: if (!sidebarHidden) { - auto const isVisible = (inspectorButton.isInspectorPinned() || inspectorButton.isInspectorAuto()) && lastParameters.not_empty(); + auto const isVisible = (inspectorButton.isInspectorPinned() || (inspectorButton.isInspectorAuto() && !inspector->isEmpty())); if (!areParamObjectsAllValid()) { clearInspector(); } @@ -455,7 +455,7 @@ void Sidebar::showParameters(SmallArray& objects, SmallArraysetVisible(false); }