Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ build*/
.idea
cmake-build-*
ignore/
_codeql_*
46 changes: 45 additions & 1 deletion Source/AlgoDisplay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,48 @@
#include "AlgoDisplay.h"
#include "DXLookNFeel.h"
#include "Dexed.h"
#include "PluginEditor.h"

AlgoDisplay::AlgoDisplay() {
static char tmpAlgo = 0;
algo = &tmpAlgo;
numOpPositions = 0;
editor = nullptr;
}

void AlgoDisplay::bind(DexedAudioProcessorEditor *edit) {
editor = edit;
}

void AlgoDisplay::storeOpPosition(char id, int x, int y) {
if (numOpPositions < MAX_OPERATORS) {
opPositions[numOpPositions].id = id;
opPositions[numOpPositions].x = x;
opPositions[numOpPositions].y = y;
opPositions[numOpPositions].width = OP_NUMBER_WIDTH;
opPositions[numOpPositions].height = OP_NUMBER_HEIGHT;
numOpPositions++;
}
}

void AlgoDisplay::mouseDown(const MouseEvent &event) {
if (editor == nullptr)
return;

int mouseX = event.x;
int mouseY = event.y;

// Check if click is on any operator number
for (int i = 0; i < numOpPositions; i++) {
if (mouseX >= opPositions[i].x && mouseX < opPositions[i].x + opPositions[i].width &&
mouseY >= opPositions[i].y && mouseY < opPositions[i].y + opPositions[i].height) {
// Toggle the operator switch
int opIndex = 6 - opPositions[i].id; // Convert to operator index (0-5)
editor->toggleOperator(opIndex);
repaint();
break;
}
}
}

void AlgoDisplay::displayOp(Graphics &g, char id, int x, int y, char link, char fb) {
Expand All @@ -37,6 +75,9 @@ void AlgoDisplay::displayOp(Graphics &g, char id, int x, int y, char link, char
y *= 21;
y += 5;

// Store operator position for mouse click detection
storeOpPosition(id, x, y);

if ( opOn )
g.setColour(Colours::white);
else
Expand Down Expand Up @@ -115,7 +156,10 @@ void AlgoDisplay::displayOp(Graphics &g, char id, int x, int y, char link, char

}

void AlgoDisplay::paint(Graphics &g) {
void AlgoDisplay::paint(Graphics &g) {
// Reset operator positions for this paint cycle
numOpPositions = 0;

g.setColour(DXLookNFeel::fillColour);
g.fillRect(1, 3, 20, 15);
String n = String(*algo +1);
Expand Down
19 changes: 19 additions & 0 deletions Source/AlgoDisplay.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,32 @@

#include "../JuceLibraryCode/JuceHeader.h"

class DexedAudioProcessorEditor;

class AlgoDisplay : public Component {
static const int MAX_OPERATORS = 6;
static const int OP_NUMBER_WIDTH = 16;
static const int OP_NUMBER_HEIGHT = 12;

struct OperatorPosition {
char id;
int x, y;
int width, height;
};

OperatorPosition opPositions[MAX_OPERATORS];
int numOpPositions;
DexedAudioProcessorEditor *editor;

void displayOp(Graphics &g, char id, int x, int y, char link, char fb);
void storeOpPosition(char id, int x, int y);
public:
const char *opStatus;
AlgoDisplay();
char *algo;
void paint(Graphics &g);
void mouseDown(const MouseEvent &event) override;
void bind(DexedAudioProcessorEditor *edit);
};

#endif // ALGODISPLAY_H_INCLUDED
1 change: 1 addition & 0 deletions Source/GlobalEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,7 @@ void GlobalEditor::bind(DexedAudioProcessorEditor *edit) {
pitchEnvDisplay->pvalues = &(processor->data[126]);

algoDisplay->opStatus = processor->controllers.opSwitch;
algoDisplay->bind(edit);

editor = edit;

Expand Down
7 changes: 7 additions & 0 deletions Source/PluginEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,13 @@ void DexedAudioProcessorEditor::initProgram() {
processor->resetToInitVoice();
}

void DexedAudioProcessorEditor::toggleOperator(int operatorIndex) {
if (operatorIndex >= 0 && operatorIndex < 6) {
operators[operatorIndex].toggleOpSwitch();
processor->forceRefreshUI = true;
}
}

void DexedAudioProcessorEditor::comboBoxChanged (ComboBox* comboBoxThatHasChanged) {
processor->setCurrentProgram(global.programs->getSelectedId()-1);
processor->updateHostDisplay();
Expand Down
1 change: 1 addition & 0 deletions Source/PluginEditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ class DexedAudioProcessorEditor : public AudioProcessorEditor, public ComboBox:
void parmShow();
void tuningShow();
void discoverMidiCC(Ctrl *ctrl);
void toggleOperator(int operatorIndex);

static float getLargestScaleFactor();

Expand Down
Loading