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