Browse Source

Make Button, RadioButton, ChoiceButton, and OptionButton more consistent. Remove IconButton.

tags/v2.0.0
Andrew Belt 3 years ago
parent
commit
84a0728c42
11 changed files with 64 additions and 106 deletions
  1. +1
    -1
      include/rack.hpp
  2. +7
    -0
      include/ui/Button.hpp
  3. +2
    -0
      include/ui/ChoiceButton.hpp
  4. +0
    -25
      include/ui/IconButton.hpp
  5. +4
    -9
      include/ui/OptionButton.hpp
  6. +6
    -8
      include/ui/RadioButton.hpp
  7. +10
    -2
      src/ui/Button.cpp
  8. +6
    -2
      src/ui/ChoiceButton.cpp
  9. +0
    -27
      src/ui/IconButton.cpp
  10. +8
    -18
      src/ui/OptionButton.cpp
  11. +20
    -14
      src/ui/RadioButton.cpp

+ 1
- 1
include/rack.hpp View File

@@ -41,9 +41,9 @@
#include <ui/MenuLabel.hpp>
#include <ui/MenuItem.hpp>
#include <ui/Button.hpp>
#include <ui/IconButton.hpp>
#include <ui/ChoiceButton.hpp>
#include <ui/RadioButton.hpp>
#include <ui/OptionButton.hpp>
#include <ui/ProgressBar.hpp>

#include <app/AudioWidget.hpp>


+ 7
- 0
include/ui/Button.hpp View File

@@ -8,6 +8,13 @@ namespace rack {
namespace ui {


/** A clickable button with text.
Dispatches Action event when clicked.

If quantity is set, its value is set to 1.0 when pressed, 0.0 when released.

If text is not set, the quantity label is used.
*/
struct Button : widget::OpaqueWidget {
std::string text;
/** Not owned. Tracks the pressed state of the button.*/


+ 2
- 0
include/ui/ChoiceButton.hpp View File

@@ -7,6 +7,8 @@ namespace rack {
namespace ui {


/** Button with a dropdown icon on its right.
*/
struct ChoiceButton : Button {
void draw(const DrawArgs& args) override;
};


+ 0
- 25
include/ui/IconButton.hpp View File

@@ -1,25 +0,0 @@
#pragma once
#include <widget/FramebufferWidget.hpp>
#include <widget/SvgWidget.hpp>
#include <ui/common.hpp>
#include <ui/Button.hpp>


namespace rack {
namespace ui {


struct IconButton : Button {
widget::FramebufferWidget* fw;
widget::SvgWidget* sw;

IconButton();
void setSvg(std::shared_ptr<Svg> svg);
DEPRECATED void setSVG(std::shared_ptr<Svg> svg) {
setSvg(svg);
}
};


} // namespace ui
} // namespace rack

+ 4
- 9
include/ui/OptionButton.hpp View File

@@ -1,21 +1,16 @@
#pragma once
#include <widget/OpaqueWidget.hpp>
#include <ui/common.hpp>
#include <Quantity.hpp>
#include <ui/RadioButton.hpp>


namespace rack {
namespace ui {


struct OptionButton : widget::OpaqueWidget {
std::string text;
/** Not owned. Tracks the pressed state of the button.*/
Quantity* quantity = NULL;

OptionButton();
/** Behaves like a RadioButton and appears with a checkmark beside text.
*/
struct OptionButton : RadioButton {
void draw(const DrawArgs& args) override;
void onDragDrop(const DragDropEvent& e) override;
};




+ 6
- 8
include/ui/RadioButton.hpp View File

@@ -1,20 +1,18 @@
#pragma once
#include <ui/common.hpp>
#include <widget/OpaqueWidget.hpp>
#include <Quantity.hpp>
#include <context.hpp>
#include <ui/Button.hpp>


namespace rack {
namespace ui {


struct RadioButton : widget::OpaqueWidget {
/** Not owned. */
Quantity* quantity = NULL;

RadioButton();
/** Toggles a Quantity between 1.0 and 0.0 when clicked.
*/
struct RadioButton : Button {
void draw(const DrawArgs& args) override;
void onDragStart(const DragStartEvent& e) override;
void onDragEnd(const DragEndEvent& e) override;
void onDragDrop(const DragDropEvent& e) override;
};



+ 10
- 2
src/ui/Button.cpp View File

@@ -10,15 +10,21 @@ Button::Button() {
box.size.y = BND_WIDGET_HEIGHT;
}


void Button::draw(const DrawArgs& args) {
BNDwidgetState state = BND_DEFAULT;
if (APP->event->hoveredWidget == this)
if (APP->event->getHoveredWidget() == this)
state = BND_HOVER;
if (APP->event->draggedWidget == this)
if (APP->event->getDraggedWidget() == this)
state = BND_ACTIVE;

std::string text = this->text;
if (text.empty() && quantity)
text = quantity->getLabel();
bndToolButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, text.c_str());
}


void Button::onDragStart(const DragStartEvent& e) {
if (e.button != GLFW_MOUSE_BUTTON_LEFT)
return;
@@ -27,11 +33,13 @@ void Button::onDragStart(const DragStartEvent& e) {
quantity->setMax();
}


void Button::onDragEnd(const DragEndEvent& e) {
if (quantity)
quantity->setMin();
}


void Button::onDragDrop(const DragDropEvent& e) {
if (e.origin == this) {
ActionEvent eAction;


+ 6
- 2
src/ui/ChoiceButton.cpp View File

@@ -8,10 +8,14 @@ namespace ui {

void ChoiceButton::draw(const DrawArgs& args) {
BNDwidgetState state = BND_DEFAULT;
if (APP->event->hoveredWidget == this)
if (APP->event->getHoveredWidget() == this)
state = BND_HOVER;
if (APP->event->draggedWidget == this)
if (APP->event->getDraggedWidget() == this)
state = BND_ACTIVE;

std::string text = this->text;
if (text.empty() && quantity)
text = quantity->getLabel();
bndChoiceButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, text.c_str());
}



+ 0
- 27
src/ui/IconButton.cpp View File

@@ -1,27 +0,0 @@
#include <ui/IconButton.hpp>


namespace rack {
namespace ui {


IconButton::IconButton() {
box.size.x = BND_TOOL_WIDTH;

fw = new widget::FramebufferWidget;
fw->oversample = 2;
addChild(fw);

sw = new widget::SvgWidget;
sw->box.pos = math::Vec(2, 2);
fw->addChild(sw);
}

void IconButton::setSvg(std::shared_ptr<Svg> svg) {
sw->setSvg(svg);
fw->dirty = true;
}


} // namespace ui
} // namespace rack

+ 8
- 18
src/ui/OptionButton.cpp View File

@@ -5,27 +5,17 @@ namespace rack {
namespace ui {


OptionButton::OptionButton() {
box.size.y = BND_WIDGET_HEIGHT;
}

void OptionButton::draw(const DrawArgs& args) {
BNDwidgetState state = BND_DEFAULT;
if (quantity && !quantity->isMin())
state = BND_ACTIVE;

bndOptionButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, state, text.c_str());
}


void OptionButton::onDragDrop(const DragDropEvent& e) {
if (e.origin == this) {
if (quantity)
quantity->toggle();

ActionEvent eAction;
onAction(eAction);
if (quantity) {
if (quantity->isMax())
state = BND_ACTIVE;
}

std::string text = this->text;
if (text.empty() && quantity)
text = quantity->getLabel();
bndOptionButton(args.vg, 0.0, 0.0, INFINITY, box.size.y, state, text.c_str());
}




+ 20
- 14
src/ui/RadioButton.cpp View File

@@ -1,36 +1,42 @@
#include <ui/RadioButton.hpp>
#include <context.hpp>


namespace rack {
namespace ui {


RadioButton::RadioButton() {
box.size.y = BND_WIDGET_HEIGHT;
}

void RadioButton::draw(const DrawArgs& args) {
BNDwidgetState state = BND_DEFAULT;
if (APP->event->hoveredWidget == this)
if (APP->event->getHoveredWidget() == this)
state = BND_HOVER;

std::string label;
if (quantity) {
label = quantity->getLabel();
if (quantity->isMax())
state = BND_ACTIVE;
}
bndRadioButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, label.c_str());

std::string text = this->text;
if (text.empty() && quantity)
text = quantity->getLabel();
bndRadioButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, text.c_str());
}


void RadioButton::onDragStart(const DragStartEvent& e) {
OpaqueWidget::onDragStart(e);
}


void RadioButton::onDragEnd(const DragEndEvent& e) {
OpaqueWidget::onDragEnd(e);
}


void RadioButton::onDragDrop(const DragDropEvent& e) {
if (e.origin == this) {
if (quantity) {
if (quantity->isMax())
quantity->setMin();
else
quantity->setMax();
}
if (quantity)
quantity->toggle();

ActionEvent eAction;
onAction(eAction);


Loading…
Cancel
Save