@@ -9,11 +9,6 @@ | |||
namespace rack { | |||
namespace event { | |||
struct State; | |||
} // namespace event | |||
namespace history { | |||
struct State; | |||
} // namespace history | |||
@@ -28,6 +23,11 @@ struct Window; | |||
struct PatchManager; | |||
namespace widget { | |||
struct EventState; | |||
}; | |||
namespace app { | |||
struct Scene; | |||
} // namespace app | |||
@@ -35,7 +35,7 @@ namespace app { | |||
/** Contains the application state */ | |||
struct App { | |||
event::State *event = NULL; | |||
widget::EventState *event = NULL; | |||
app::Scene *scene = NULL; | |||
engine::Engine *engine = NULL; | |||
Window *window = NULL; | |||
@@ -20,11 +20,11 @@ struct Knob : ParamWidget { | |||
/** Drag horizontally instead of vertically */ | |||
bool horizontal = false; | |||
void onHover(const event::Hover &e) override; | |||
void onButton(const event::Button &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragMove(const event::DragMove &e) override; | |||
void onHover(const widget::HoverEvent &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDragMove(const widget::DragMoveEvent &e) override; | |||
}; | |||
@@ -26,7 +26,7 @@ struct LedDisplayChoice : widget::TransparentWidget { | |||
NVGcolor bgColor; | |||
LedDisplayChoice(); | |||
void draw(const DrawArgs &args) override; | |||
void onButton(const event::Button &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
}; | |||
struct LedDisplayTextField : ui::TextField { | |||
@@ -35,12 +35,12 @@ struct ModuleWidget : widget::OpaqueWidget { | |||
void draw(const DrawArgs &args) override; | |||
void drawShadow(const DrawArgs &args); | |||
void onHover(const event::Hover &e) override; | |||
void onButton(const event::Button &e) override; | |||
void onHoverKey(const event::HoverKey &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragMove(const event::DragMove &e) override; | |||
void onHover(const widget::HoverEvent &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onHoverKey(const widget::HoverKeyEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDragMove(const widget::DragMoveEvent &e) override; | |||
/** Associates this ModuleWidget with the Module | |||
Transfers ownership | |||
@@ -19,10 +19,10 @@ struct ParamWidget : widget::OpaqueWidget { | |||
~ParamWidget(); | |||
void step() override; | |||
void draw(const DrawArgs &args) override; | |||
void onButton(const event::Button &e) override; | |||
void onDoubleClick(const event::DoubleClick &e) override; | |||
void onEnter(const event::Enter &e) override; | |||
void onLeave(const event::Leave &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onDoubleClick(const widget::DoubleClickEvent &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
/** For legacy patch loading */ | |||
void fromJson(json_t *rootJ); | |||
@@ -28,14 +28,14 @@ struct PortWidget : widget::OpaqueWidget { | |||
void step() override; | |||
void draw(const DrawArgs &args) override; | |||
void onButton(const event::Button &e) override; | |||
void onEnter(const event::Enter &e) override; | |||
void onLeave(const event::Leave &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragDrop(const event::DragDrop &e) override; | |||
void onDragEnter(const event::DragEnter &e) override; | |||
void onDragLeave(const event::DragLeave &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDragDrop(const widget::DragDropEvent &e) override; | |||
void onDragEnter(const widget::DragEnterEvent &e) override; | |||
void onDragLeave(const widget::DragLeaveEvent &e) override; | |||
}; | |||
@@ -28,11 +28,11 @@ struct RackWidget : widget::OpaqueWidget { | |||
void step() override; | |||
void draw(const DrawArgs &args) override; | |||
void onHover(const event::Hover &e) override; | |||
void onHoverKey(const event::HoverKey &e) override; | |||
void onDragHover(const event::DragHover &e) override; | |||
void onButton(const event::Button &e) override; | |||
void onZoom(const event::Zoom &e) override; | |||
void onHover(const widget::HoverEvent &e) override; | |||
void onHoverKey(const widget::HoverKeyEvent &e) override; | |||
void onDragHover(const widget::DragHoverEvent &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onZoom(const widget::ZoomEvent &e) override; | |||
/** Completely clear the rack's modules and cables */ | |||
void clear(); | |||
@@ -31,8 +31,8 @@ struct Scene : widget::OpaqueWidget { | |||
~Scene(); | |||
void step() override; | |||
void draw(const DrawArgs &args) override; | |||
void onHoverKey(const event::HoverKey &e) override; | |||
void onPathDrop(const event::PathDrop &e) override; | |||
void onHoverKey(const widget::HoverKeyEvent &e) override; | |||
void onPathDrop(const widget::PathDropEvent &e) override; | |||
void runCheckVersion(); | |||
}; | |||
@@ -9,10 +9,10 @@ namespace app { | |||
struct SliderKnob : Knob { | |||
// Bypass Knob's circular hitbox detection | |||
void onHover(const event::Hover &e) override { | |||
void onHover(const widget::HoverEvent &e) override { | |||
ParamWidget::onHover(e); | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const widget::ButtonEvent &e) override { | |||
ParamWidget::onButton(e); | |||
} | |||
}; | |||
@@ -16,9 +16,9 @@ struct SvgButton : widget::OpaqueWidget { | |||
SvgButton(); | |||
void addFrame(std::shared_ptr<Svg> svg); | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragDrop(const event::DragDrop &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDragDrop(const widget::DragDropEvent &e) override; | |||
}; | |||
@@ -23,7 +23,7 @@ struct SvgKnob : Knob { | |||
SvgKnob(); | |||
void setSvg(std::shared_ptr<Svg> svg); | |||
DEPRECATED void setSVG(std::shared_ptr<Svg> svg) {setSvg(svg);} | |||
void onChange(const event::Change &e) override; | |||
void onChange(const widget::ChangeEvent &e) override; | |||
}; | |||
@@ -22,7 +22,7 @@ struct SvgSlider : app::SliderKnob { | |||
SvgSlider(); | |||
void setBackgroundSvg(std::shared_ptr<Svg> svg); | |||
void setHandleSvg(std::shared_ptr<Svg> svg); | |||
void onChange(const event::Change &e) override; | |||
void onChange(const widget::ChangeEvent &e) override; | |||
DEPRECATED void setBackgroundSVG(std::shared_ptr<Svg> svg) {setBackgroundSvg(svg);} | |||
DEPRECATED void setHandleSVG(std::shared_ptr<Svg> svg) {setBackgroundSvg(svg);} | |||
@@ -18,7 +18,7 @@ struct SvgSwitch : Switch { | |||
SvgSwitch(); | |||
/** Adds an SVG file to represent the next switch position */ | |||
void addFrame(std::shared_ptr<Svg> svg); | |||
void onChange(const event::Change &e) override; | |||
void onChange(const widget::ChangeEvent &e) override; | |||
}; | |||
@@ -16,9 +16,9 @@ struct Switch : ParamWidget { | |||
bool momentaryReleased = false; | |||
void step() override; | |||
void onDoubleClick(const event::DoubleClick &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDoubleClick(const widget::DoubleClickEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
}; | |||
@@ -17,11 +17,11 @@ struct Button : widget::OpaqueWidget { | |||
Button(); | |||
~Button(); | |||
void draw(const DrawArgs &args) override; | |||
void onEnter(const event::Enter &e) override; | |||
void onLeave(const event::Leave &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragDrop(const event::DragDrop &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDragDrop(const widget::DragDropEvent &e) override; | |||
}; | |||
@@ -19,7 +19,7 @@ struct Menu : widget::OpaqueWidget { | |||
void setChildMenu(Menu *menu); | |||
void step() override; | |||
void draw(const DrawArgs &args) override; | |||
void onHoverScroll(const event::HoverScroll &e) override; | |||
void onHoverScroll(const widget::HoverScrollEvent &e) override; | |||
}; | |||
@@ -16,9 +16,9 @@ struct MenuItem : MenuEntry { | |||
void draw(const DrawArgs &args) override; | |||
void step() override; | |||
void onEnter(const event::Enter &e) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragDrop(const event::DragDrop &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragDrop(const widget::DragDropEvent &e) override; | |||
void doAction(); | |||
virtual Menu *createChildMenu() {return NULL;} | |||
}; | |||
@@ -10,8 +10,8 @@ namespace ui { | |||
/** Deletes itself from parent when clicked */ | |||
struct MenuOverlay : widget::OpaqueWidget { | |||
void step() override; | |||
void onButton(const event::Button &e) override; | |||
void onHoverKey(const event::HoverKey &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onHoverKey(const widget::HoverKeyEvent &e) override; | |||
}; | |||
@@ -15,9 +15,9 @@ struct RadioButton : widget::OpaqueWidget { | |||
RadioButton(); | |||
~RadioButton(); | |||
void draw(const DrawArgs &args) override; | |||
void onEnter(const event::Enter &e) override; | |||
void onLeave(const event::Leave &e) override; | |||
void onDragDrop(const event::DragDrop &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onLeave(const widget::LeaveEvent &e) override; | |||
void onDragDrop(const widget::DragDropEvent &e) override; | |||
}; | |||
@@ -20,9 +20,9 @@ struct ScrollBar : widget::OpaqueWidget { | |||
ScrollBar(); | |||
void draw(const DrawArgs &args) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragMove(const event::DragMove &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragMove(const widget::DragMoveEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
}; | |||
@@ -19,8 +19,8 @@ struct ScrollWidget : widget::Widget { | |||
void scrollTo(math::Rect r); | |||
void draw(const DrawArgs &args) override; | |||
void step() override; | |||
void onHover(const event::Hover &e) override; | |||
void onHoverScroll(const event::HoverScroll &e) override; | |||
void onHover(const widget::HoverEvent &e) override; | |||
void onHoverScroll(const widget::HoverScrollEvent &e) override; | |||
}; | |||
@@ -16,10 +16,10 @@ struct Slider : widget::OpaqueWidget { | |||
Slider(); | |||
~Slider(); | |||
void draw(const DrawArgs &args) override; | |||
void onDragStart(const event::DragStart &e) override; | |||
void onDragMove(const event::DragMove &e) override; | |||
void onDragEnd(const event::DragEnd &e) override; | |||
void onDoubleClick(const event::DoubleClick &e) override; | |||
void onDragStart(const widget::DragStartEvent &e) override; | |||
void onDragMove(const widget::DragMoveEvent &e) override; | |||
void onDragEnd(const widget::DragEndEvent &e) override; | |||
void onDoubleClick(const widget::DoubleClickEvent &e) override; | |||
}; | |||
@@ -1,7 +1,7 @@ | |||
#pragma once | |||
#include "widget/OpaqueWidget.hpp" | |||
#include "ui/common.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "app.hpp" | |||
@@ -22,12 +22,12 @@ struct TextField : widget::OpaqueWidget { | |||
TextField(); | |||
void draw(const DrawArgs &args) override; | |||
void onButton(const event::Button &e) override; | |||
void onHover(const event::Hover &e) override; | |||
void onEnter(const event::Enter &e) override; | |||
void onSelect(const event::Select &e) override; | |||
void onSelectText(const event::SelectText &e) override; | |||
void onSelectKey(const event::SelectKey &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onHover(const widget::HoverEvent &e) override; | |||
void onEnter(const widget::EnterEvent &e) override; | |||
void onSelect(const widget::SelectEvent &e) override; | |||
void onSelectText(const widget::SelectTextEvent &e) override; | |||
void onSelectKey(const widget::SelectKeyEvent &e) override; | |||
/** Inserts text at the cursor, replacing the selection if necessary */ | |||
void insertText(std::string text); | |||
@@ -9,19 +9,19 @@ namespace widget { | |||
/** A Widget that consumes recursing events without giving a chance for children to consume. | |||
*/ | |||
struct ObstructWidget : Widget { | |||
void onHover(const event::Hover &e) override { | |||
void onHover(const HoverEvent &e) override { | |||
e.consume(this); | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const ButtonEvent &e) override { | |||
e.consume(this); | |||
} | |||
void onHoverKey(const event::HoverKey &e) override { | |||
void onHoverKey(const HoverKeyEvent &e) override { | |||
e.consume(this); | |||
} | |||
void onHoverText(const event::HoverText &e) override { | |||
void onHoverText(const HoverTextEvent &e) override { | |||
e.consume(this); | |||
} | |||
void onDragHover(const event::DragHover &e) override { | |||
void onDragHover(const DragHoverEvent &e) override { | |||
e.consume(this); | |||
} | |||
}; | |||
@@ -11,27 +11,27 @@ You can of course override the events. | |||
You may also call OpaqueWidget::on*() from the overridden method to continue recursing/consuming the event. | |||
*/ | |||
struct OpaqueWidget : Widget { | |||
void onHover(const event::Hover &e) override { | |||
void onHover(const HoverEvent &e) override { | |||
Widget::onHover(e); | |||
if (!e.getConsumed()) | |||
e.consume(this); | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const ButtonEvent &e) override { | |||
Widget::onButton(e); | |||
if (!e.getConsumed()) | |||
e.consume(this); | |||
} | |||
void onHoverKey(const event::HoverKey &e) override { | |||
void onHoverKey(const HoverKeyEvent &e) override { | |||
Widget::onHoverKey(e); | |||
if (!e.getConsumed()) | |||
e.consume(this); | |||
} | |||
void onHoverText(const event::HoverText &e) override { | |||
void onHoverText(const HoverTextEvent &e) override { | |||
Widget::onHoverText(e); | |||
if (!e.getConsumed()) | |||
e.consume(this); | |||
} | |||
void onDragHover(const event::DragHover &e) override { | |||
void onDragHover(const DragHoverEvent &e) override { | |||
Widget::onDragHover(e); | |||
if (!e.getConsumed()) | |||
e.consume(this); | |||
@@ -9,13 +9,13 @@ namespace widget { | |||
/** A Widget that does not respond to events and does not pass events to children */ | |||
struct TransparentWidget : Widget { | |||
/** Override behavior to do nothing instead. */ | |||
void onHover(const event::Hover &e) override {} | |||
void onButton(const event::Button &e) override {} | |||
void onHoverKey(const event::HoverKey &e) override {} | |||
void onHoverText(const event::HoverText &e) override {} | |||
void onHoverScroll(const event::HoverScroll &e) override {} | |||
void onDragHover(const event::DragHover &e) override {} | |||
void onPathDrop(const event::PathDrop &e) override {} | |||
void onHover(const HoverEvent &e) override {} | |||
void onButton(const ButtonEvent &e) override {} | |||
void onHoverKey(const HoverKeyEvent &e) override {} | |||
void onHoverText(const HoverTextEvent &e) override {} | |||
void onHoverScroll(const HoverScrollEvent &e) override {} | |||
void onDragHover(const DragHoverEvent &e) override {} | |||
void onPathDrop(const PathDropEvent &e) override {} | |||
}; | |||
@@ -3,7 +3,7 @@ | |||
#include "math.hpp" | |||
#include "window.hpp" | |||
#include "color.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include <list> | |||
@@ -133,35 +133,35 @@ struct Widget { | |||
/** Override these event callbacks to respond to events. | |||
See events.hpp for a description of each event. | |||
*/ | |||
virtual void onHover(const event::Hover &e) {recursePositionEvent(&Widget::onHover, e);} | |||
virtual void onButton(const event::Button &e) {recursePositionEvent(&Widget::onButton, e);} | |||
virtual void onDoubleClick(const event::DoubleClick &e) {} | |||
virtual void onHoverKey(const event::HoverKey &e) {recursePositionEvent(&Widget::onHoverKey, e);} | |||
virtual void onHoverText(const event::HoverText &e) {recursePositionEvent(&Widget::onHoverText, e);} | |||
virtual void onHoverScroll(const event::HoverScroll &e) {recursePositionEvent(&Widget::onHoverScroll, e);} | |||
virtual void onEnter(const event::Enter &e) {} | |||
virtual void onLeave(const event::Leave &e) {} | |||
virtual void onSelect(const event::Select &e) {} | |||
virtual void onDeselect(const event::Deselect &e) {} | |||
virtual void onSelectKey(const event::SelectKey &e) {} | |||
virtual void onSelectText(const event::SelectText &e) {} | |||
virtual void onDragStart(const event::DragStart &e) {} | |||
virtual void onDragEnd(const event::DragEnd &e) {} | |||
virtual void onDragMove(const event::DragMove &e) {} | |||
virtual void onDragHover(const event::DragHover &e) {recursePositionEvent(&Widget::onDragHover, e);} | |||
virtual void onDragEnter(const event::DragEnter &e) {} | |||
virtual void onDragLeave(const event::DragLeave &e) {} | |||
virtual void onDragDrop(const event::DragDrop &e) {} | |||
virtual void onPathDrop(const event::PathDrop &e) {recursePositionEvent(&Widget::onPathDrop, e);} | |||
virtual void onAction(const event::Action &e) {} | |||
virtual void onChange(const event::Change &e) {} | |||
virtual void onZoom(const event::Zoom &e) {recurseEvent(&Widget::onZoom, e);} | |||
virtual void onReposition(const event::Reposition &e) {} | |||
virtual void onResize(const event::Resize &e) {} | |||
virtual void onAdd(const event::Add &e) {} | |||
virtual void onRemove(const event::Remove &e) {} | |||
virtual void onShow(const event::Show &e) {recurseEvent(&Widget::onShow, e);} | |||
virtual void onHide(const event::Hide &e) {recurseEvent(&Widget::onHide, e);} | |||
virtual void onHover(const HoverEvent &e) {recursePositionEvent(&Widget::onHover, e);} | |||
virtual void onButton(const ButtonEvent &e) {recursePositionEvent(&Widget::onButton, e);} | |||
virtual void onDoubleClick(const DoubleClickEvent &e) {} | |||
virtual void onHoverKey(const HoverKeyEvent &e) {recursePositionEvent(&Widget::onHoverKey, e);} | |||
virtual void onHoverText(const HoverTextEvent &e) {recursePositionEvent(&Widget::onHoverText, e);} | |||
virtual void onHoverScroll(const HoverScrollEvent &e) {recursePositionEvent(&Widget::onHoverScroll, e);} | |||
virtual void onEnter(const EnterEvent &e) {} | |||
virtual void onLeave(const LeaveEvent &e) {} | |||
virtual void onSelect(const SelectEvent &e) {} | |||
virtual void onDeselect(const DeselectEvent &e) {} | |||
virtual void onSelectKey(const SelectKeyEvent &e) {} | |||
virtual void onSelectText(const SelectTextEvent &e) {} | |||
virtual void onDragStart(const DragStartEvent &e) {} | |||
virtual void onDragEnd(const DragEndEvent &e) {} | |||
virtual void onDragMove(const DragMoveEvent &e) {} | |||
virtual void onDragHover(const DragHoverEvent &e) {recursePositionEvent(&Widget::onDragHover, e);} | |||
virtual void onDragEnter(const DragEnterEvent &e) {} | |||
virtual void onDragLeave(const DragLeaveEvent &e) {} | |||
virtual void onDragDrop(const DragDropEvent &e) {} | |||
virtual void onPathDrop(const PathDropEvent &e) {recursePositionEvent(&Widget::onPathDrop, e);} | |||
virtual void onAction(const ActionEvent &e) {} | |||
virtual void onChange(const ChangeEvent &e) {} | |||
virtual void onZoom(const ZoomEvent &e) {recurseEvent(&Widget::onZoom, e);} | |||
virtual void onReposition(const RepositionEvent &e) {} | |||
virtual void onResize(const ResizeEvent &e) {} | |||
virtual void onAdd(const AddEvent &e) {} | |||
virtual void onRemove(const RemoveEvent &e) {} | |||
virtual void onShow(const ShowEvent &e) {recurseEvent(&Widget::onShow, e);} | |||
virtual void onHide(const HideEvent &e) {recurseEvent(&Widget::onHide, e);} | |||
}; | |||
@@ -15,38 +15,38 @@ struct ZoomWidget : Widget { | |||
void setZoom(float zoom); | |||
void draw(const DrawArgs &args) override; | |||
void onHover(const event::Hover &e) override { | |||
event::Hover e2 = e; | |||
void onHover(const HoverEvent &e) override { | |||
HoverEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onHover(e2); | |||
} | |||
void onButton(const event::Button &e) override { | |||
event::Button e2 = e; | |||
void onButton(const ButtonEvent &e) override { | |||
ButtonEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onButton(e2); | |||
} | |||
void onHoverKey(const event::HoverKey &e) override { | |||
event::HoverKey e2 = e; | |||
void onHoverKey(const HoverKeyEvent &e) override { | |||
HoverKeyEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onHoverKey(e2); | |||
} | |||
void onHoverText(const event::HoverText &e) override { | |||
event::HoverText e2 = e; | |||
void onHoverText(const HoverTextEvent &e) override { | |||
HoverTextEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onHoverText(e2); | |||
} | |||
void onHoverScroll(const event::HoverScroll &e) override { | |||
event::HoverScroll e2 = e; | |||
void onHoverScroll(const HoverScrollEvent &e) override { | |||
HoverScrollEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onHoverScroll(e2); | |||
} | |||
void onDragHover(const event::DragHover &e) override { | |||
event::DragHover e2 = e; | |||
void onDragHover(const DragHoverEvent &e) override { | |||
DragHoverEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onDragHover(e2); | |||
} | |||
void onPathDrop(const event::PathDrop &e) override { | |||
event::PathDrop e2 = e; | |||
void onPathDrop(const PathDropEvent &e) override { | |||
PathDropEvent e2 = e; | |||
e2.pos = e.pos.div(zoom); | |||
Widget::onPathDrop(e2); | |||
} | |||
@@ -5,47 +5,41 @@ | |||
namespace rack { | |||
namespace widget { | |||
struct Widget; | |||
} // namespace widget | |||
/** Event state machine for Widgets | |||
*/ | |||
namespace event { | |||
struct Widget; | |||
struct Context { | |||
struct EventContext { | |||
/** The Widget that consumes the event. | |||
This stops propagation of the event if applicable. | |||
*/ | |||
widget::Widget *consumed = NULL; | |||
Widget *consumed = NULL; | |||
}; | |||
/** Base event class */ | |||
struct Event { | |||
Context *context = NULL; | |||
EventContext *context = NULL; | |||
void consume(widget::Widget *w) const { | |||
void consume(Widget *w) const { | |||
if (context) | |||
context->consumed = w; | |||
} | |||
widget::Widget *getConsumed() const { | |||
Widget *getConsumed() const { | |||
return context ? context->consumed : NULL; | |||
} | |||
}; | |||
struct Position { | |||
struct PositionEvent { | |||
/** The pixel coordinate where the event occurred, relative to the Widget it is called on. */ | |||
math::Vec pos; | |||
}; | |||
struct Key { | |||
struct KeyEvent { | |||
/** GLFW_KEY_* */ | |||
int key; | |||
/** GLFW_KEY_*. You should usually use `key` instead. */ | |||
@@ -58,7 +52,7 @@ struct Key { | |||
// Events | |||
struct Text { | |||
struct TextEvent { | |||
/** Unicode code point of the character */ | |||
int codepoint; | |||
}; | |||
@@ -68,7 +62,7 @@ struct Text { | |||
Recurses until consumed. | |||
If `target` is set, other events may occur on that Widget. | |||
*/ | |||
struct Hover : Event, Position { | |||
struct HoverEvent : Event, PositionEvent { | |||
/** Change in mouse position since the last frame. Can be zero. */ | |||
math::Vec mouseDelta; | |||
}; | |||
@@ -78,7 +72,7 @@ struct Hover : Event, Position { | |||
Recurses until consumed. | |||
If `target` is set, other events may occur on that Widget. | |||
*/ | |||
struct Button : Event, Position { | |||
struct ButtonEvent : Event, PositionEvent { | |||
/** GLFW_MOUSE_BUTTON_LEFT, GLFW_MOUSE_BUTTON_RIGHT, GLFW_MOUSE_BUTTON_MIDDLE, etc. */ | |||
int button; | |||
/** GLFW_PRESS or GLFW_RELEASE */ | |||
@@ -90,28 +84,28 @@ struct Button : Event, Position { | |||
/** Occurs when the left mouse button is pressed the second time within a time and position window. | |||
*/ | |||
struct DoubleClick : Event { | |||
struct DoubleClickEvent : Event { | |||
}; | |||
/** Occurs when a key is pressed, released, or repeated while the mouse is hovering a Widget. | |||
Recurses until consumed. | |||
*/ | |||
struct HoverKey : Event, Position, Key { | |||
struct HoverKeyEvent : Event, PositionEvent, KeyEvent { | |||
}; | |||
/** Occurs when a character is typed while the mouse is hovering a Widget. | |||
Recurses until consumed. | |||
*/ | |||
struct HoverText : Event, Position, Text { | |||
struct HoverTextEvent : Event, PositionEvent, TextEvent { | |||
}; | |||
/** Occurs when the mouse scroll wheel is moved while the mouse is hovering a Widget. | |||
Recurses until consumed. | |||
*/ | |||
struct HoverScroll : Event, Position { | |||
struct HoverScrollEvent : Event, PositionEvent { | |||
/** Change of scroll wheel position. */ | |||
math::Vec scrollDelta; | |||
}; | |||
@@ -120,59 +114,59 @@ struct HoverScroll : Event, Position { | |||
/** Occurs when a Widget begins consuming the Hover event. | |||
Must consume to set the widget as hovered. | |||
*/ | |||
struct Enter : Event { | |||
struct EnterEvent : Event { | |||
}; | |||
/** Occurs when a different Widget is entered. | |||
*/ | |||
struct Leave : Event { | |||
struct LeaveEvent : Event { | |||
}; | |||
/** Occurs when a Widget begins consuming the Button press event. | |||
Must consume to set the widget as selected. | |||
*/ | |||
struct Select : Event { | |||
struct SelectEvent : Event { | |||
}; | |||
/** Occurs when a different Widget is selected. | |||
*/ | |||
struct Deselect : Event { | |||
struct DeselectEvent : Event { | |||
}; | |||
/** Occurs when a key is pressed, released, or repeated while a Widget is selected. | |||
If consumed, a HoverKey event will not be triggered. | |||
*/ | |||
struct SelectKey : Event, Key { | |||
struct SelectKeyEvent : Event, KeyEvent { | |||
}; | |||
/** Occurs when text is typed while a Widget is selected. | |||
If consumed, a HoverText event will not be triggered. | |||
*/ | |||
struct SelectText : Event, Text { | |||
struct SelectTextEvent : Event, TextEvent { | |||
}; | |||
/** Occurs when a Widget begins being dragged. | |||
Must consume to set the widget as dragged. | |||
*/ | |||
struct DragStart : Event { | |||
struct DragStartEvent : Event { | |||
}; | |||
/** Occurs when a Widget stops being dragged by releasing the mouse button. | |||
*/ | |||
struct DragEnd : Event { | |||
struct DragEndEvent : Event { | |||
}; | |||
/** Occurs every frame on the dragged Widget. | |||
*/ | |||
struct DragMove : Event { | |||
struct DragMoveEvent : Event { | |||
/** Change in mouse position since the last frame. Can be zero. */ | |||
math::Vec mouseDelta; | |||
}; | |||
@@ -181,9 +175,9 @@ struct DragMove : Event { | |||
/** Occurs every frame when the mouse is hovering over a Widget while another Widget (possibly the same one) is being dragged. | |||
Recurses until consumed. | |||
*/ | |||
struct DragHover : Event, Position { | |||
struct DragHoverEvent : Event, PositionEvent { | |||
/** The dragged widget */ | |||
widget::Widget *origin = NULL; | |||
Widget *origin = NULL; | |||
/** Change in mouse position since the last frame. Can be zero. */ | |||
math::Vec mouseDelta; | |||
}; | |||
@@ -191,33 +185,33 @@ struct DragHover : Event, Position { | |||
/** Occurs when the mouse enters a Widget while dragging. | |||
Must consume to set the widget as drag-hovered. | |||
*/ | |||
struct DragEnter : Event { | |||
struct DragEnterEvent : Event { | |||
/** The dragged widget */ | |||
widget::Widget *origin = NULL; | |||
Widget *origin = NULL; | |||
}; | |||
/** Occurs when the mouse leaves a Widget while dragging. | |||
*/ | |||
struct DragLeave : Event { | |||
struct DragLeaveEvent : Event { | |||
/** The dragged widget */ | |||
widget::Widget *origin = NULL; | |||
Widget *origin = NULL; | |||
}; | |||
/** Occurs when the mouse button is released over a Widget while dragging. | |||
*/ | |||
struct DragDrop : Event { | |||
struct DragDropEvent : Event { | |||
/** The dragged widget */ | |||
widget::Widget *origin = NULL; | |||
Widget *origin = NULL; | |||
}; | |||
/** Occurs when a selection of files from the operating system is dropped onto a Widget. | |||
Recurses until consumed. | |||
*/ | |||
struct PathDrop : Event, Position { | |||
PathDrop(const std::vector<std::string> &paths) : paths(paths) {} | |||
struct PathDropEvent : Event, PositionEvent { | |||
PathDropEvent(const std::vector<std::string> &paths) : paths(paths) {} | |||
/** List of file paths in the dropped selection */ | |||
const std::vector<std::string> &paths; | |||
@@ -227,79 +221,79 @@ struct PathDrop : Event, Position { | |||
/** Occurs after a certain action is triggered on a Widget. | |||
The concept of an "action" is dependent on the type of Widget. | |||
*/ | |||
struct Action : Event { | |||
struct ActionEvent : Event { | |||
}; | |||
/** Occurs after the value of a Widget changes. | |||
The concept of a "value" is dependent on the type of Widget. | |||
*/ | |||
struct Change : Event { | |||
struct ChangeEvent : Event { | |||
}; | |||
/** Occurs after the zoom level of a Widget is changed. | |||
Recurses until consumed. | |||
*/ | |||
struct Zoom : Event { | |||
struct ZoomEvent : Event { | |||
}; | |||
/** Occurs after a Widget's position is set by Widget::setPos(). | |||
*/ | |||
struct Reposition : Event { | |||
struct RepositionEvent : Event { | |||
}; | |||
/** Occurs after a Widget's size is set by Widget::setSize(). | |||
*/ | |||
struct Resize : Event { | |||
struct ResizeEvent : Event { | |||
}; | |||
/** Occurs after a Widget is added to a parent. | |||
*/ | |||
struct Add : Event { | |||
struct AddEvent : Event { | |||
}; | |||
/** Occurs before a Widget is removed from its parent. | |||
*/ | |||
struct Remove : Event { | |||
struct RemoveEvent : Event { | |||
}; | |||
/** Occurs after a Widget is shown with Widget::show(). | |||
*/ | |||
struct Show : Event { | |||
struct ShowEvent : Event { | |||
}; | |||
/** Occurs after a Widget is hidden with Widget::hide(). | |||
*/ | |||
struct Hide : Event { | |||
struct HideEvent : Event { | |||
}; | |||
struct State { | |||
widget::Widget *rootWidget = NULL; | |||
struct EventState { | |||
Widget *rootWidget = NULL; | |||
/** State widgets | |||
Don't set these directly unless you know what you're doing. Use the set*() methods instead. | |||
*/ | |||
widget::Widget *hoveredWidget = NULL; | |||
widget::Widget *draggedWidget = NULL; | |||
widget::Widget *dragHoveredWidget = NULL; | |||
widget::Widget *selectedWidget = NULL; | |||
Widget *hoveredWidget = NULL; | |||
Widget *draggedWidget = NULL; | |||
Widget *dragHoveredWidget = NULL; | |||
Widget *selectedWidget = NULL; | |||
/** For double-clicking */ | |||
double lastClickTime = -INFINITY; | |||
widget::Widget *lastClickedWidget = NULL; | |||
Widget *lastClickedWidget = NULL; | |||
void setHovered(widget::Widget *w); | |||
void setDragged(widget::Widget *w); | |||
void setDragHovered(widget::Widget *w); | |||
void setSelected(widget::Widget *w); | |||
void setHovered(Widget *w); | |||
void setDragged(Widget *w); | |||
void setDragHovered(Widget *w); | |||
void setSelected(Widget *w); | |||
/** Prepares a widget for deletion */ | |||
void finalizeWidget(widget::Widget *w); | |||
void finalizeWidget(Widget *w); | |||
void handleButton(math::Vec pos, int button, int action, int mods); | |||
void handleHover(math::Vec pos, math::Vec mouseDelta); | |||
@@ -312,5 +306,5 @@ struct State { | |||
}; | |||
} // namespace event | |||
} // namespace widget | |||
} // namespace rack |
@@ -36,20 +36,20 @@ struct ModuleResizeHandle : Widget { | |||
box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT); | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const widget::ButtonEvent &e) override { | |||
if (e.button == GLFW_MOUSE_BUTTON_LEFT) { | |||
e.consume(this); | |||
} | |||
} | |||
void onDragStart(const event::DragStart &e) override { | |||
void onDragStart(const widget::DragStartEvent &e) override { | |||
dragX = APP->scene->rackWidget->mousePos.x; | |||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | |||
originalBox = m->box; | |||
e.consume(this); | |||
} | |||
void onDragMove(const event::DragMove &e) override { | |||
void onDragMove(const widget::DragMoveEvent &e) override { | |||
ModuleWidget *m = getAncestorOfType<ModuleWidget>(); | |||
float newDragX = APP->scene->rackWidget->mousePos.x; | |||
@@ -145,7 +145,7 @@ struct CV_Gate : Module { | |||
struct CV_GateVelocityItem : MenuItem { | |||
CV_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
@@ -153,7 +153,7 @@ struct CV_GateVelocityItem : MenuItem { | |||
struct CV_GatePanicItem : MenuItem { | |||
CV_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->midiOutput.panic(); | |||
} | |||
}; | |||
@@ -319,7 +319,7 @@ struct CV_MIDI : Module { | |||
struct CV_MIDIPanicItem : MenuItem { | |||
CV_MIDI *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->midiOutput.panic(); | |||
} | |||
}; | |||
@@ -419,7 +419,7 @@ struct MIDI_CV : Module { | |||
struct ClockDivisionValueItem : MenuItem { | |||
MIDI_CV *module; | |||
int clockDivision; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->clockDivision = clockDivision; | |||
} | |||
}; | |||
@@ -447,7 +447,7 @@ struct ClockDivisionItem : MenuItem { | |||
struct ChannelValueItem : MenuItem { | |||
MIDI_CV *module; | |||
int channels; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->setChannels(channels); | |||
} | |||
}; | |||
@@ -476,7 +476,7 @@ struct ChannelItem : MenuItem { | |||
struct PolyModeValueItem : MenuItem { | |||
MIDI_CV *module; | |||
MIDI_CV::PolyMode polyMode; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->setPolyMode(polyMode); | |||
} | |||
}; | |||
@@ -508,7 +508,7 @@ struct PolyModeItem : MenuItem { | |||
struct MIDI_CVPanicItem : MenuItem { | |||
MIDI_CV *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->panic(); | |||
} | |||
}; | |||
@@ -151,7 +151,7 @@ struct MIDI_Gate : Module { | |||
struct MIDI_GateVelocityItem : MenuItem { | |||
MIDI_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->velocityMode ^= true; | |||
} | |||
}; | |||
@@ -159,7 +159,7 @@ struct MIDI_GateVelocityItem : MenuItem { | |||
struct MIDI_GatePanicItem : MenuItem { | |||
MIDI_Gate *module; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
module->panic(); | |||
} | |||
}; | |||
@@ -245,7 +245,7 @@ struct MIDI_MapChoice : LedDisplayChoice { | |||
this->module = module; | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const widget::ButtonEvent &e) override { | |||
if (!module) | |||
return; | |||
@@ -259,7 +259,7 @@ struct MIDI_MapChoice : LedDisplayChoice { | |||
} | |||
} | |||
void onSelect(const event::Select &e) override { | |||
void onSelect(const widget::SelectEvent &e) override { | |||
if (!module) | |||
return; | |||
@@ -272,7 +272,7 @@ struct MIDI_MapChoice : LedDisplayChoice { | |||
e.consume(this); | |||
} | |||
void onDeselect(const event::Deselect &e) override { | |||
void onDeselect(const widget::DeselectEvent &e) override { | |||
if (!module) | |||
return; | |||
// Check if a ParamWidget was touched | |||
@@ -93,7 +93,7 @@ struct CcChoice : LedDisplayChoice { | |||
} | |||
} | |||
void onSelect(const event::Select &e) override { | |||
void onSelect(const widget::SelectEvent &e) override { | |||
if (!module) | |||
return; | |||
module->learningId = id; | |||
@@ -101,7 +101,7 @@ struct CcChoice : LedDisplayChoice { | |||
e.consume(this); | |||
} | |||
void onDeselect(const event::Deselect &e) override { | |||
void onDeselect(const widget::DeselectEvent &e) override { | |||
if (!module) | |||
return; | |||
if (module->learningId == id) { | |||
@@ -112,7 +112,7 @@ struct CcChoice : LedDisplayChoice { | |||
} | |||
} | |||
void onSelectText(const event::SelectText &e) override { | |||
void onSelectText(const widget::SelectTextEvent &e) override { | |||
int c = e.codepoint - '0'; | |||
if (0 <= c && c <= 9) { | |||
if (focusCc < 0) | |||
@@ -124,9 +124,9 @@ struct CcChoice : LedDisplayChoice { | |||
e.consume(this); | |||
} | |||
void onSelectKey(const event::SelectKey &e) override { | |||
void onSelectKey(const widget::SelectKeyEvent &e) override { | |||
if ((e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER) && e.action == GLFW_PRESS && (e.mods & WINDOW_MOD_MASK) == 0) { | |||
event::Deselect eDeselect; | |||
widget::DeselectEvent eDeselect; | |||
onDeselect(eDeselect); | |||
APP->event->selectedWidget = NULL; | |||
e.consume(this); | |||
@@ -177,14 +177,14 @@ struct NoteChoice : LedDisplayChoice { | |||
} | |||
} | |||
void onSelect(const event::Select &e) override { | |||
void onSelect(const widget::SelectEvent &e) override { | |||
if (!module) | |||
return; | |||
module->learningId = id; | |||
e.consume(this); | |||
} | |||
void onDeselect(const event::Deselect &e) override { | |||
void onDeselect(const widget::DeselectEvent &e) override { | |||
if (!module) | |||
return; | |||
if (module->learningId == id) { | |||
@@ -1,5 +1,5 @@ | |||
#include "app.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "window.hpp" | |||
#include "patch.hpp" | |||
#include "engine/Engine.hpp" | |||
@@ -13,7 +13,7 @@ namespace rack { | |||
void App::init(bool headless) { | |||
engine = new engine::Engine; | |||
if (!headless) { | |||
event = new event::State; | |||
event = new widget::EventState; | |||
history = new history::State; | |||
window = new Window; | |||
patch = new PatchManager; | |||
@@ -10,14 +10,14 @@ namespace app { | |||
struct AudioDriverItem : ui::MenuItem { | |||
audio::Port *port; | |||
int driver; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setDriver(driver); | |||
} | |||
}; | |||
struct AudioDriverChoice : LedDisplayChoice { | |||
audio::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -45,7 +45,7 @@ struct AudioDeviceItem : ui::MenuItem { | |||
audio::Port *port; | |||
int device; | |||
int offset; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setDevice(device, offset); | |||
} | |||
}; | |||
@@ -55,7 +55,7 @@ struct AudioDeviceChoice : LedDisplayChoice { | |||
/** Prevents devices with a ridiculous number of channels from being displayed */ | |||
int maxTotalChannels = 128; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -103,14 +103,14 @@ struct AudioDeviceChoice : LedDisplayChoice { | |||
struct AudioSampleRateItem : ui::MenuItem { | |||
audio::Port *port; | |||
int sampleRate; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setSampleRate(sampleRate); | |||
} | |||
}; | |||
struct AudioSampleRateChoice : LedDisplayChoice { | |||
audio::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -141,14 +141,14 @@ struct AudioSampleRateChoice : LedDisplayChoice { | |||
struct AudioBlockSizeItem : ui::MenuItem { | |||
audio::Port *port; | |||
int blockSize; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setBlockSize(blockSize); | |||
} | |||
}; | |||
struct AudioBlockSizeChoice : LedDisplayChoice { | |||
audio::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -1,7 +1,7 @@ | |||
#include "app/CableWidget.hpp" | |||
#include "app/Scene.hpp" | |||
#include "window.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "app.hpp" | |||
#include "patch.hpp" | |||
#include "settings.hpp" | |||
@@ -11,7 +11,7 @@ namespace app { | |||
static const float KNOB_SENSITIVITY = 0.0015f; | |||
void Knob::onHover(const event::Hover &e) { | |||
void Knob::onHover(const widget::HoverEvent &e) { | |||
math::Vec c = box.size.div(2); | |||
float dist = e.pos.minus(c).norm(); | |||
if (dist <= c.x) { | |||
@@ -19,7 +19,7 @@ void Knob::onHover(const event::Hover &e) { | |||
} | |||
} | |||
void Knob::onButton(const event::Button &e) { | |||
void Knob::onButton(const widget::ButtonEvent &e) { | |||
math::Vec c = box.size.div(2); | |||
float dist = e.pos.minus(c).norm(); | |||
if (dist <= c.x) { | |||
@@ -27,7 +27,7 @@ void Knob::onButton(const event::Button &e) { | |||
} | |||
} | |||
void Knob::onDragStart(const event::DragStart &e) { | |||
void Knob::onDragStart(const widget::DragStartEvent &e) { | |||
if (paramQuantity) { | |||
oldValue = paramQuantity->getSmoothValue(); | |||
if (snap) { | |||
@@ -39,7 +39,7 @@ void Knob::onDragStart(const event::DragStart &e) { | |||
e.consume(this); | |||
} | |||
void Knob::onDragEnd(const event::DragEnd &e) { | |||
void Knob::onDragEnd(const widget::DragEndEvent &e) { | |||
APP->window->cursorUnlock(); | |||
if (paramQuantity) { | |||
@@ -57,7 +57,7 @@ void Knob::onDragEnd(const event::DragEnd &e) { | |||
} | |||
} | |||
void Knob::onDragMove(const event::DragMove &e) { | |||
void Knob::onDragMove(const widget::DragMoveEvent &e) { | |||
if (paramQuantity) { | |||
float range; | |||
if (paramQuantity->isBounded()) { | |||
@@ -1,7 +1,7 @@ | |||
#include "app/LedDisplay.hpp" | |||
#include "asset.hpp" | |||
#include "window.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "app.hpp" | |||
@@ -62,9 +62,9 @@ void LedDisplayChoice::draw(const DrawArgs &args) { | |||
} | |||
} | |||
void LedDisplayChoice::onButton(const event::Button &e) { | |||
void LedDisplayChoice::onButton(const widget::ButtonEvent &e) { | |||
if (e.action == GLFW_PRESS && (e.button == GLFW_MOUSE_BUTTON_LEFT || e.button == GLFW_MOUSE_BUTTON_RIGHT)) { | |||
event::Action eAction; | |||
widget::ActionEvent eAction; | |||
onAction(eAction); | |||
e.consume(this); | |||
} | |||
@@ -10,14 +10,14 @@ namespace app { | |||
struct MidiDriverItem : ui::MenuItem { | |||
midi::Port *port; | |||
int driverId; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setDriverId(driverId); | |||
} | |||
}; | |||
struct MidiDriverChoice : LedDisplayChoice { | |||
midi::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -51,14 +51,14 @@ struct MidiDriverChoice : LedDisplayChoice { | |||
struct MidiDeviceItem : ui::MenuItem { | |||
midi::Port *port; | |||
int deviceId; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->setDeviceId(deviceId); | |||
} | |||
}; | |||
struct MidiDeviceChoice : LedDisplayChoice { | |||
midi::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -100,14 +100,14 @@ struct MidiDeviceChoice : LedDisplayChoice { | |||
struct MidiChannelItem : ui::MenuItem { | |||
midi::Port *port; | |||
int channel; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
port->channel = channel; | |||
} | |||
}; | |||
struct MidiChannelChoice : LedDisplayChoice { | |||
midi::Port *port; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
if (!port) | |||
return; | |||
@@ -61,7 +61,7 @@ struct BrowserOverlay : widget::OpaqueWidget { | |||
OpaqueWidget::step(); | |||
} | |||
void onButton(const event::Button &e) override { | |||
void onButton(const widget::ButtonEvent &e) override { | |||
OpaqueWidget::onButton(e); | |||
if (e.getConsumed() != this) | |||
return; | |||
@@ -218,14 +218,14 @@ struct ModelBox : widget::OpaqueWidget { | |||
nvgResetScissor(args.vg); | |||
} | |||
void onButton(const event::Button &e) override; | |||
void onButton(const widget::ButtonEvent &e) override; | |||
void onEnter(const event::Enter &e) override { | |||
void onEnter(const widget::EnterEvent &e) override { | |||
e.consume(this); | |||
selected = true; | |||
} | |||
void onLeave(const event::Leave &e) override { | |||
void onLeave(const widget::LeaveEvent &e) override { | |||
selected = false; | |||
} | |||
}; | |||
@@ -238,7 +238,7 @@ struct BrowserSearchField : ui::TextField { | |||
TextField::step(); | |||
} | |||
void onSelectKey(const event::SelectKey &e) override { | |||
void onSelectKey(const widget::SelectKeyEvent &e) override { | |||
if (e.action == GLFW_PRESS) { | |||
if (e.key == GLFW_KEY_ESCAPE) { | |||
BrowserOverlay *overlay = getAncestorOfType<BrowserOverlay>(); | |||
@@ -251,14 +251,14 @@ struct BrowserSearchField : ui::TextField { | |||
ui::TextField::onSelectKey(e); | |||
} | |||
void onChange(const event::Change &e) override; | |||
void onChange(const widget::ChangeEvent &e) override; | |||
void onHide(const event::Hide &e) override { | |||
void onHide(const widget::HideEvent &e) override { | |||
APP->event->setSelected(NULL); | |||
ui::TextField::onHide(e); | |||
} | |||
void onShow(const event::Show &e) override { | |||
void onShow(const widget::ShowEvent &e) override { | |||
selectAll(); | |||
TextField::onShow(e); | |||
} | |||
@@ -415,7 +415,7 @@ struct ModuleBrowser : widget::OpaqueWidget { | |||
// Implementations to resolve dependencies | |||
inline void ModelBox::onButton(const event::Button &e) { | |||
inline void ModelBox::onButton(const widget::ButtonEvent &e) { | |||
OpaqueWidget::onButton(e); | |||
if (e.getConsumed() != this) | |||
return; | |||
@@ -441,7 +441,7 @@ inline void ModelBox::onButton(const event::Button &e) { | |||
} | |||
} | |||
inline void BrowserSearchField::onChange(const event::Change &e) { | |||
inline void BrowserSearchField::onChange(const widget::ChangeEvent &e) { | |||
ModuleBrowser *browser = getAncestorOfType<ModuleBrowser>(); | |||
browser->setSearch(text); | |||
} | |||
@@ -23,7 +23,7 @@ static const char PRESET_FILTERS[] = "VCV Rack module preset (.vcvm):vcvm"; | |||
struct ModuleUrlItem : ui::MenuItem { | |||
std::string url; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t(system::openBrowser, url); | |||
t.detach(); | |||
} | |||
@@ -32,7 +32,7 @@ struct ModuleUrlItem : ui::MenuItem { | |||
struct ModuleFolderItem : ui::MenuItem { | |||
std::string path; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t(system::openFolder, path); | |||
t.detach(); | |||
} | |||
@@ -104,7 +104,7 @@ struct ModulePluginItem : ui::MenuItem { | |||
struct ModuleDisconnectItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->disconnectAction(); | |||
} | |||
}; | |||
@@ -112,7 +112,7 @@ struct ModuleDisconnectItem : ui::MenuItem { | |||
struct ModuleResetItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->resetAction(); | |||
} | |||
}; | |||
@@ -120,7 +120,7 @@ struct ModuleResetItem : ui::MenuItem { | |||
struct ModuleRandomizeItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->randomizeAction(); | |||
} | |||
}; | |||
@@ -128,7 +128,7 @@ struct ModuleRandomizeItem : ui::MenuItem { | |||
struct ModuleCopyItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->copyClipboard(); | |||
} | |||
}; | |||
@@ -136,7 +136,7 @@ struct ModuleCopyItem : ui::MenuItem { | |||
struct ModulePasteItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->pasteClipboardAction(); | |||
} | |||
}; | |||
@@ -144,7 +144,7 @@ struct ModulePasteItem : ui::MenuItem { | |||
struct ModuleSaveItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->saveDialog(); | |||
} | |||
}; | |||
@@ -152,7 +152,7 @@ struct ModuleSaveItem : ui::MenuItem { | |||
struct ModuleLoadItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->loadDialog(); | |||
} | |||
}; | |||
@@ -161,7 +161,7 @@ struct ModuleLoadItem : ui::MenuItem { | |||
struct ModulePresetItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
std::string presetPath; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->loadAction(presetPath); | |||
} | |||
}; | |||
@@ -188,7 +188,7 @@ struct ModuleListPresetsItem : ui::MenuItem { | |||
struct ModuleCloneItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->cloneAction(); | |||
} | |||
}; | |||
@@ -196,7 +196,7 @@ struct ModuleCloneItem : ui::MenuItem { | |||
struct ModuleBypassItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->bypassAction(); | |||
} | |||
}; | |||
@@ -204,7 +204,7 @@ struct ModuleBypassItem : ui::MenuItem { | |||
struct ModuleDeleteItem : ui::MenuItem { | |||
ModuleWidget *moduleWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
moduleWidget->removeAction(); | |||
} | |||
}; | |||
@@ -273,7 +273,7 @@ void ModuleWidget::drawShadow(const DrawArgs &args) { | |||
nvgFill(args.vg); | |||
} | |||
void ModuleWidget::onHover(const event::Hover &e) { | |||
void ModuleWidget::onHover(const widget::HoverEvent &e) { | |||
widget::OpaqueWidget::onHover(e); | |||
if (!APP->event->selectedWidget) { | |||
@@ -288,7 +288,7 @@ void ModuleWidget::onHover(const event::Hover &e) { | |||
} | |||
} | |||
void ModuleWidget::onButton(const event::Button &e) { | |||
void ModuleWidget::onButton(const widget::ButtonEvent &e) { | |||
widget::OpaqueWidget::onButton(e); | |||
if (e.getConsumed() == this) { | |||
@@ -298,7 +298,7 @@ void ModuleWidget::onButton(const event::Button &e) { | |||
} | |||
} | |||
void ModuleWidget::onHoverKey(const event::HoverKey &e) { | |||
void ModuleWidget::onHoverKey(const widget::HoverKeyEvent &e) { | |||
if (e.action == GLFW_PRESS || e.action == GLFW_REPEAT) { | |||
switch (e.key) { | |||
case GLFW_KEY_I: { | |||
@@ -350,13 +350,13 @@ void ModuleWidget::onHoverKey(const event::HoverKey &e) { | |||
widget::OpaqueWidget::onHoverKey(e); | |||
} | |||
void ModuleWidget::onDragStart(const event::DragStart &e) { | |||
void ModuleWidget::onDragStart(const widget::DragStartEvent &e) { | |||
oldPos = box.pos; | |||
dragPos = APP->scene->rackWidget->mousePos.minus(box.pos); | |||
e.consume(this); | |||
} | |||
void ModuleWidget::onDragEnd(const event::DragEnd &e) { | |||
void ModuleWidget::onDragEnd(const widget::DragEndEvent &e) { | |||
if (!box.pos.isEqual(oldPos)) { | |||
// history::ModuleMove | |||
history::ModuleMove *h = new history::ModuleMove; | |||
@@ -367,7 +367,7 @@ void ModuleWidget::onDragEnd(const event::DragEnd &e) { | |||
} | |||
} | |||
void ModuleWidget::onDragMove(const event::DragMove &e) { | |||
void ModuleWidget::onDragMove(const widget::DragMoveEvent &e) { | |||
if (!settings.lockModules) { | |||
math::Rect newBox = box; | |||
newBox.pos = APP->scene->rackWidget->mousePos.minus(dragPos); | |||
@@ -31,7 +31,7 @@ struct ParamField : ui::TextField { | |||
selectAll(); | |||
} | |||
void onSelectKey(const event::SelectKey &e) override { | |||
void onSelectKey(const widget::SelectKeyEvent &e) override { | |||
if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { | |||
float oldValue = paramWidget->paramQuantity->getValue(); | |||
if (paramWidget->paramQuantity) | |||
@@ -89,7 +89,7 @@ struct ParamLabel : ui::MenuLabel { | |||
struct ParamResetItem : ui::MenuItem { | |||
ParamWidget *paramWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
paramWidget->resetAction(); | |||
} | |||
}; | |||
@@ -101,7 +101,7 @@ struct ParamFineItem : ui::MenuItem { | |||
struct ParamUnmapItem : ui::MenuItem { | |||
ParamWidget *paramWidget; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
engine::ParamHandle *paramHandle = APP->engine->getParamHandle(paramWidget->paramQuantity->module, paramWidget->paramQuantity->paramId); | |||
if (paramHandle) { | |||
APP->engine->updateParamHandle(paramHandle, -1, 0); | |||
@@ -121,7 +121,7 @@ void ParamWidget::step() { | |||
// Trigger change event when paramQuantity value changes | |||
if (value != dirtyValue) { | |||
dirtyValue = value; | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
} | |||
} | |||
@@ -146,7 +146,7 @@ void ParamWidget::draw(const DrawArgs &args) { | |||
} | |||
} | |||
void ParamWidget::onButton(const event::Button &e) { | |||
void ParamWidget::onButton(const widget::ButtonEvent &e) { | |||
// Touch parameter | |||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_LEFT && (e.mods & WINDOW_MOD_MASK) == 0) { | |||
if (paramQuantity) { | |||
@@ -164,11 +164,11 @@ void ParamWidget::onButton(const event::Button &e) { | |||
OpaqueWidget::onButton(e); | |||
} | |||
void ParamWidget::onDoubleClick(const event::DoubleClick &e) { | |||
void ParamWidget::onDoubleClick(const widget::DoubleClickEvent &e) { | |||
resetAction(); | |||
} | |||
void ParamWidget::onEnter(const event::Enter &e) { | |||
void ParamWidget::onEnter(const widget::EnterEvent &e) { | |||
if (settings.paramTooltip && !tooltip && paramQuantity) { | |||
ParamTooltip *paramTooltip = new ParamTooltip; | |||
paramTooltip->paramWidget = this; | |||
@@ -178,7 +178,7 @@ void ParamWidget::onEnter(const event::Enter &e) { | |||
} | |||
} | |||
void ParamWidget::onLeave(const event::Leave &e) { | |||
void ParamWidget::onLeave(const widget::LeaveEvent &e) { | |||
if (tooltip) { | |||
APP->scene->removeChild(tooltip); | |||
delete tooltip; | |||
@@ -59,7 +59,7 @@ void PortWidget::draw(const DrawArgs &args) { | |||
Widget::draw(args); | |||
} | |||
void PortWidget::onButton(const event::Button &e) { | |||
void PortWidget::onButton(const widget::ButtonEvent &e) { | |||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_RIGHT) { | |||
CableWidget *cw = APP->scene->rackWidget->getTopCable(this); | |||
if (cw) { | |||
@@ -75,16 +75,16 @@ void PortWidget::onButton(const event::Button &e) { | |||
e.consume(this); | |||
} | |||
void PortWidget::onEnter(const event::Enter &e) { | |||
void PortWidget::onEnter(const widget::EnterEvent &e) { | |||
hovered = true; | |||
e.consume(this); | |||
} | |||
void PortWidget::onLeave(const event::Leave &e) { | |||
void PortWidget::onLeave(const widget::LeaveEvent &e) { | |||
hovered = false; | |||
} | |||
void PortWidget::onDragStart(const event::DragStart &e) { | |||
void PortWidget::onDragStart(const widget::DragStartEvent &e) { | |||
CableWidget *cw = NULL; | |||
if ((APP->window->getMods() & WINDOW_MOD_MASK) == WINDOW_MOD_CTRL) { | |||
if (type == OUTPUT) { | |||
@@ -130,7 +130,7 @@ void PortWidget::onDragStart(const event::DragStart &e) { | |||
e.consume(this); | |||
} | |||
void PortWidget::onDragEnd(const event::DragEnd &e) { | |||
void PortWidget::onDragEnd(const widget::DragEndEvent &e) { | |||
CableWidget *cw = APP->scene->rackWidget->releaseIncompleteCable(); | |||
if (cw->isComplete()) { | |||
APP->scene->rackWidget->addCable(cw); | |||
@@ -145,7 +145,7 @@ void PortWidget::onDragEnd(const event::DragEnd &e) { | |||
} | |||
} | |||
void PortWidget::onDragDrop(const event::DragDrop &e) { | |||
void PortWidget::onDragDrop(const widget::DragDropEvent &e) { | |||
// Reject ports if this is an input port and something is already plugged into it | |||
if (type == INPUT) { | |||
if (APP->scene->rackWidget->getTopCable(this)) | |||
@@ -162,7 +162,7 @@ void PortWidget::onDragDrop(const event::DragDrop &e) { | |||
} | |||
} | |||
void PortWidget::onDragEnter(const event::DragEnter &e) { | |||
void PortWidget::onDragEnter(const widget::DragEnterEvent &e) { | |||
// Reject ports if this is an input port and something is already plugged into it | |||
if (type == INPUT) { | |||
if (APP->scene->rackWidget->getTopCable(this)) | |||
@@ -179,7 +179,7 @@ void PortWidget::onDragEnter(const event::DragEnter &e) { | |||
e.consume(this); | |||
} | |||
void PortWidget::onDragLeave(const event::DragLeave &e) { | |||
void PortWidget::onDragLeave(const widget::DragLeaveEvent &e) { | |||
PortWidget *originPort = dynamic_cast<PortWidget*>(e.origin); | |||
if (!originPort) | |||
return; | |||
@@ -121,7 +121,7 @@ void RackWidget::draw(const DrawArgs &args) { | |||
Widget::draw(args); | |||
} | |||
void RackWidget::onHover(const event::Hover &e) { | |||
void RackWidget::onHover(const widget::HoverEvent &e) { | |||
if (!APP->event->selectedWidget) { | |||
// Scroll with arrow keys | |||
float arrowSpeed = 30.0; | |||
@@ -151,7 +151,7 @@ void RackWidget::onHover(const event::Hover &e) { | |||
mousePos = e.pos; | |||
} | |||
void RackWidget::onHoverKey(const event::HoverKey &e) { | |||
void RackWidget::onHoverKey(const widget::HoverKeyEvent &e) { | |||
widget::OpaqueWidget::onHoverKey(e); | |||
if (e.getConsumed() != this) | |||
return; | |||
@@ -167,12 +167,12 @@ void RackWidget::onHoverKey(const event::HoverKey &e) { | |||
} | |||
} | |||
void RackWidget::onDragHover(const event::DragHover &e) { | |||
void RackWidget::onDragHover(const widget::DragHoverEvent &e) { | |||
widget::OpaqueWidget::onDragHover(e); | |||
mousePos = e.pos; | |||
} | |||
void RackWidget::onButton(const event::Button &e) { | |||
void RackWidget::onButton(const widget::ButtonEvent &e) { | |||
widget::OpaqueWidget::onButton(e); | |||
if (e.getConsumed() == this) { | |||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_RIGHT) { | |||
@@ -181,7 +181,7 @@ void RackWidget::onButton(const event::Button &e) { | |||
} | |||
} | |||
void RackWidget::onZoom(const event::Zoom &e) { | |||
void RackWidget::onZoom(const widget::ZoomEvent &e) { | |||
rails->box.size = math::Vec(); | |||
widget::OpaqueWidget::onZoom(e); | |||
} | |||
@@ -91,7 +91,7 @@ void Scene::draw(const DrawArgs &args) { | |||
OpaqueWidget::draw(args); | |||
} | |||
void Scene::onHoverKey(const event::HoverKey &e) { | |||
void Scene::onHoverKey(const widget::HoverKeyEvent &e) { | |||
if (e.action == GLFW_PRESS || e.action == GLFW_REPEAT) { | |||
switch (e.key) { | |||
case GLFW_KEY_N: { | |||
@@ -152,7 +152,7 @@ void Scene::onHoverKey(const event::HoverKey &e) { | |||
OpaqueWidget::onHoverKey(e); | |||
} | |||
void Scene::onPathDrop(const event::PathDrop &e) { | |||
void Scene::onPathDrop(const widget::PathDropEvent &e) { | |||
if (e.paths.size() >= 1) { | |||
const std::string &path = e.paths[0]; | |||
if (string::extension(path) == "vcv") { | |||
@@ -23,7 +23,7 @@ void SvgButton::addFrame(std::shared_ptr<Svg> svg) { | |||
} | |||
} | |||
void SvgButton::onDragStart(const event::DragStart &e) { | |||
void SvgButton::onDragStart(const widget::DragStartEvent &e) { | |||
if (frames.size() >= 2) { | |||
sw->setSvg(frames[1]); | |||
fb->dirty = true; | |||
@@ -31,16 +31,16 @@ void SvgButton::onDragStart(const event::DragStart &e) { | |||
e.consume(this); | |||
} | |||
void SvgButton::onDragEnd(const event::DragEnd &e) { | |||
void SvgButton::onDragEnd(const widget::DragEndEvent &e) { | |||
if (frames.size() >= 1) { | |||
sw->setSvg(frames[0]); | |||
fb->dirty = true; | |||
} | |||
} | |||
void SvgButton::onDragDrop(const event::DragDrop &e) { | |||
void SvgButton::onDragDrop(const widget::DragDropEvent &e) { | |||
if (e.origin == this) { | |||
event::Action eAction; | |||
widget::ActionEvent eAction; | |||
onAction(eAction); | |||
} | |||
} | |||
@@ -31,7 +31,7 @@ void SvgKnob::setSvg(std::shared_ptr<Svg> svg) { | |||
// shadow->box = shadow->box.grow(math::Vec(2, 2)); | |||
} | |||
void SvgKnob::onChange(const event::Change &e) { | |||
void SvgKnob::onChange(const widget::ChangeEvent &e) { | |||
// Re-transform the widget::TransformWidget | |||
if (paramQuantity) { | |||
float angle; | |||
@@ -30,7 +30,7 @@ void SvgSlider::setHandleSvg(std::shared_ptr<Svg> svg) { | |||
fb->dirty = true; | |||
} | |||
void SvgSlider::onChange(const event::Change &e) { | |||
void SvgSlider::onChange(const widget::ChangeEvent &e) { | |||
if (paramQuantity) { | |||
// Interpolate handle position | |||
float v = paramQuantity->getScaledValue(); | |||
@@ -23,7 +23,7 @@ void SvgSwitch::addFrame(std::shared_ptr<Svg> svg) { | |||
} | |||
} | |||
void SvgSwitch::onChange(const event::Change &e) { | |||
void SvgSwitch::onChange(const widget::ChangeEvent &e) { | |||
if (!frames.empty() && paramQuantity) { | |||
int index = (int) std::round(paramQuantity->getValue()); | |||
index = math::clamp(index, 0, (int) frames.size() - 1); | |||
@@ -23,11 +23,11 @@ void Switch::step() { | |||
ParamWidget::step(); | |||
} | |||
void Switch::onDoubleClick(const event::DoubleClick &e) { | |||
void Switch::onDoubleClick(const widget::DoubleClickEvent &e) { | |||
// Don't reset parameter on double-click | |||
} | |||
void Switch::onDragStart(const event::DragStart &e) { | |||
void Switch::onDragStart(const widget::DragStartEvent &e) { | |||
if (momentary) { | |||
if (paramQuantity) { | |||
// Set to maximum value | |||
@@ -63,7 +63,7 @@ void Switch::onDragStart(const event::DragStart &e) { | |||
e.consume(this); | |||
} | |||
void Switch::onDragEnd(const event::DragEnd &e) { | |||
void Switch::onDragEnd(const widget::DragEndEvent &e) { | |||
if (momentary) { | |||
momentaryReleased = true; | |||
} | |||
@@ -34,63 +34,63 @@ struct MenuButton : ui::Button { | |||
struct NewItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->resetDialog(); | |||
} | |||
}; | |||
struct OpenItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->loadDialog(); | |||
} | |||
}; | |||
struct SaveItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->saveDialog(); | |||
} | |||
}; | |||
struct SaveAsItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->saveAsDialog(); | |||
} | |||
}; | |||
struct SaveTemplateItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->saveTemplateDialog(); | |||
} | |||
}; | |||
struct RevertItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->revertDialog(); | |||
} | |||
}; | |||
struct DisconnectCablesItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->patch->disconnectDialog(); | |||
} | |||
}; | |||
struct QuitItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->window->close(); | |||
} | |||
}; | |||
struct FileButton : MenuButton { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
ui::Menu *menu = createMenu(); | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
@@ -136,21 +136,21 @@ struct FileButton : MenuButton { | |||
struct UndoItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->history->undo(); | |||
} | |||
}; | |||
struct RedoItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->history->redo(); | |||
} | |||
}; | |||
struct EditButton : MenuButton { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
ui::Menu *menu = createMenu(); | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
@@ -217,28 +217,28 @@ struct CableTensionQuantity : ui::Quantity { | |||
struct CpuMeterItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
settings.cpuMeter ^= true; | |||
} | |||
}; | |||
struct ParamTooltipItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
settings.paramTooltip ^= true; | |||
} | |||
}; | |||
struct LockModulesItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
settings.lockModules ^= true; | |||
} | |||
}; | |||
struct EnginePauseItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->engine->setPaused(!APP->engine->isPaused()); | |||
} | |||
}; | |||
@@ -246,7 +246,7 @@ struct EnginePauseItem : ui::MenuItem { | |||
struct SampleRateValueItem : ui::MenuItem { | |||
float sampleRate; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->engine->setSampleRate(sampleRate); | |||
APP->engine->setPaused(false); | |||
} | |||
@@ -293,7 +293,7 @@ struct ThreadCountValueItem : ui::MenuItem { | |||
text += " (lowest CPU usage)"; | |||
rightText = CHECKMARK(APP->engine->getThreadCount() == threadCount); | |||
} | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->engine->setThreadCount(threadCount); | |||
} | |||
}; | |||
@@ -315,14 +315,14 @@ struct ThreadCount : ui::MenuItem { | |||
struct FullscreenItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
APP->window->setFullScreen(!APP->window->isFullScreen()); | |||
} | |||
}; | |||
struct SettingsButton : MenuButton { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
ui::Menu *menu = createMenu(); | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
@@ -378,7 +378,7 @@ struct SettingsButton : MenuButton { | |||
struct RegisterItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t([&]() { | |||
system::openBrowser("https://vcvrack.com/"); | |||
}); | |||
@@ -389,7 +389,7 @@ struct RegisterItem : ui::MenuItem { | |||
struct AccountEmailField : ui::TextField { | |||
ui::TextField *passwordField; | |||
void onSelectKey(const event::SelectKey &e) override { | |||
void onSelectKey(const widget::SelectKeyEvent &e) override { | |||
if (e.action == GLFW_PRESS && e.key == GLFW_KEY_TAB) { | |||
APP->event->selectedWidget = passwordField; | |||
e.consume(this); | |||
@@ -403,7 +403,7 @@ struct AccountEmailField : ui::TextField { | |||
struct AccountPasswordField : ui::PasswordField { | |||
ui::MenuItem *logInItem; | |||
void onSelectKey(const event::SelectKey &e) override { | |||
void onSelectKey(const widget::SelectKeyEvent &e) override { | |||
if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { | |||
logInItem->doAction(); | |||
e.consume(this); | |||
@@ -418,7 +418,7 @@ struct AccountPasswordField : ui::PasswordField { | |||
struct LogInItem : ui::MenuItem { | |||
ui::TextField *emailField; | |||
ui::TextField *passwordField; | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::string email = emailField->text; | |||
std::string password = passwordField->text; | |||
std::thread t([&, email, password]() { | |||
@@ -432,7 +432,7 @@ struct LogInItem : ui::MenuItem { | |||
struct ManageItem : ui::MenuItem { | |||
ManageItem() { | |||
} | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t([&]() { | |||
system::openBrowser("https://vcvrack.com/plugins.html"); | |||
}); | |||
@@ -442,7 +442,7 @@ struct ManageItem : ui::MenuItem { | |||
struct SyncItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
} | |||
}; | |||
@@ -472,7 +472,7 @@ struct SyncItem : ui::MenuItem { | |||
// completed = false; | |||
// } | |||
// } | |||
// void onAction(const event::Action &e) override { | |||
// void onAction(const widget::ActionEvent &e) override { | |||
// available = false; | |||
// std::thread t([this]() { | |||
// if (plugin::sync(false)) | |||
@@ -484,7 +484,7 @@ struct SyncItem : ui::MenuItem { | |||
struct LogOutItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
plugin::logOut(); | |||
} | |||
}; | |||
@@ -510,7 +510,7 @@ struct DownloadQuantity : ui::Quantity { | |||
struct PluginsButton : MenuButton { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
ui::Menu *menu = createMenu(); | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
@@ -576,7 +576,7 @@ struct PluginsButton : MenuButton { | |||
struct ManualItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t(system::openBrowser, "https://vcvrack.com/manual/"); | |||
t.detach(); | |||
} | |||
@@ -584,7 +584,7 @@ struct ManualItem : ui::MenuItem { | |||
struct WebsiteItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t(system::openBrowser, "https://vcvrack.com/"); | |||
t.detach(); | |||
} | |||
@@ -592,14 +592,14 @@ struct WebsiteItem : ui::MenuItem { | |||
struct CheckVersionItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
settings.checkVersion ^= true; | |||
} | |||
}; | |||
struct UserFolderItem : ui::MenuItem { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
std::thread t(system::openFolder, asset::user("")); | |||
t.detach(); | |||
} | |||
@@ -607,7 +607,7 @@ struct UserFolderItem : ui::MenuItem { | |||
struct HelpButton : MenuButton { | |||
void onAction(const event::Action &e) override { | |||
void onAction(const widget::ActionEvent &e) override { | |||
ui::Menu *menu = createMenu(); | |||
menu->box.pos = getAbsoluteOffset(math::Vec(0, box.size.y)); | |||
menu->box.size.x = box.size.x; | |||
@@ -1,267 +0,0 @@ | |||
#include "event.hpp" | |||
#include "widget/Widget.hpp" | |||
namespace rack { | |||
namespace event { | |||
void State::setHovered(widget::Widget *w) { | |||
if (w == hoveredWidget) | |||
return; | |||
if (hoveredWidget) { | |||
// event::Leave | |||
event::Leave eLeave; | |||
hoveredWidget->onLeave(eLeave); | |||
hoveredWidget = NULL; | |||
} | |||
if (w) { | |||
// event::Enter | |||
event::Context eEnterContext; | |||
event::Enter eEnter; | |||
eEnter.context = &eEnterContext; | |||
w->onEnter(eEnter); | |||
hoveredWidget = eEnterContext.consumed; | |||
} | |||
} | |||
void State::setDragged(widget::Widget *w) { | |||
if (w == draggedWidget) | |||
return; | |||
if (draggedWidget) { | |||
// event::DragEnd | |||
event::DragEnd eDragEnd; | |||
draggedWidget->onDragEnd(eDragEnd); | |||
draggedWidget = NULL; | |||
} | |||
if (w) { | |||
// event::DragStart | |||
event::Context eDragStartContext; | |||
event::DragStart eDragStart; | |||
eDragStart.context = &eDragStartContext; | |||
w->onDragStart(eDragStart); | |||
draggedWidget = eDragStartContext.consumed; | |||
} | |||
} | |||
void State::setDragHovered(widget::Widget *w) { | |||
if (w == dragHoveredWidget) | |||
return; | |||
if (dragHoveredWidget) { | |||
// event::DragLeave | |||
event::DragLeave eDragLeave; | |||
eDragLeave.origin = draggedWidget; | |||
dragHoveredWidget->onDragLeave(eDragLeave); | |||
dragHoveredWidget = NULL; | |||
} | |||
if (w) { | |||
// event::DragEnter | |||
event::Context eDragEnterContext; | |||
event::DragEnter eDragEnter; | |||
eDragEnter.context = &eDragEnterContext; | |||
eDragEnter.origin = draggedWidget; | |||
w->onDragEnter(eDragEnter); | |||
dragHoveredWidget = eDragEnterContext.consumed; | |||
} | |||
} | |||
void State::setSelected(widget::Widget *w) { | |||
if (w == selectedWidget) | |||
return; | |||
if (selectedWidget) { | |||
// event::Deselect | |||
event::Deselect eDeselect; | |||
selectedWidget->onDeselect(eDeselect); | |||
selectedWidget = NULL; | |||
} | |||
if (w) { | |||
// event::Select | |||
event::Context eSelectContext; | |||
event::Select eSelect; | |||
eSelect.context = &eSelectContext; | |||
w->onSelect(eSelect); | |||
selectedWidget = eSelectContext.consumed; | |||
} | |||
} | |||
void State::finalizeWidget(widget::Widget *w) { | |||
if (hoveredWidget == w) setHovered(NULL); | |||
if (draggedWidget == w) setDragged(NULL); | |||
if (dragHoveredWidget == w) setDragHovered(NULL); | |||
if (selectedWidget == w) setSelected(NULL); | |||
if (lastClickedWidget == w) lastClickedWidget = NULL; | |||
} | |||
void State::handleButton(math::Vec pos, int button, int action, int mods) { | |||
// event::Button | |||
event::Context eButtonContext; | |||
event::Button eButton; | |||
eButton.context = &eButtonContext; | |||
eButton.pos = pos; | |||
eButton.button = button; | |||
eButton.action = action; | |||
eButton.mods = mods; | |||
rootWidget->onButton(eButton); | |||
widget::Widget *clickedWidget = eButtonContext.consumed; | |||
if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||
if (action == GLFW_PRESS) { | |||
setDragged(clickedWidget); | |||
} | |||
if (action == GLFW_RELEASE) { | |||
setDragHovered(NULL); | |||
if (clickedWidget && draggedWidget) { | |||
// event::DragDrop | |||
event::DragDrop eDragDrop; | |||
eDragDrop.origin = draggedWidget; | |||
clickedWidget->onDragDrop(eDragDrop); | |||
} | |||
setDragged(NULL); | |||
} | |||
if (action == GLFW_PRESS) { | |||
setSelected(clickedWidget); | |||
} | |||
if (action == GLFW_PRESS) { | |||
const double doubleClickDuration = 0.5; | |||
double clickTime = glfwGetTime(); | |||
if (clickedWidget | |||
&& clickTime - lastClickTime <= doubleClickDuration | |||
&& lastClickedWidget == clickedWidget) { | |||
// event::DoubleClick | |||
event::DoubleClick eDoubleClick; | |||
clickedWidget->onDoubleClick(eDoubleClick); | |||
} | |||
lastClickTime = clickTime; | |||
lastClickedWidget = clickedWidget; | |||
} | |||
} | |||
} | |||
void State::handleHover(math::Vec pos, math::Vec mouseDelta) { | |||
if (draggedWidget) { | |||
// event::DragMove | |||
event::DragMove eDragMove; | |||
eDragMove.mouseDelta = mouseDelta; | |||
draggedWidget->onDragMove(eDragMove); | |||
// event::DragHover | |||
event::Context eDragHoverContext; | |||
event::DragHover eDragHover; | |||
eDragHover.context = &eDragHoverContext; | |||
eDragHover.pos = pos; | |||
eDragHover.mouseDelta = mouseDelta; | |||
eDragHover.origin = draggedWidget; | |||
rootWidget->onDragHover(eDragHover); | |||
setDragHovered(eDragHoverContext.consumed); | |||
return; | |||
} | |||
// event::Hover | |||
event::Context eHoverContext; | |||
event::Hover eHover; | |||
eHover.context = &eHoverContext; | |||
eHover.pos = pos; | |||
eHover.mouseDelta = mouseDelta; | |||
rootWidget->onHover(eHover); | |||
setHovered(eHoverContext.consumed); | |||
} | |||
void State::handleLeave() { | |||
setDragHovered(NULL); | |||
setHovered(NULL); | |||
} | |||
void State::handleScroll(math::Vec pos, math::Vec scrollDelta) { | |||
// event::HoverScroll | |||
event::Context eHoverScrollContext; | |||
event::HoverScroll eHoverScroll; | |||
eHoverScroll.context = &eHoverScrollContext; | |||
eHoverScroll.pos = pos; | |||
eHoverScroll.scrollDelta = scrollDelta; | |||
rootWidget->onHoverScroll(eHoverScroll); | |||
} | |||
void State::handleDrop(math::Vec pos, const std::vector<std::string> &paths) { | |||
// event::PathDrop | |||
event::Context ePathDropContext; | |||
event::PathDrop ePathDrop(paths); | |||
ePathDrop.context = &ePathDropContext; | |||
ePathDrop.pos = pos; | |||
rootWidget->onPathDrop(ePathDrop); | |||
} | |||
void State::handleText(math::Vec pos, int codepoint) { | |||
if (selectedWidget) { | |||
// event::SelectText | |||
event::Context eSelectTextContext; | |||
event::SelectText eSelectText; | |||
eSelectText.context = &eSelectTextContext; | |||
eSelectText.codepoint = codepoint; | |||
selectedWidget->onSelectText(eSelectText); | |||
if (eSelectTextContext.consumed) | |||
return; | |||
} | |||
// event::HoverText | |||
event::Context eHoverTextContext; | |||
event::HoverText eHoverText; | |||
eHoverText.context = &eHoverTextContext; | |||
eHoverText.pos = pos; | |||
eHoverText.codepoint = codepoint; | |||
rootWidget->onHoverText(eHoverText); | |||
} | |||
void State::handleKey(math::Vec pos, int key, int scancode, int action, int mods) { | |||
if (selectedWidget) { | |||
// event::SelectKey | |||
event::Context eSelectKeyContext; | |||
event::SelectKey eSelectKey; | |||
eSelectKey.context = &eSelectKeyContext; | |||
eSelectKey.key = key; | |||
eSelectKey.scancode = scancode; | |||
eSelectKey.action = action; | |||
eSelectKey.mods = mods; | |||
selectedWidget->onSelectKey(eSelectKey); | |||
if (eSelectKeyContext.consumed) | |||
return; | |||
} | |||
// event::HoverKey | |||
event::Context eHoverKeyContext; | |||
event::HoverKey eHoverKey; | |||
eHoverKey.context = &eHoverKeyContext; | |||
eHoverKey.pos = pos; | |||
eHoverKey.key = key; | |||
eHoverKey.scancode = scancode; | |||
eHoverKey.action = action; | |||
eHoverKey.mods = mods; | |||
rootWidget->onHoverKey(eHoverKey); | |||
} | |||
void State::handleZoom() { | |||
// event::Zoom | |||
event::Context eZoomContext; | |||
event::Zoom eZoom; | |||
eZoom.context = &eZoomContext; | |||
rootWidget->onZoom(eZoom); | |||
} | |||
} // namespace event | |||
} // namespace rack |
@@ -18,31 +18,31 @@ void Button::draw(const DrawArgs &args) { | |||
bndToolButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, text.c_str()); | |||
} | |||
void Button::onEnter(const event::Enter &e) { | |||
void Button::onEnter(const widget::EnterEvent &e) { | |||
state = BND_HOVER; | |||
e.consume(this); | |||
} | |||
void Button::onLeave(const event::Leave &e) { | |||
void Button::onLeave(const widget::LeaveEvent &e) { | |||
state = BND_DEFAULT; | |||
} | |||
void Button::onDragStart(const event::DragStart &e) { | |||
void Button::onDragStart(const widget::DragStartEvent &e) { | |||
state = BND_ACTIVE; | |||
if (quantity) | |||
quantity->setMax(); | |||
e.consume(this); | |||
} | |||
void Button::onDragEnd(const event::DragEnd &e) { | |||
void Button::onDragEnd(const widget::DragEndEvent &e) { | |||
state = BND_HOVER; | |||
if (quantity) | |||
quantity->setMin(); | |||
} | |||
void Button::onDragDrop(const event::DragDrop &e) { | |||
void Button::onDragDrop(const widget::DragDropEvent &e) { | |||
if (e.origin == this) { | |||
event::Action eAction; | |||
widget::ActionEvent eAction; | |||
onAction(eAction); | |||
} | |||
} | |||
@@ -54,7 +54,7 @@ void Menu::draw(const DrawArgs &args) { | |||
Widget::draw(args); | |||
} | |||
void Menu::onHoverScroll(const event::HoverScroll &e) { | |||
void Menu::onHoverScroll(const widget::HoverScrollEvent &e) { | |||
if (parent && !parent->box.isContaining(box)) | |||
box.pos.y += e.scrollDelta.y; | |||
} | |||
@@ -41,7 +41,7 @@ void MenuItem::step() { | |||
Widget::step(); | |||
} | |||
void MenuItem::onEnter(const event::Enter &e) { | |||
void MenuItem::onEnter(const widget::EnterEvent &e) { | |||
e.consume(this); | |||
Menu *parentMenu = dynamic_cast<Menu*>(parent); | |||
if (!parentMenu) | |||
@@ -58,11 +58,11 @@ void MenuItem::onEnter(const event::Enter &e) { | |||
parentMenu->setChildMenu(childMenu); | |||
} | |||
void MenuItem::onDragStart(const event::DragStart &e) { | |||
void MenuItem::onDragStart(const widget::DragStartEvent &e) { | |||
e.consume(this); | |||
} | |||
void MenuItem::onDragDrop(const event::DragDrop &e) { | |||
void MenuItem::onDragDrop(const widget::DragDropEvent &e) { | |||
if (e.origin != this) | |||
return; | |||
doAction(); | |||
@@ -72,13 +72,13 @@ void MenuItem::doAction() { | |||
if (disabled) | |||
return; | |||
event::Context eActionContext; | |||
event::Action eAction; | |||
eAction.context = &eActionContext; | |||
widget::EventContext cAction; | |||
widget::ActionEvent eAction; | |||
eAction.context = &cAction; | |||
// Consume event by default, but allow action to un-consume it to prevent the menu from being removed. | |||
eAction.consume(this); | |||
onAction(eAction); | |||
if (!eActionContext.consumed) | |||
if (!cAction.consumed) | |||
return; | |||
MenuOverlay *overlay = getAncestorOfType<MenuOverlay>(); | |||
@@ -17,7 +17,7 @@ void MenuOverlay::step() { | |||
Widget::step(); | |||
} | |||
void MenuOverlay::onButton(const event::Button &e) { | |||
void MenuOverlay::onButton(const widget::ButtonEvent &e) { | |||
widget::OpaqueWidget::onButton(e); | |||
if (e.getConsumed() == this && e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_LEFT) { | |||
@@ -25,7 +25,7 @@ void MenuOverlay::onButton(const event::Button &e) { | |||
} | |||
} | |||
void MenuOverlay::onHoverKey(const event::HoverKey &e) { | |||
void MenuOverlay::onHoverKey(const widget::HoverKeyEvent &e) { | |||
widget::OpaqueWidget::onHoverKey(e); | |||
if (e.getConsumed() == this && e.action == GLFW_PRESS && e.key == GLFW_KEY_ESCAPE) { | |||
@@ -21,18 +21,18 @@ void RadioButton::draw(const DrawArgs &args) { | |||
bndRadioButton(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, -1, label.c_str()); | |||
} | |||
void RadioButton::onEnter(const event::Enter &e) { | |||
void RadioButton::onEnter(const widget::EnterEvent &e) { | |||
if (state != BND_ACTIVE) | |||
state = BND_HOVER; | |||
e.consume(this); | |||
} | |||
void RadioButton::onLeave(const event::Leave &e) { | |||
void RadioButton::onLeave(const widget::LeaveEvent &e) { | |||
if (state != BND_ACTIVE) | |||
state = BND_DEFAULT; | |||
} | |||
void RadioButton::onDragDrop(const event::DragDrop &e) { | |||
void RadioButton::onDragDrop(const widget::DragDropEvent &e) { | |||
if (e.origin == this) { | |||
if (state == BND_ACTIVE) { | |||
state = BND_HOVER; | |||
@@ -45,7 +45,7 @@ void RadioButton::onDragDrop(const event::DragDrop &e) { | |||
quantity->setMax(); | |||
} | |||
event::Action eAction; | |||
widget::ActionEvent eAction; | |||
onAction(eAction); | |||
} | |||
} | |||
@@ -16,13 +16,13 @@ void ScrollBar::draw(const DrawArgs &args) { | |||
bndScrollBar(args.vg, 0.0, 0.0, box.size.x, box.size.y, state, offset, size); | |||
} | |||
void ScrollBar::onDragStart(const event::DragStart &e) { | |||
void ScrollBar::onDragStart(const widget::DragStartEvent &e) { | |||
state = BND_ACTIVE; | |||
APP->window->cursorLock(); | |||
e.consume(this); | |||
} | |||
void ScrollBar::onDragMove(const event::DragMove &e) { | |||
void ScrollBar::onDragMove(const widget::DragMoveEvent &e) { | |||
const float sensitivity = 1.f; | |||
ScrollWidget *scrollWidget = dynamic_cast<ScrollWidget*>(parent); | |||
@@ -33,7 +33,7 @@ void ScrollBar::onDragMove(const event::DragMove &e) { | |||
scrollWidget->offset.y += sensitivity * e.mouseDelta.y; | |||
} | |||
void ScrollBar::onDragEnd(const event::DragEnd &e) { | |||
void ScrollBar::onDragEnd(const widget::DragEndEvent &e) { | |||
state = BND_DEFAULT; | |||
APP->window->cursorUnlock(); | |||
} | |||
@@ -1,6 +1,6 @@ | |||
#include "ui/ScrollWidget.hpp" | |||
#include "app.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
namespace rack { | |||
@@ -69,11 +69,11 @@ void ScrollWidget::step() { | |||
verticalScrollBar->box.size.y = horizontalScrollBar->visible ? inner.y : box.size.y; | |||
} | |||
void ScrollWidget::onHover(const event::Hover &e) { | |||
void ScrollWidget::onHover(const widget::HoverEvent &e) { | |||
widget::Widget::onHover(e); | |||
} | |||
void ScrollWidget::onHoverScroll(const event::HoverScroll &e) { | |||
void ScrollWidget::onHoverScroll(const widget::HoverScrollEvent &e) { | |||
widget::Widget::onHoverScroll(e); | |||
if (e.getConsumed()) | |||
return; | |||
@@ -23,24 +23,24 @@ void Slider::draw(const DrawArgs &args) { | |||
bndSlider(args.vg, 0.0, 0.0, box.size.x, box.size.y, BND_CORNER_NONE, state, progress, text.c_str(), NULL); | |||
} | |||
void Slider::onDragStart(const event::DragStart &e) { | |||
void Slider::onDragStart(const widget::DragStartEvent &e) { | |||
state = BND_ACTIVE; | |||
APP->window->cursorLock(); | |||
e.consume(this); | |||
} | |||
void Slider::onDragMove(const event::DragMove &e) { | |||
void Slider::onDragMove(const widget::DragMoveEvent &e) { | |||
if (quantity) { | |||
quantity->moveScaledValue(SENSITIVITY * e.mouseDelta.x); | |||
} | |||
} | |||
void Slider::onDragEnd(const event::DragEnd &e) { | |||
void Slider::onDragEnd(const widget::DragEndEvent &e) { | |||
state = BND_DEFAULT; | |||
APP->window->cursorUnlock(); | |||
} | |||
void Slider::onDoubleClick(const event::DoubleClick &e) { | |||
void Slider::onDoubleClick(const widget::DoubleClickEvent &e) { | |||
if (quantity) | |||
quantity->reset(); | |||
} | |||
@@ -30,14 +30,14 @@ void TextField::draw(const DrawArgs &args) { | |||
nvgResetScissor(args.vg); | |||
} | |||
void TextField::onButton(const event::Button &e) { | |||
void TextField::onButton(const widget::ButtonEvent &e) { | |||
if (e.action == GLFW_PRESS && e.button == GLFW_MOUSE_BUTTON_LEFT) { | |||
cursor = selection = getTextPosition(e.pos); | |||
} | |||
widget::OpaqueWidget::onButton(e); | |||
} | |||
void TextField::onHover(const event::Hover &e) { | |||
void TextField::onHover(const widget::HoverEvent &e) { | |||
if (this == APP->event->draggedWidget) { | |||
int pos = getTextPosition(e.pos); | |||
if (pos != selection) { | |||
@@ -47,15 +47,15 @@ void TextField::onHover(const event::Hover &e) { | |||
widget::OpaqueWidget::onHover(e); | |||
} | |||
void TextField::onEnter(const event::Enter &e) { | |||
void TextField::onEnter(const widget::EnterEvent &e) { | |||
e.consume(this); | |||
} | |||
void TextField::onSelect(const event::Select &e) { | |||
void TextField::onSelect(const widget::SelectEvent &e) { | |||
e.consume(this); | |||
} | |||
void TextField::onSelectText(const event::SelectText &e) { | |||
void TextField::onSelectText(const widget::SelectTextEvent &e) { | |||
if (e.codepoint < 128) { | |||
std::string newText(1, (char) e.codepoint); | |||
insertText(newText); | |||
@@ -63,7 +63,7 @@ void TextField::onSelectText(const event::SelectText &e) { | |||
e.consume(this); | |||
} | |||
void TextField::onSelectKey(const event::SelectKey &e) { | |||
void TextField::onSelectKey(const widget::SelectKeyEvent &e) { | |||
if (e.action == GLFW_PRESS || e.action == GLFW_REPEAT) { | |||
switch (e.key) { | |||
case GLFW_KEY_BACKSPACE: { | |||
@@ -71,7 +71,7 @@ void TextField::onSelectKey(const event::SelectKey &e) { | |||
cursor--; | |||
if (cursor >= 0) { | |||
text.erase(cursor, 1); | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
} | |||
selection = cursor; | |||
@@ -79,7 +79,7 @@ void TextField::onSelectKey(const event::SelectKey &e) { | |||
else { | |||
int begin = std::min(cursor, selection); | |||
text.erase(begin, std::abs(selection - cursor)); | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
cursor = selection = begin; | |||
} | |||
@@ -87,13 +87,13 @@ void TextField::onSelectKey(const event::SelectKey &e) { | |||
case GLFW_KEY_DELETE: { | |||
if (cursor == selection) { | |||
text.erase(cursor, 1); | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
} | |||
else { | |||
int begin = std::min(cursor, selection); | |||
text.erase(begin, std::abs(selection - cursor)); | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
cursor = selection = begin; | |||
} | |||
@@ -168,7 +168,7 @@ void TextField::onSelectKey(const event::SelectKey &e) { | |||
insertText("\n"); | |||
} | |||
else { | |||
event::Action eAction; | |||
widget::ActionEvent eAction; | |||
onAction(eAction); | |||
} | |||
} break; | |||
@@ -189,7 +189,7 @@ void TextField::insertText(std::string text) { | |||
this->text.insert(cursor, text); | |||
cursor += text.size(); | |||
selection = cursor; | |||
event::Change eChange; | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
} | |||
@@ -198,8 +198,8 @@ void TextField::setText(std::string text) { | |||
this->text = text; | |||
selection = cursor = text.size(); | |||
if (changed) { | |||
// event::Change | |||
event::Change eChange; | |||
// widget::ChangeEvent | |||
widget::ChangeEvent eChange; | |||
onChange(eChange); | |||
} | |||
} | |||
@@ -1,5 +1,5 @@ | |||
#include "widget/Widget.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "app.hpp" | |||
#include <algorithm> | |||
@@ -16,15 +16,15 @@ Widget::~Widget() { | |||
void Widget::setPos(math::Vec pos) { | |||
box.pos = pos; | |||
// event::Reposition | |||
event::Reposition eReposition; | |||
// RepositionEvent | |||
RepositionEvent eReposition; | |||
onReposition(eReposition); | |||
} | |||
void Widget::setSize(math::Vec size) { | |||
box.size = size; | |||
// event::Resize | |||
event::Resize eResize; | |||
// ResizeEvent | |||
ResizeEvent eResize; | |||
onResize(eResize); | |||
} | |||
@@ -32,8 +32,8 @@ void Widget::show() { | |||
if (visible) | |||
return; | |||
visible = true; | |||
// event::Show | |||
event::Show eShow; | |||
// ShowEvent | |||
ShowEvent eShow; | |||
onShow(eShow); | |||
} | |||
@@ -41,8 +41,8 @@ void Widget::hide() { | |||
if (!visible) | |||
return; | |||
visible = false; | |||
// event::Hide | |||
event::Hide eHide; | |||
// HideEvent | |||
HideEvent eHide; | |||
onHide(eHide); | |||
} | |||
@@ -90,8 +90,8 @@ void Widget::addChild(Widget *child) { | |||
assert(!child->parent); | |||
child->parent = this; | |||
children.push_back(child); | |||
// event::Add | |||
event::Add eAdd; | |||
// AddEvent | |||
AddEvent eAdd; | |||
child->onAdd(eAdd); | |||
} | |||
@@ -99,8 +99,8 @@ void Widget::removeChild(Widget *child) { | |||
assert(child); | |||
// Make sure `this` is the child's parent | |||
assert(child->parent == this); | |||
// event::Remove | |||
event::Remove eRemove; | |||
// RemoveEvent | |||
RemoveEvent eRemove; | |||
child->onRemove(eRemove); | |||
// Prepare to remove widget from the event state | |||
APP->event->finalizeWidget(child); | |||
@@ -114,8 +114,8 @@ void Widget::removeChild(Widget *child) { | |||
void Widget::clearChildren() { | |||
for (Widget *child : children) { | |||
// event::Remove | |||
event::Remove eRemove; | |||
// RemoveEvent | |||
RemoveEvent eRemove; | |||
child->onRemove(eRemove); | |||
APP->event->finalizeWidget(child); | |||
child->parent = NULL; | |||
@@ -129,8 +129,8 @@ void Widget::step() { | |||
Widget *child = *it; | |||
// Delete children if a delete is requested | |||
if (child->requestedDelete) { | |||
// event::Remove | |||
event::Remove eRemove; | |||
// RemoveEvent | |||
RemoveEvent eRemove; | |||
child->onRemove(eRemove); | |||
APP->event->finalizeWidget(child); | |||
it = children.erase(it); | |||
@@ -23,9 +23,9 @@ void ZoomWidget::setZoom(float zoom) { | |||
return; | |||
this->zoom = zoom; | |||
event::Context eZoomContext; | |||
event::Zoom eZoom; | |||
eZoom.context = &eZoomContext; | |||
EventContext cZoom; | |||
ZoomEvent eZoom; | |||
eZoom.context = &cZoom; | |||
Widget::onZoom(eZoom); | |||
} | |||
@@ -0,0 +1,267 @@ | |||
#include "widget/event.hpp" | |||
#include "widget/Widget.hpp" | |||
namespace rack { | |||
namespace widget { | |||
void EventState::setHovered(Widget *w) { | |||
if (w == hoveredWidget) | |||
return; | |||
if (hoveredWidget) { | |||
// LeaveEvent | |||
LeaveEvent eLeave; | |||
hoveredWidget->onLeave(eLeave); | |||
hoveredWidget = NULL; | |||
} | |||
if (w) { | |||
// EnterEvent | |||
EventContext cEnter; | |||
EnterEvent eEnter; | |||
eEnter.context = &cEnter; | |||
w->onEnter(eEnter); | |||
hoveredWidget = cEnter.consumed; | |||
} | |||
} | |||
void EventState::setDragged(Widget *w) { | |||
if (w == draggedWidget) | |||
return; | |||
if (draggedWidget) { | |||
// DragEndEvent | |||
DragEndEvent eDragEnd; | |||
draggedWidget->onDragEnd(eDragEnd); | |||
draggedWidget = NULL; | |||
} | |||
if (w) { | |||
// DragStartEvent | |||
EventContext cDragStart; | |||
DragStartEvent eDragStart; | |||
eDragStart.context = &cDragStart; | |||
w->onDragStart(eDragStart); | |||
draggedWidget = cDragStart.consumed; | |||
} | |||
} | |||
void EventState::setDragHovered(Widget *w) { | |||
if (w == dragHoveredWidget) | |||
return; | |||
if (dragHoveredWidget) { | |||
// DragLeaveEvent | |||
DragLeaveEvent eDragLeave; | |||
eDragLeave.origin = draggedWidget; | |||
dragHoveredWidget->onDragLeave(eDragLeave); | |||
dragHoveredWidget = NULL; | |||
} | |||
if (w) { | |||
// DragEnterEvent | |||
EventContext cDragEnter; | |||
DragEnterEvent eDragEnter; | |||
eDragEnter.context = &cDragEnter; | |||
eDragEnter.origin = draggedWidget; | |||
w->onDragEnter(eDragEnter); | |||
dragHoveredWidget = cDragEnter.consumed; | |||
} | |||
} | |||
void EventState::setSelected(Widget *w) { | |||
if (w == selectedWidget) | |||
return; | |||
if (selectedWidget) { | |||
// DeselectEvent | |||
DeselectEvent eDeselect; | |||
selectedWidget->onDeselect(eDeselect); | |||
selectedWidget = NULL; | |||
} | |||
if (w) { | |||
// SelectEvent | |||
EventContext cSelect; | |||
SelectEvent eSelect; | |||
eSelect.context = &cSelect; | |||
w->onSelect(eSelect); | |||
selectedWidget = cSelect.consumed; | |||
} | |||
} | |||
void EventState::finalizeWidget(Widget *w) { | |||
if (hoveredWidget == w) setHovered(NULL); | |||
if (draggedWidget == w) setDragged(NULL); | |||
if (dragHoveredWidget == w) setDragHovered(NULL); | |||
if (selectedWidget == w) setSelected(NULL); | |||
if (lastClickedWidget == w) lastClickedWidget = NULL; | |||
} | |||
void EventState::handleButton(math::Vec pos, int button, int action, int mods) { | |||
// ButtonEvent | |||
EventContext cButton; | |||
ButtonEvent eButton; | |||
eButton.context = &cButton; | |||
eButton.pos = pos; | |||
eButton.button = button; | |||
eButton.action = action; | |||
eButton.mods = mods; | |||
rootWidget->onButton(eButton); | |||
Widget *clickedWidget = cButton.consumed; | |||
if (button == GLFW_MOUSE_BUTTON_LEFT) { | |||
if (action == GLFW_PRESS) { | |||
setDragged(clickedWidget); | |||
} | |||
if (action == GLFW_RELEASE) { | |||
setDragHovered(NULL); | |||
if (clickedWidget && draggedWidget) { | |||
// DragDropEvent | |||
DragDropEvent eDragDrop; | |||
eDragDrop.origin = draggedWidget; | |||
clickedWidget->onDragDrop(eDragDrop); | |||
} | |||
setDragged(NULL); | |||
} | |||
if (action == GLFW_PRESS) { | |||
setSelected(clickedWidget); | |||
} | |||
if (action == GLFW_PRESS) { | |||
const double doubleClickDuration = 0.5; | |||
double clickTime = glfwGetTime(); | |||
if (clickedWidget | |||
&& clickTime - lastClickTime <= doubleClickDuration | |||
&& lastClickedWidget == clickedWidget) { | |||
// DoubleClickEvent | |||
DoubleClickEvent eDoubleClick; | |||
clickedWidget->onDoubleClick(eDoubleClick); | |||
} | |||
lastClickTime = clickTime; | |||
lastClickedWidget = clickedWidget; | |||
} | |||
} | |||
} | |||
void EventState::handleHover(math::Vec pos, math::Vec mouseDelta) { | |||
if (draggedWidget) { | |||
// DragMoveEvent | |||
DragMoveEvent eDragMove; | |||
eDragMove.mouseDelta = mouseDelta; | |||
draggedWidget->onDragMove(eDragMove); | |||
// DragHoverEvent | |||
EventContext cDragHover; | |||
DragHoverEvent eDragHover; | |||
eDragHover.context = &cDragHover; | |||
eDragHover.pos = pos; | |||
eDragHover.mouseDelta = mouseDelta; | |||
eDragHover.origin = draggedWidget; | |||
rootWidget->onDragHover(eDragHover); | |||
setDragHovered(cDragHover.consumed); | |||
return; | |||
} | |||
// HoverEvent | |||
EventContext cHover; | |||
HoverEvent eHover; | |||
eHover.context = &cHover; | |||
eHover.pos = pos; | |||
eHover.mouseDelta = mouseDelta; | |||
rootWidget->onHover(eHover); | |||
setHovered(cHover.consumed); | |||
} | |||
void EventState::handleLeave() { | |||
setDragHovered(NULL); | |||
setHovered(NULL); | |||
} | |||
void EventState::handleScroll(math::Vec pos, math::Vec scrollDelta) { | |||
// HoverScrollEvent | |||
EventContext cHoverScroll; | |||
HoverScrollEvent eHoverScroll; | |||
eHoverScroll.context = &cHoverScroll; | |||
eHoverScroll.pos = pos; | |||
eHoverScroll.scrollDelta = scrollDelta; | |||
rootWidget->onHoverScroll(eHoverScroll); | |||
} | |||
void EventState::handleDrop(math::Vec pos, const std::vector<std::string> &paths) { | |||
// PathDropEvent | |||
EventContext cPathDrop; | |||
PathDropEvent ePathDrop(paths); | |||
ePathDrop.context = &cPathDrop; | |||
ePathDrop.pos = pos; | |||
rootWidget->onPathDrop(ePathDrop); | |||
} | |||
void EventState::handleText(math::Vec pos, int codepoint) { | |||
if (selectedWidget) { | |||
// SelectTextEvent | |||
EventContext cSelectText; | |||
SelectTextEvent eSelectText; | |||
eSelectText.context = &cSelectText; | |||
eSelectText.codepoint = codepoint; | |||
selectedWidget->onSelectText(eSelectText); | |||
if (cSelectText.consumed) | |||
return; | |||
} | |||
// HoverTextEvent | |||
EventContext cHoverText; | |||
HoverTextEvent eHoverText; | |||
eHoverText.context = &cHoverText; | |||
eHoverText.pos = pos; | |||
eHoverText.codepoint = codepoint; | |||
rootWidget->onHoverText(eHoverText); | |||
} | |||
void EventState::handleKey(math::Vec pos, int key, int scancode, int action, int mods) { | |||
if (selectedWidget) { | |||
// SelectKeyEvent | |||
EventContext cSelectKey; | |||
SelectKeyEvent eSelectKey; | |||
eSelectKey.context = &cSelectKey; | |||
eSelectKey.key = key; | |||
eSelectKey.scancode = scancode; | |||
eSelectKey.action = action; | |||
eSelectKey.mods = mods; | |||
selectedWidget->onSelectKey(eSelectKey); | |||
if (cSelectKey.consumed) | |||
return; | |||
} | |||
// HoverKeyEvent | |||
EventContext cHoverKey; | |||
HoverKeyEvent eHoverKey; | |||
eHoverKey.context = &cHoverKey; | |||
eHoverKey.pos = pos; | |||
eHoverKey.key = key; | |||
eHoverKey.scancode = scancode; | |||
eHoverKey.action = action; | |||
eHoverKey.mods = mods; | |||
rootWidget->onHoverKey(eHoverKey); | |||
} | |||
void EventState::handleZoom() { | |||
// ZoomEvent | |||
EventContext cZoom; | |||
ZoomEvent eZoom; | |||
eZoom.context = &cZoom; | |||
rootWidget->onZoom(eZoom); | |||
} | |||
} // namespace widget | |||
} // namespace rack |
@@ -3,7 +3,7 @@ | |||
#include "app/Scene.hpp" | |||
#include "keyboard.hpp" | |||
#include "gamepad.hpp" | |||
#include "event.hpp" | |||
#include "widget/event.hpp" | |||
#include "app.hpp" | |||
#include "patch.hpp" | |||
#include "settings.hpp" | |||