|
- #include "event.hpp"
- #include "widgets/Widget.hpp"
- #include "logger.hpp"
-
-
- namespace rack {
- namespace event {
-
-
- void Context::handleButton(Vec pos, int button, int action, int mods) {
- // event::Button
- event::Button eButton;
- eButton.pos = pos;
- eButton.button = button;
- eButton.action = action;
- eButton.mods = mods;
- rootWidget->onButton(eButton);
- Widget *clickedWidget = eButton.target;
-
- if (button == GLFW_MOUSE_BUTTON_LEFT) {
- if (action == GLFW_PRESS && !draggedWidget && clickedWidget) {
- // event::DragStart
- event::DragStart eDragStart;
- clickedWidget->onDragStart(eDragStart);
- draggedWidget = clickedWidget;
- }
-
- if (action == GLFW_RELEASE && draggedWidget) {
- if (dragHoveredWidget) {
- // event::DragLeave
- event::DragLeave eDragLeave;
- dragHoveredWidget->onDragLeave(eDragLeave);
- }
-
- if (clickedWidget) {
- // event::DragDrop
- event::DragDrop eDragDrop;
- eDragDrop.origin = draggedWidget;
- clickedWidget->onDragDrop(eDragDrop);
- }
-
- // event::DragEnd
- event::DragEnd eDragEnd;
- draggedWidget->onDragEnd(eDragEnd);
- draggedWidget = NULL;
- dragHoveredWidget = NULL;
- }
-
- if (action == GLFW_PRESS && clickedWidget != selectedWidget) {
- if (selectedWidget) {
- // event::Deselect
- event::Deselect eDeselect;
- selectedWidget->onDeselect(eDeselect);
- }
-
- selectedWidget = clickedWidget;
-
- if (selectedWidget) {
- // event::Select
- event::Select eSelect;
- selectedWidget->onSelect(eSelect);
- }
- }
- }
-
- if (button == GLFW_MOUSE_BUTTON_MIDDLE) {
- if (action == GLFW_PRESS) {
- scrollWidget = clickedWidget;
- }
- if (action == GLFW_RELEASE) {
- scrollWidget = NULL;
- }
- }
- }
-
-
- void Context::handleHover(Vec pos, Vec mouseDelta) {
- if (draggedWidget) {
- // event::DragMove
- event::DragMove eDragMove;
- eDragMove.mouseDelta = mouseDelta;
- draggedWidget->onDragMove(eDragMove);
-
- // event::DragHover
- event::DragHover eDragHover;
- eDragHover.pos = pos;
- eDragHover.mouseDelta = mouseDelta;
- rootWidget->onDragHover(eDragHover);
- Widget *newDragHoveredWidget = eDragHover.target;
-
- if (newDragHoveredWidget != dragHoveredWidget) {
- if (dragHoveredWidget) {
- // event::DragLeave
- event::DragLeave eDragLeave;
- dragHoveredWidget->onDragLeave(eDragLeave);
- }
-
- dragHoveredWidget = newDragHoveredWidget;
-
- if (dragHoveredWidget) {
- // event::DragEnter
- event::DragEnter eDragEnter;
- dragHoveredWidget->onDragEnter(eDragEnter);
- }
- }
-
- return;
- }
-
- // if (scrollWidget) {
- // event::HoverScroll
- // event::HoverScroll eHoverScroll;
- // eHoverScroll.pos = pos;
- // eHoverScroll.scrollDelta = scrollDelta;
- // rootWidget->onHoverScroll(eHoverScroll);
- // }
-
- // event::Hover
- event::Hover eHover;
- eHover.pos = pos;
- eHover.mouseDelta = mouseDelta;
- rootWidget->onHover(eHover);
- Widget *newHoveredWidget = eHover.target;
-
- if (newHoveredWidget != hoveredWidget) {
- if (hoveredWidget) {
- // event::Leave
- event::Leave eLeave;
- hoveredWidget->onLeave(eLeave);
- }
-
- hoveredWidget = newHoveredWidget;
-
- if (hoveredWidget) {
- // event::Enter
- event::Enter eEnter;
- hoveredWidget->onEnter(eEnter);
- }
- }
- }
-
- void Context::handleLeave() {
- if (hoveredWidget) {
- // event::Leave
- event::Leave eLeave;
- hoveredWidget->onLeave(eLeave);
- }
- hoveredWidget = NULL;
- }
-
- void Context::handleScroll(Vec pos, Vec scrollDelta) {
- // event::HoverScroll
- event::HoverScroll eHoverScroll;
- eHoverScroll.pos = pos;
- eHoverScroll.scrollDelta = scrollDelta;
- rootWidget->onHoverScroll(eHoverScroll);
- }
-
- void Context::handleDrop(Vec pos, std::vector<std::string> paths) {
- // event::PathDrop
- event::PathDrop ePathDrop;
- ePathDrop.pos = pos;
- ePathDrop.paths = paths;
- rootWidget->onPathDrop(ePathDrop);
- }
-
- void Context::handleText(Vec pos, int codepoint) {
- if (selectedWidget) {
- // event::SelectText
- event::SelectText eSelectText;
- eSelectText.codepoint = codepoint;
- selectedWidget->onSelectText(eSelectText);
- if (eSelectText.target)
- return;
- }
-
- // event::HoverText
- event::HoverText eHoverText;
- eHoverText.pos = pos;
- eHoverText.codepoint = codepoint;
- rootWidget->onHoverText(eHoverText);
- }
-
- void Context::handleKey(Vec pos, int key, int scancode, int action, int mods) {
- if (selectedWidget) {
- // event::SelectKey
- event::SelectKey eSelectKey;
- eSelectKey.key = key;
- eSelectKey.scancode = scancode;
- eSelectKey.action = action;
- eSelectKey.mods = mods;
- selectedWidget->onSelectKey(eSelectKey);
- if (eSelectKey.target)
- return;
- }
-
- // event::HoverKey
- event::HoverKey eHoverKey;
- eHoverKey.pos = pos;
- eHoverKey.key = key;
- eHoverKey.scancode = scancode;
- eHoverKey.action = action;
- eHoverKey.mods = mods;
- rootWidget->onHoverKey(eHoverKey);
- }
-
- void Context::finalizeWidget(Widget *w) {
- if (hoveredWidget == w) hoveredWidget = NULL;
- if (draggedWidget == w) draggedWidget = NULL;
- if (dragHoveredWidget == w) dragHoveredWidget = NULL;
- if (selectedWidget == w) selectedWidget = NULL;
- if (scrollWidget == w) scrollWidget = NULL;
- }
-
- void Context::handleZoom() {
- // event::Zoom
- event::Zoom eZoom;
- rootWidget->onZoom(eZoom);
- }
-
-
- } // namespace event
- } // namespace rack
|