#pragma once #include "rack.hpp" using namespace rack; struct JWModuleResizeHandle : Widget { float minWidth; bool right = false; float dragX; Rect originalBox; JWModuleResizeHandle(float _minWidth) { box.size = Vec(RACK_GRID_WIDTH * 1, RACK_GRID_HEIGHT); minWidth = _minWidth; } void onMouseDown(EventMouseDown &e) override { if (e.button == 0) { e.consumed = true; e.target = this; } } void onDragStart(EventDragStart &e) override { dragX = RACK_PLUGIN_UI_RACKWIDGET->lastMousePos.x; ModuleWidget *m = getAncestorOfType(); originalBox = m->box; } void onDragMove(EventDragMove &e) override { ModuleWidget *m = getAncestorOfType(); float newDragX = RACK_PLUGIN_UI_RACKWIDGET->lastMousePos.x; float deltaX = newDragX - dragX; Rect newBox = originalBox; if (right) { newBox.size.x += deltaX; newBox.size.x = fmaxf(newBox.size.x, minWidth); newBox.size.x = roundf(newBox.size.x / RACK_GRID_WIDTH) * RACK_GRID_WIDTH; } else { newBox.size.x -= deltaX; newBox.size.x = fmaxf(newBox.size.x, minWidth); newBox.size.x = roundf(newBox.size.x / RACK_GRID_WIDTH) * RACK_GRID_WIDTH; newBox.pos.x = originalBox.pos.x + originalBox.size.x - newBox.size.x; } RACK_PLUGIN_UI_RACKWIDGET->requestModuleBox(m, newBox); } };