| @@ -1,24 +1,25 @@ | |||
| #pragma once | |||
| #include <ui/common.hpp> | |||
| #include <widget/OpaqueWidget.hpp> | |||
| #include <ui/ScrollBar.hpp> | |||
| #include <ui/Scrollbar.hpp> | |||
| namespace rack { | |||
| namespace ui { | |||
| /** Handles a container with ScrollBar */ | |||
| /** Handles a container with Scrollbar */ | |||
| struct ScrollWidget : widget::OpaqueWidget { | |||
| struct Internal; | |||
| Internal* internal; | |||
| widget::Widget* container; | |||
| ScrollBar* horizontalScrollBar; | |||
| ScrollBar* verticalScrollBar; | |||
| Scrollbar* horizontalScrollbar; | |||
| Scrollbar* verticalScrollbar; | |||
| math::Vec offset; | |||
| math::Rect containerBox; | |||
| bool hideScrollbars = false; | |||
| ScrollWidget(); | |||
| void scrollTo(math::Rect r); | |||
| @@ -8,14 +8,14 @@ namespace ui { | |||
| /** Parent must be a ScrollWidget */ | |||
| struct ScrollBar : widget::OpaqueWidget { | |||
| struct Scrollbar : widget::OpaqueWidget { | |||
| struct Internal; | |||
| Internal* internal; | |||
| bool vertical = false; | |||
| ScrollBar(); | |||
| ~ScrollBar(); | |||
| Scrollbar(); | |||
| ~Scrollbar(); | |||
| void draw(const DrawArgs& args) override; | |||
| void onButton(const event::Button& e) override; | |||
| void onDragStart(const event::DragStart& e) override; | |||
| @@ -24,5 +24,8 @@ struct ScrollBar : widget::OpaqueWidget { | |||
| }; | |||
| DEPRECATED typedef Scrollbar ScrollBar; | |||
| } // namespace ui | |||
| } // namespace rack | |||
| @@ -81,15 +81,15 @@ void RackScrollWidget::draw(const DrawArgs& args) { | |||
| bool horizontalVisible; | |||
| bool verticalVisible; | |||
| if (fullscreen) { | |||
| horizontalVisible = horizontalScrollBar->visible; | |||
| verticalVisible = verticalScrollBar->visible; | |||
| horizontalScrollBar->visible = false; | |||
| verticalScrollBar->visible = false; | |||
| horizontalVisible = horizontalScrollbar->visible; | |||
| verticalVisible = verticalScrollbar->visible; | |||
| horizontalScrollbar->visible = false; | |||
| verticalScrollbar->visible = false; | |||
| } | |||
| ScrollWidget::draw(args); | |||
| if (fullscreen) { | |||
| horizontalScrollBar->visible = horizontalVisible; | |||
| verticalScrollBar->visible = verticalVisible; | |||
| horizontalScrollbar->visible = horizontalVisible; | |||
| verticalScrollbar->visible = verticalVisible; | |||
| } | |||
| } | |||
| @@ -13,15 +13,15 @@ ScrollWidget::ScrollWidget() { | |||
| container = new widget::Widget; | |||
| addChild(container); | |||
| horizontalScrollBar = new ScrollBar; | |||
| horizontalScrollBar->vertical = false; | |||
| horizontalScrollBar->hide(); | |||
| addChild(horizontalScrollBar); | |||
| verticalScrollBar = new ScrollBar; | |||
| verticalScrollBar->vertical = true; | |||
| verticalScrollBar->hide(); | |||
| addChild(verticalScrollBar); | |||
| horizontalScrollbar = new Scrollbar; | |||
| horizontalScrollbar->vertical = false; | |||
| horizontalScrollbar->hide(); | |||
| addChild(horizontalScrollbar); | |||
| verticalScrollbar = new Scrollbar; | |||
| verticalScrollbar->vertical = true; | |||
| verticalScrollbar->hide(); | |||
| addChild(verticalScrollbar); | |||
| } | |||
| @@ -70,15 +70,15 @@ void ScrollWidget::step() { | |||
| container->box.pos = offset.neg().round(); | |||
| // Make scrollbars visible only if there is a positive range to scroll. | |||
| horizontalScrollBar->setVisible(offsetBounds.size.x > 0.f); | |||
| verticalScrollBar->setVisible(offsetBounds.size.y > 0.f); | |||
| horizontalScrollbar->setVisible(offsetBounds.size.x > 0.f); | |||
| verticalScrollbar->setVisible(offsetBounds.size.y > 0.f); | |||
| // Reposition and resize scroll bars | |||
| math::Vec inner = box.size.minus(math::Vec(verticalScrollBar->box.size.x, horizontalScrollBar->box.size.y)); | |||
| horizontalScrollBar->box.pos.y = inner.y; | |||
| verticalScrollBar->box.pos.x = inner.x; | |||
| horizontalScrollBar->box.size.x = verticalScrollBar->isVisible() ? inner.x : box.size.x; | |||
| verticalScrollBar->box.size.y = horizontalScrollBar->isVisible() ? inner.y : box.size.y; | |||
| math::Vec inner = box.size.minus(math::Vec(verticalScrollbar->box.size.x, horizontalScrollbar->box.size.y)); | |||
| horizontalScrollbar->box.pos.y = inner.y; | |||
| verticalScrollbar->box.pos.x = inner.x; | |||
| horizontalScrollbar->box.size.x = verticalScrollbar->isVisible() ? inner.x : box.size.x; | |||
| verticalScrollbar->box.size.y = horizontalScrollbar->isVisible() ? inner.y : box.size.y; | |||
| } | |||
| @@ -88,7 +88,7 @@ void ScrollWidget::onButton(const event::Button& e) { | |||
| return; | |||
| // Consume right button only if the scrollbars are visible | |||
| if (!(horizontalScrollBar->isVisible() || verticalScrollBar->isVisible())) | |||
| if (!(horizontalScrollbar->isVisible() || verticalScrollbar->isVisible())) | |||
| return; | |||
| if (e.button == GLFW_MOUSE_BUTTON_MIDDLE) { | |||
| @@ -106,7 +106,7 @@ void ScrollWidget::onDragStart(const event::DragStart& e) { | |||
| void ScrollWidget::onDragMove(const event::DragMove& e) { | |||
| // Scroll only if the scrollbars are visible | |||
| if (!(horizontalScrollBar->isVisible() || verticalScrollBar->isVisible())) | |||
| if (!(horizontalScrollbar->isVisible() || verticalScrollbar->isVisible())) | |||
| return; | |||
| math::Vec offsetDelta = e.mouseDelta.div(getAbsoluteZoom()); | |||
| @@ -120,7 +120,7 @@ void ScrollWidget::onHoverScroll(const event::HoverScroll& e) { | |||
| return; | |||
| // Scroll only if the scrollbars are visible | |||
| if (!(horizontalScrollBar->isVisible() || verticalScrollBar->isVisible())) | |||
| if (!(horizontalScrollbar->isVisible() || verticalScrollbar->isVisible())) | |||
| return; | |||
| math::Vec scrollDelta = e.scrollDelta; | |||
| @@ -1,4 +1,4 @@ | |||
| #include <ui/ScrollBar.hpp> | |||
| #include <ui/Scrollbar.hpp> | |||
| #include <ui/ScrollWidget.hpp> | |||
| #include <context.hpp> | |||
| #include <window.hpp> | |||
| @@ -11,16 +11,16 @@ namespace ui { | |||
| // Internal not currently used | |||
| ScrollBar::ScrollBar() { | |||
| Scrollbar::Scrollbar() { | |||
| box.size = math::Vec(BND_SCROLLBAR_WIDTH, BND_SCROLLBAR_HEIGHT); | |||
| } | |||
| ScrollBar::~ScrollBar() { | |||
| Scrollbar::~Scrollbar() { | |||
| } | |||
| void ScrollBar::draw(const DrawArgs& args) { | |||
| void Scrollbar::draw(const DrawArgs& args) { | |||
| ScrollWidget* sw = dynamic_cast<ScrollWidget*>(parent); | |||
| assert(sw); | |||
| @@ -36,7 +36,7 @@ void ScrollBar::draw(const DrawArgs& args) { | |||
| } | |||
| void ScrollBar::onButton(const event::Button& e) { | |||
| void Scrollbar::onButton(const event::Button& e) { | |||
| if (e.button == GLFW_MOUSE_BUTTON_LEFT && e.action == GLFW_PRESS) { | |||
| ScrollWidget* sw = dynamic_cast<ScrollWidget*>(parent); | |||
| assert(sw); | |||
| @@ -58,15 +58,15 @@ void ScrollBar::onButton(const event::Button& e) { | |||
| } | |||
| void ScrollBar::onDragStart(const event::DragStart& e) { | |||
| void Scrollbar::onDragStart(const event::DragStart& e) { | |||
| } | |||
| void ScrollBar::onDragEnd(const event::DragEnd& e) { | |||
| void Scrollbar::onDragEnd(const event::DragEnd& e) { | |||
| } | |||
| void ScrollBar::onDragMove(const event::DragMove& e) { | |||
| void Scrollbar::onDragMove(const event::DragMove& e) { | |||
| ScrollWidget* sw = dynamic_cast<ScrollWidget*>(parent); | |||
| assert(sw); | |||