GUI: add nibble mode to randomize
This commit is contained in:
parent
de604bdf01
commit
7971b7323b
|
|
@ -3226,7 +3226,7 @@ void FurnaceGUI::doScale(float top) {
|
|||
makeUndo(GUI_UNDO_PATTERN_SCALE);
|
||||
}
|
||||
|
||||
void FurnaceGUI::doRandomize(int bottom, int top) {
|
||||
void FurnaceGUI::doRandomize(int bottom, int top, bool mode) {
|
||||
finishSelection();
|
||||
prepareUndo(GUI_UNDO_PATTERN_RANDOMIZE);
|
||||
|
||||
|
|
@ -3247,10 +3247,21 @@ void FurnaceGUI::doRandomize(int bottom, int top) {
|
|||
absoluteTop=e->getMaxVolumeChan(iCoarse);
|
||||
}
|
||||
for (int j=selStart.y; j<=selEnd.y; j++) {
|
||||
int value=0;
|
||||
int value2=0;
|
||||
if (top-bottom<=0) {
|
||||
pat->data[j][iFine+1]=MIN(absoluteTop,bottom);
|
||||
value=MIN(absoluteTop,bottom);
|
||||
value2=MIN(absoluteTop,bottom);
|
||||
} else {
|
||||
pat->data[j][iFine+1]=MIN(absoluteTop,bottom+(rand()%(top-bottom)));
|
||||
value=MIN(absoluteTop,bottom+(rand()%(top-bottom+1)));
|
||||
value2=MIN(absoluteTop,bottom+(rand()%(top-bottom+1)));
|
||||
}
|
||||
if (mode) {
|
||||
value&=15;
|
||||
value2&=15;
|
||||
pat->data[j][iFine+1]=value|(value2<<4);
|
||||
} else {
|
||||
pat->data[j][iFine+1]=value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -4883,17 +4894,34 @@ void FurnaceGUI::editOptions(bool topMenu) {
|
|||
if (ImGui::BeginMenu("randomize...")) {
|
||||
if (ImGui::InputInt("Minimum",&randomizeMin,1,1)) {
|
||||
if (randomizeMin<0) randomizeMin=0;
|
||||
if (randomMode) {
|
||||
if (randomizeMin>15) randomizeMin=15;
|
||||
} else {
|
||||
if (randomizeMin>255) randomizeMin=255;
|
||||
}
|
||||
if (randomizeMin>randomizeMax) randomizeMin=randomizeMax;
|
||||
}
|
||||
if (ImGui::InputInt("Maximum",&randomizeMax,1,1)) {
|
||||
if (randomizeMax<0) randomizeMax=0;
|
||||
if (randomizeMax<randomizeMin) randomizeMax=randomizeMin;
|
||||
if (randomMode) {
|
||||
if (randomizeMax>15) randomizeMax=15;
|
||||
} else {
|
||||
if (randomizeMax>255) randomizeMax=255;
|
||||
}
|
||||
}
|
||||
if (ImGui::Checkbox("Nibble mode",&randomMode)) {
|
||||
if (randomMode) {
|
||||
if (randomizeMin>15) randomizeMin=15;
|
||||
if (randomizeMax>15) randomizeMax=15;
|
||||
} else {
|
||||
if (randomizeMin>255) randomizeMin=255;
|
||||
if (randomizeMax>255) randomizeMax=255;
|
||||
}
|
||||
}
|
||||
// TODO: add an option to set effect to specific value?
|
||||
if (ImGui::Button("Randomize")) {
|
||||
doRandomize(randomizeMin,randomizeMax);
|
||||
doRandomize(randomizeMin,randomizeMax,randomMode);
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
|
|
@ -6717,6 +6745,7 @@ FurnaceGUI::FurnaceGUI():
|
|||
fadeMax(255),
|
||||
scaleMax(100.0f),
|
||||
fadeMode(false),
|
||||
randomMode(false),
|
||||
oldOrdersLen(0) {
|
||||
|
||||
// octave 1
|
||||
|
|
|
|||
|
|
@ -691,7 +691,7 @@ class FurnaceGUI {
|
|||
int dummyRows, demandX;
|
||||
int transposeAmount, randomizeMin, randomizeMax, fadeMin, fadeMax;
|
||||
float scaleMax;
|
||||
bool fadeMode;
|
||||
bool fadeMode, randomMode;
|
||||
|
||||
int oldOrdersLen;
|
||||
DivOrders oldOrders;
|
||||
|
|
@ -766,7 +766,7 @@ class FurnaceGUI {
|
|||
void doFade(int p0, int p1, bool mode);
|
||||
void doInvertValues();
|
||||
void doScale(float top);
|
||||
void doRandomize(int bottom, int top);
|
||||
void doRandomize(int bottom, int top, bool mode);
|
||||
void doFlip();
|
||||
void doCollapse(int divider);
|
||||
void doExpand(int multiplier);
|
||||
|
|
|
|||
Loading…
Reference in a new issue