From 809f35189181488d1b0c7586b88c6fc2e910f0ab Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Sun, 26 May 2013 14:32:38 -0700 Subject: [PATCH] Implement pattern knobs here --- _Internals.pde | 2 +- _Overlay.pde | 39 +++++++++++++++++++++++++++++++-------- code/GLucose.jar | Bin 13798 -> 12998 bytes 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/_Internals.pde b/_Internals.pde index c93129f..05336ec 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -61,7 +61,7 @@ void setup() { logTime("Built overlay UI"); // MIDI devices - SCMidiDevices.initializeStandardDevices(glucose); + SCMidiDevices.initializeStandardDevices(glucose, ui.patternKnobs, ui.transitionKnobs, ui.effectKnobs); logTime("Setup MIDI devices"); println("Total setup: " + (millis() - startMillis) + "ms"); diff --git a/_Overlay.pde b/_Overlay.pde index dbf128b..3e661d8 100644 --- a/_Overlay.pde +++ b/_Overlay.pde @@ -41,14 +41,16 @@ class OverlayUI { private Method transitionStateMethod; private Method effectStateMethod; + private final int NUM_PATTERN_KNOBS = 8; private final int NUM_TRANSITION_KNOBS = 4; private final int NUM_EFFECT_KNOBS = 4; private int activeTransitionIndex = 0; private int activeEffectIndex = 0; - private final VirtualTransitionKnob[] transitionKnobs; - private final VirtualEffectKnob[] effectKnobs; + public final VirtualPatternKnob[] patternKnobs; + public final VirtualTransitionKnob[] transitionKnobs; + public final VirtualEffectKnob[] effectKnobs; OverlayUI() { leftPos = width - w; @@ -59,6 +61,11 @@ class OverlayUI { transitionNames = classNameArray(transitions, "Transition"); effectNames = classNameArray(effects, "Effect"); + patternKnobs = new VirtualPatternKnob[NUM_PATTERN_KNOBS]; + for (int i = 0; i < patternKnobs.length; ++i) { + patternKnobs[i] = new VirtualPatternKnob(i); + } + transitionKnobs = new VirtualTransitionKnob[NUM_TRANSITION_KNOBS]; for (int i = 0; i < transitionKnobs.length; ++i) { transitionKnobs[i] = new VirtualTransitionKnob(i); @@ -98,9 +105,9 @@ class OverlayUI { yPos += controlSpacing; firstPatternKnobY = yPos; int xPos = leftTextPos; - for (int i = 0; i < glucose.NUM_PATTERN_KNOBS/2; ++i) { - drawKnob(xPos, yPos, knobSize, glucose.patternKnobs[i]); - drawKnob(xPos, yPos + knobSize + knobSpacing + knobLabelHeight, knobSize, glucose.patternKnobs[glucose.NUM_PATTERN_KNOBS/2 + i]); + for (int i = 0; i < NUM_PATTERN_KNOBS/2; ++i) { + drawKnob(xPos, yPos, knobSize, patternKnobs[i]); + drawKnob(xPos, yPos + knobSize + knobSpacing + knobLabelHeight, knobSize, patternKnobs[NUM_PATTERN_KNOBS/2 + i]); xPos += knobSize + knobSpacing; } yPos += 2*(knobSize + knobLabelHeight) + knobSpacing; @@ -309,6 +316,22 @@ class OverlayUI { return s; } + class VirtualPatternKnob extends LXVirtualParameter { + private final int index; + + VirtualPatternKnob(int index) { + this.index = index; + } + + public LXParameter getRealParameter() { + List parameters = glucose.getPattern().getParameters(); + if (index < parameters.size()) { + return parameters.get(index); + } + return null; + } + } + class VirtualTransitionKnob extends LXVirtualParameter { private final int index; @@ -379,7 +402,7 @@ class OverlayUI { } else if ((mouseY >= firstPatternKnobY) && (mouseY < firstPatternKnobY + 2*(knobSize+knobLabelHeight) + knobSpacing)) { patternKnobIndex = (mouseX - leftTextPos) / (knobSize + knobSpacing); if (mouseY >= firstPatternKnobY + knobSize + knobLabelHeight + knobSpacing) { - patternKnobIndex += glucose.NUM_PATTERN_KNOBS / 2; + patternKnobIndex += NUM_PATTERN_KNOBS / 2; } } else if (mouseY > firstPatternY) { int patternIndex = (mouseY - firstPatternY) / lineHeight; @@ -393,8 +416,8 @@ class OverlayUI { public void mouseDragged() { int dy = lastY - mouseY; lastY = mouseY; - if (patternKnobIndex >= 0 && patternKnobIndex < glucose.NUM_PATTERN_KNOBS) { - LXParameter p = glucose.patternKnobs[patternKnobIndex]; + if (patternKnobIndex >= 0 && patternKnobIndex < NUM_PATTERN_KNOBS) { + LXParameter p = patternKnobs[patternKnobIndex]; p.setValue(constrain(p.getValuef() + dy*.01, 0, 1)); } else if (effectKnobIndex >= 0 && effectKnobIndex < NUM_EFFECT_KNOBS) { LXParameter p = effectKnobs[effectKnobIndex]; diff --git a/code/GLucose.jar b/code/GLucose.jar index 48c8de6a9c2ad6f105c054cd2a66ee553cbbe686..cc16b16bb425ef92031daf938c1062be05f2eb26 100644 GIT binary patch delta 2266 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