|
- #include "UI.hpp"
-
- namespace rack_plugin_AmalgamatedHarmonics {
-
- void UI::calculateKeyboard(int inKey, float spacing, float xOff, float yOff, float *x, float *y, int *scale) {
-
- // Sanitise input
- int key = inKey % 12;
-
- // White
- int whiteO [7] = {0, 1, 2, 3, 4, 5, 6}; // 'spaces' occupied by keys
- int whiteK [7] = {0, 2, 4, 5, 7, 9, 11}; // scale mapped to key
- // Black
- int blackO [5] = {0, 1, 3, 4, 5}; // 'spaces' occupied by keys
- int blackK [5] = {1, 3, 6, 8, 10}; // scale mapped to keys
-
- float bOffset = xOff + (spacing / 2);
- float bSpace = spacing;
- // Make an equilateral triangle pattern, tri height = base * (sqrt(3) / 2)
- float bDelta = bSpace * sqrt(3) * 0.5;
-
- // Are we black or white key?, check black keys
- for (int i = 0; i < 5; i++) {
- if (blackK[i] == key) {
- *x = bOffset + bSpace * blackO[i];
- *y = yOff - bDelta;
- *scale = blackK[i];
- return;
- }
- }
-
- int wOffset = xOff;
- int wSpace = spacing;
-
- for (int i = 0; i < 7; i++) {
- if (whiteK[i] == key) {
- *x = wOffset + wSpace * whiteO[i];
- *y = yOff;
- *scale = whiteK[i];
- return;
- }
- }
- }
-
- Vec UI::getPosition(int type, int xSlot, int ySlot, bool xDense, bool yDense) {
-
- float *xArray;
- float *yArray;
-
- switch(type) {
- case KNOB:
- if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; }
- if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; }
- break;
- case PORT:
- if (xDense) { xArray = X_PORT_COMPACT; } else { xArray = X_PORT; }
- if (yDense) { yArray = Y_PORT_COMPACT; } else { yArray = Y_PORT; }
- break;
- case BUTTON:
- if (xDense) { xArray = X_BUTTON_COMPACT; } else { xArray = X_BUTTON; }
- if (yDense) { yArray = Y_BUTTON_COMPACT; } else { yArray = Y_BUTTON; }
- break;
- case LIGHT:
- if (xDense) { xArray = X_LIGHT_COMPACT; } else { xArray = X_LIGHT; }
- if (yDense) { yArray = Y_LIGHT_COMPACT; } else { yArray = Y_LIGHT; }
- break;
- case TRIMPOT:
- if (xDense) { xArray = X_TRIMPOT_COMPACT; } else { xArray = X_TRIMPOT; }
- if (yDense) { yArray = Y_TRIMPOT_COMPACT; } else { yArray = Y_TRIMPOT; }
- break;
- default:
- if (xDense) { xArray = X_KNOB_COMPACT; } else { xArray = X_KNOB; }
- if (yDense) { yArray = Y_KNOB_COMPACT; } else { yArray = Y_KNOB; }
- }
-
- return Vec(xArray[0] + xArray[1] * xSlot, yArray[0] + yArray[1] * ySlot);
-
- }
-
- } // namespace rack_plugin_AmalgamatedHarmonics
|