mirror of
https://github.com/tildearrow/furnace.git
synced 2024-12-01 00:43:02 +00:00
parent
af30d4990a
commit
345962092e
11 changed files with 49 additions and 0 deletions
|
@ -220,6 +220,11 @@ class DivDispatch {
|
||||||
*/
|
*/
|
||||||
virtual void notifyInsChange(int ins);
|
virtual void notifyInsChange(int ins);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* notify wavetable change.
|
||||||
|
*/
|
||||||
|
virtual void notifyWaveChange(int wave);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* notify deletion of an instrument.
|
* notify deletion of an instrument.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2214,6 +2214,14 @@ void DivEngine::notifyInsChange(int ins) {
|
||||||
isBusy.unlock();
|
isBusy.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivEngine::notifyWaveChange(int wave) {
|
||||||
|
isBusy.lock();
|
||||||
|
for (int i=0; i<song.systemLen; i++) {
|
||||||
|
disCont[i].dispatch->notifyWaveChange(wave);
|
||||||
|
}
|
||||||
|
isBusy.unlock();
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define CONFIG_FILE "\\furnace.cfg"
|
#define CONFIG_FILE "\\furnace.cfg"
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -221,6 +221,8 @@ class DivEngine {
|
||||||
bool haltAudioFile();
|
bool haltAudioFile();
|
||||||
// notify instrument parameter change
|
// notify instrument parameter change
|
||||||
void notifyInsChange(int ins);
|
void notifyInsChange(int ins);
|
||||||
|
// notify wavetable change
|
||||||
|
void notifyWaveChange(int wave);
|
||||||
|
|
||||||
// save config
|
// save config
|
||||||
bool saveConf();
|
bool saveConf();
|
||||||
|
|
|
@ -50,6 +50,10 @@ void DivDispatch::notifyInsChange(int ins) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivDispatch::notifyWaveChange(int ins) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void DivDispatch::notifyInsDeletion(void* ins) {
|
void DivDispatch::notifyInsDeletion(void* ins) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,6 +219,10 @@ void DivPlatformAmiga::notifyInsChange(int ins) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivPlatformAmiga::notifyWaveChange(int wave) {
|
||||||
|
// TODO when wavetables are added
|
||||||
|
}
|
||||||
|
|
||||||
void DivPlatformAmiga::notifyInsDeletion(void* ins) {
|
void DivPlatformAmiga::notifyInsDeletion(void* ins) {
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
||||||
|
|
|
@ -55,6 +55,7 @@ class DivPlatformAmiga: public DivDispatch {
|
||||||
bool keyOffAffectsArp(int ch);
|
bool keyOffAffectsArp(int ch);
|
||||||
void setPAL(bool pal);
|
void setPAL(bool pal);
|
||||||
void notifyInsChange(int ins);
|
void notifyInsChange(int ins);
|
||||||
|
void notifyWaveChange(int wave);
|
||||||
void notifyInsDeletion(void* ins);
|
void notifyInsDeletion(void* ins);
|
||||||
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
||||||
void quit();
|
void quit();
|
||||||
|
|
|
@ -324,6 +324,13 @@ void DivPlatformGB::notifyInsChange(int ins) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivPlatformGB::notifyWaveChange(int wave) {
|
||||||
|
if (chan[2].wave==wave) {
|
||||||
|
updateWave();
|
||||||
|
if (!chan[2].keyOff) chan[2].keyOn=true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DivPlatformGB::notifyInsDeletion(void* ins) {
|
void DivPlatformGB::notifyInsDeletion(void* ins) {
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
||||||
|
|
|
@ -46,6 +46,7 @@ class DivPlatformGB: public DivDispatch {
|
||||||
void muteChannel(int ch, bool mute);
|
void muteChannel(int ch, bool mute);
|
||||||
bool isStereo();
|
bool isStereo();
|
||||||
void notifyInsChange(int ins);
|
void notifyInsChange(int ins);
|
||||||
|
void notifyWaveChange(int wave);
|
||||||
void notifyInsDeletion(void* ins);
|
void notifyInsDeletion(void* ins);
|
||||||
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
||||||
void quit();
|
void quit();
|
||||||
|
|
|
@ -313,6 +313,14 @@ bool DivPlatformPCE::keyOffAffectsArp(int ch) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DivPlatformPCE::notifyWaveChange(int wave) {
|
||||||
|
for (int i=0; i<6; i++) {
|
||||||
|
if (chan[i].wave==wave) {
|
||||||
|
updateWave(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DivPlatformPCE::notifyInsDeletion(void* ins) {
|
void DivPlatformPCE::notifyInsDeletion(void* ins) {
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
chan[i].std.notifyInsDeletion((DivInstrument*)ins);
|
||||||
|
|
|
@ -65,6 +65,7 @@ class DivPlatformPCE: public DivDispatch {
|
||||||
bool isStereo();
|
bool isStereo();
|
||||||
bool keyOffAffectsArp(int ch);
|
bool keyOffAffectsArp(int ch);
|
||||||
void setPAL(bool pal);
|
void setPAL(bool pal);
|
||||||
|
void notifyWaveChange(int wave);
|
||||||
void notifyInsDeletion(void* ins);
|
void notifyInsDeletion(void* ins);
|
||||||
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
int init(DivEngine* parent, int channels, int sugRate, bool pal);
|
||||||
void quit();
|
void quit();
|
||||||
|
|
|
@ -1132,6 +1132,8 @@ void FurnaceGUI::drawWaveEdit() {
|
||||||
if (ImGui::InputInt("##_WTW",&wave->len,1,2)) {
|
if (ImGui::InputInt("##_WTW",&wave->len,1,2)) {
|
||||||
if (wave->len>256) wave->len=256;
|
if (wave->len>256) wave->len=256;
|
||||||
if (wave->len<1) wave->len=1;
|
if (wave->len<1) wave->len=1;
|
||||||
|
e->notifyWaveChange(curWave);
|
||||||
|
modified=true;
|
||||||
}
|
}
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Text("Height");
|
ImGui::Text("Height");
|
||||||
|
@ -1143,6 +1145,8 @@ void FurnaceGUI::drawWaveEdit() {
|
||||||
if (ImGui::InputInt("##_WTH",&wave->max,1,2)) {
|
if (ImGui::InputInt("##_WTH",&wave->max,1,2)) {
|
||||||
if (wave->max>255) wave->max=255;
|
if (wave->max>255) wave->max=255;
|
||||||
if (wave->max<1) wave->max=1;
|
if (wave->max<1) wave->max=1;
|
||||||
|
e->notifyWaveChange(curWave);
|
||||||
|
modified=true;
|
||||||
}
|
}
|
||||||
for (int i=0; i<wave->len; i++) {
|
for (int i=0; i<wave->len; i++) {
|
||||||
wavePreview[i]=wave->data[i];
|
wavePreview[i]=wave->data[i];
|
||||||
|
@ -1160,6 +1164,8 @@ void FurnaceGUI::drawWaveEdit() {
|
||||||
waveDragActive=true;
|
waveDragActive=true;
|
||||||
waveDragTarget=wave->data;
|
waveDragTarget=wave->data;
|
||||||
processDrags(ImGui::GetMousePos().x,ImGui::GetMousePos().y);
|
processDrags(ImGui::GetMousePos().x,ImGui::GetMousePos().y);
|
||||||
|
e->notifyWaveChange(curWave);
|
||||||
|
modified=true;
|
||||||
}
|
}
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
}
|
}
|
||||||
|
@ -3026,6 +3032,8 @@ void FurnaceGUI::processDrags(int dragX, int dragY) {
|
||||||
if (y>waveDragMax) y=waveDragMax;
|
if (y>waveDragMax) y=waveDragMax;
|
||||||
if (y<waveDragMin) y=waveDragMin;
|
if (y<waveDragMin) y=waveDragMin;
|
||||||
waveDragTarget[x]=y;
|
waveDragTarget[x]=y;
|
||||||
|
e->notifyWaveChange(curWave);
|
||||||
|
modified=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue