From dc0003232a23b52a786903a86d21931e474f99bf Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 4 May 2026 22:24:29 +0200 Subject: [PATCH] working again --- selectable.cpp | 1 - src/interaction-manager.cpp | 2 - src/midi-node.cpp | 2 +- src/node-handle.cpp | 98 ------------------------------------ src/node-handle.h | 99 +++++++++++++++++++++++++++++++------ src/state.cpp | 2 - 6 files changed, 84 insertions(+), 120 deletions(-) delete mode 100644 selectable.cpp delete mode 100644 src/node-handle.cpp diff --git a/selectable.cpp b/selectable.cpp deleted file mode 100644 index 48cedf1..0000000 --- a/selectable.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "selectable.h diff --git a/src/interaction-manager.cpp b/src/interaction-manager.cpp index 7b43d1b..8dca1a1 100644 --- a/src/interaction-manager.cpp +++ b/src/interaction-manager.cpp @@ -133,7 +133,6 @@ namespace VISEQ::INTERACTION{ bool connect_once = false; state->mouse_z = canvas->z_index; - std::cout << state->event_queue.size() << " "; for(auto e : state->event_queue){ if(!connect_once && e.action == APP::Interaction::CONNECT){ @@ -169,7 +168,6 @@ namespace VISEQ::INTERACTION{ while(state->event_queue.size() > 0 && !exit){ auto e = state->event_queue.front(); - std::cout << e.action; if(e.action == APP::Interaction::CLICK){ gm->addToSelection(); } diff --git a/src/midi-node.cpp b/src/midi-node.cpp index e36a0a6..6a5a95d 100644 --- a/src/midi-node.cpp +++ b/src/midi-node.cpp @@ -287,7 +287,7 @@ namespace VISEQ::GRAPH::NODES { if(selected) DrawCircleLinesV(position, radius+8, (Color){158, 255, 210, 255}); bool modified = false; - if(mode >= 0 && mode < 6){ + if(selected && mode >= 0 && mode < 6){ for(auto mh : midiHandles[(Handles)mode]){ mh->unlock(); mh->draw(); diff --git a/src/node-handle.cpp b/src/node-handle.cpp deleted file mode 100644 index 74dd471..0000000 --- a/src/node-handle.cpp +++ /dev/null @@ -1,98 +0,0 @@ -#include "node-handle.h" - -namespace VISEQ::GRAPH::NODES { - template - void NodeHandle::init(){ - position = parentPosition.orbitAtAngle(orbit, 0) - parentPosition; - } - - template - float NodeHandle::distance(){ - return (parentPosition + position).dist(parentPosition); - } - - template - void NodeHandle::drag(Vec2Df mouse_pos) { - float range = (maxValue - minValue) + 1; - float stepping = 360.0f / range; - - if(KEYS_DOWN.shift) stepping = stepping * steps; - - float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG - 180; // -180 because round(180 / 33.75) * 33.75 is not 0 - - if(KEYS_PRESSED.ctrl) angle_start = angle; - if(KEYS_DOWN.ctrl) angle = angle_start + (angle - angle_start) / 10; - - float stepped_angle = (round(angle / stepping) * stepping + 180) * DEG2RAD; // see above. -180 + 180 to get 0 right round(0 / 33.75) * 33.75 is still 0 - position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition; - } - - template - void NodeHandle::lock(){ - visible = false; - locked = true; - } - - template - void NodeHandle::unlock(){ - visible = true; - locked = false; - } - - template - bool NodeHandle::hovering() { - return CheckCollisionPointCircle(SCREEN_MOUSE, position + parentPosition, radius); - } - - template - void NodeHandle::update(Vec2Df pos) { - if(!locked && visible){ - if(hovering()) state->pushEvent({getPtr(), APP::Interaction::HOVER}); - if(hovering() && clicked()) state->pushEvent({getPtr(), APP::Interaction::PICKUP}); - if(pickedUp()) state->pushEvent({getPtr(), APP::Interaction::DRAG}); - } - if(picked_up && released()) state->pushEvent({getPtr(), APP::Interaction::PUTDOWN}); - - parentPosition = pos; - if(!locked && visible) updateAssignedValue(); - - minP = parentPosition.orbitAlongVector((parentPosition + position), minDistance); - maxP = parentPosition.orbitAlongVector((parentPosition + position), maxDistance); - } - - template - void NodeHandle::draw() { - if(!locked && visible){ - bool show = hovering() || picked_up; - Color dcol = ColorBrightness(col, -0.5f); - Color dyncol = show ? col : dcol; - Color dGrey = ColorBrightness(VS_COLOR_GREY, -0.2f); - Color dynGrey = show ? VS_COLOR_GREY : dGrey; - - if(steps > 0){ - for(int i = 0; i < steps; i++){ - Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i * (360.0f/steps)); - Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 3.0f, DEG2RAD * i * (360.0f/steps)); - DrawLineV(pos, pos1, dynGrey); - } - } - - float r = (parentPosition + position).dist(parentPosition); - DrawRing(parentPosition, r - 5, r + 5, 0, 360, 90, ColorAlpha(dyncol, 0.1)); - DrawRing(parentPosition, r - 5, r + 5, -90, angle_g - 90, 90, ColorAlpha(dyncol, 0.3)); - DrawCircleV(position + parentPosition, radius, dyncol); - //VISEQ::HELPER::DrawSuperText(std::format("{}", assignedValueRef), position + parentPosition, position + parentPosition + Vec2Df(50,0), 1, 0, 8, dyncol); - - /*if(show) {*/ - /* std::string text = std::format("{}", assignedValueRef);*/ - /* DrawCenteredText(text, parentPosition, 12, ColorBrightness(dyncol, 0.75f));*/ - /*}*/ - } - } - - template - bool NodeHandle::select() { - return false; - } - -} diff --git a/src/node-handle.h b/src/node-handle.h index 2c57750..21b1d7f 100644 --- a/src/node-handle.h +++ b/src/node-handle.h @@ -70,13 +70,44 @@ namespace VISEQ::GRAPH::NODES{ bool locked = true; bool visible = false; - void init(); + void init(){ + position = parentPosition.orbitAtAngle(orbit, 0) - parentPosition; + } void assignValue(T &value){ assignedValueRef = value; } + + float distance(){ + return (parentPosition + position).dist(parentPosition); + } + + virtual void drag(Vec2Df mouse_pos) override { + float range = (maxValue - minValue) + 1; + float stepping = 360.0f / range; - void assignValue(T &value, float min, float max, float minDistance, float maxDistance){ + if(KEYS_DOWN.shift) stepping = stepping * steps; + + float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG - 180; // -180 because round(180 / 33.75) * 33.75 is not 0 + + if(KEYS_PRESSED.ctrl) angle_start = angle; + if(KEYS_DOWN.ctrl) angle = angle_start + (angle - angle_start) / 10; + + float stepped_angle = (round(angle / stepping) * stepping + 180) * DEG2RAD; // see above. -180 + 180 to get 0 right round(0 / 33.75) * 33.75 is still 0 + position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition; + } + + void lock(){ + visible = false; + locked = true; + } + + void unlock(){ + visible = true; + locked = false; + } + + void assignValue(T &value, float min, float max, float minDistance, float maxDistance){ assignedValueRef = value; } @@ -93,22 +124,58 @@ namespace VISEQ::GRAPH::NODES{ } assignedValueRef = value; } - - float distance(); - virtual void drag(Vec2Df mouse_pos) override; + virtual bool hovering() override { + return CheckCollisionPointCircle(SCREEN_MOUSE, position + parentPosition, radius); + } + + virtual void update(Vec2Df pos) override { + if(!locked && visible){ + if(hovering()) state->pushEvent({getPtr(), APP::Interaction::HOVER}); + if(hovering() && clicked()) state->pushEvent({getPtr(), APP::Interaction::PICKUP}); + if(pickedUp()) state->pushEvent({getPtr(), APP::Interaction::DRAG}); + } + if(picked_up && released()) state->pushEvent({getPtr(), APP::Interaction::PUTDOWN}); + + parentPosition = pos; + if(!locked && visible) updateAssignedValue(); + + minP = parentPosition.orbitAlongVector((parentPosition + position), minDistance); + maxP = parentPosition.orbitAlongVector((parentPosition + position), maxDistance); + } + + virtual void draw() override { + if(!locked && visible){ + bool show = hovering() || picked_up; + Color dcol = ColorBrightness(col, -0.5f); + Color dyncol = show ? col : dcol; + Color dGrey = ColorBrightness(VS_COLOR_GREY, -0.2f); + Color dynGrey = show ? VS_COLOR_GREY : dGrey; + + if(steps > 0){ + for(int i = 0; i < steps; i++){ + Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i * (360.0f/steps)); + Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 3.0f, DEG2RAD * i * (360.0f/steps)); + DrawLineV(pos, pos1, dynGrey); + } + } + + float r = (parentPosition + position).dist(parentPosition); + DrawRing(parentPosition, r - 5, r + 5, 0, 360, 90, ColorAlpha(dyncol, 0.1)); + DrawRing(parentPosition, r - 5, r + 5, -90, angle_g - 90, 90, ColorAlpha(dyncol, 0.3)); + DrawCircleV(position + parentPosition, radius, dyncol); + //VISEQ::HELPER::DrawSuperText(std::format("{}", assignedValueRef), position + parentPosition, position + parentPosition + Vec2Df(50,0), 1, 0, 8, dyncol); + + /*if(show) {*/ + /* std::string text = std::format("{}", assignedValueRef);*/ + /* DrawCenteredText(text, parentPosition, 12, ColorBrightness(dyncol, 0.75f));*/ + /*}*/ + } + } - void lock(); - - void unlock(); - - virtual bool hovering() override; - - virtual void update(Vec2Df pos) override; - - virtual void draw() override; - - virtual bool select() override; + virtual bool select() override { + return false; + } NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(NodeHandle, position, name); }; diff --git a/src/state.cpp b/src/state.cpp index 63599f9..1ca3a72 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -8,12 +8,10 @@ namespace VISEQ::APP{ void State::pushEvent(InteractionEvent e){ - std::cout << "push event" << std::endl; event_queue.push_back(e); } InteractionEvent State::pullEvent(){ - std::cout << "pull event" << std::endl; if(!event_queue.empty()){ InteractionEvent e = event_queue.front(); event_queue.pop_front();