Merge branch 'master' into doc-general
Cleaning up after previous merged PR.
This commit is contained in:
commit
aee459d8d3
BIN
demos/arcade/Physics_Exam_TaitoArcade.fur
Normal file
BIN
demos/arcade/Physics_Exam_TaitoArcade.fur
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
demos/misc/teddy_bear_midnight_jam_ted.fur
Normal file
BIN
demos/misc/teddy_bear_midnight_jam_ted.fur
Normal file
Binary file not shown.
|
@ -33,15 +33,15 @@ the following sound chips have sample support:
|
||||||
- Yamaha PCMD8/YMZ280B
|
- Yamaha PCMD8/YMZ280B
|
||||||
- MMC5 (last channel only)
|
- MMC5 (last channel only)
|
||||||
|
|
||||||
## compatible sample mode
|
## compatible sample mode (LEGACY)
|
||||||
|
|
||||||
effect `17xx` enables/disables compatible sample mode whether supported (e.g. on Sega Genesis or PC Engine).
|
**use of this mode is discouraged in favor of Sample type instruments.**
|
||||||
|
|
||||||
|
effect `17xx` enables/disables compatible sample mode where supported (e.g. on Sega Genesis or PC Engine).
|
||||||
|
|
||||||
in this mode, samples are mapped to notes in an octave from C to B, allowing you to use up to 12 samples.
|
in this mode, samples are mapped to notes in an octave from C to B, allowing you to use up to 12 samples.
|
||||||
if you need to use more samples, you may change the sample bank using effect `EBxx`.
|
if you need to use more samples, you may change the sample bank using effect `EBxx`.
|
||||||
|
|
||||||
use of this mode is discouraged in favor of Sample type instruments.
|
|
||||||
|
|
||||||
## notes
|
## notes
|
||||||
|
|
||||||
due to limitations in some of those sound chips, some restrictions exist:
|
due to limitations in some of those sound chips, some restrictions exist:
|
||||||
|
|
|
@ -18,8 +18,8 @@ furthermore, it has some PCM and LFO!
|
||||||
- `03`: LFO enabled, shift 8.
|
- `03`: LFO enabled, shift 8.
|
||||||
- when LFO is enabled, channel 2 is muted and its output is passed to channel 1's frequency.
|
- when LFO is enabled, channel 2 is muted and its output is passed to channel 1's frequency.
|
||||||
- `13xx`: **set LFO speed.**
|
- `13xx`: **set LFO speed.**
|
||||||
- `17xx`: **toggle PCM mode.**
|
- `17xx`: **toggle LEGACY sample mode.**
|
||||||
- _this effect is here for compatibility reasons_; it is otherwise recommended to use Sample type instruments (which automatically enable PCM mode when used).
|
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
|
||||||
|
|
||||||
# info
|
# info
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,8 @@ Furnace supports this routine for PCM playback, but it consumes a lot of CPU tim
|
||||||
these effects only are effective in the pulse channels.
|
these effects only are effective in the pulse channels.
|
||||||
|
|
||||||
- `12xx`: **set duty cycle.** range is `0` to `7`.
|
- `12xx`: **set duty cycle.** range is `0` to `7`.
|
||||||
- `17xx`: **toggle PCM mode.**
|
- `17xx`: **toggle LEGACY sample mode.**
|
||||||
|
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
|
||||||
|
|
||||||
# info
|
# info
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,8 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa
|
||||||
|
|
||||||
- `10xx`: **change wave.**
|
- `10xx`: **change wave.**
|
||||||
- `11xx`: **change envelope shape.** also wavetable.
|
- `11xx`: **change envelope shape.** also wavetable.
|
||||||
- `17xx`: **toggle PCM mode.**
|
- `17xx`: **toggle LEGACY sample mode.**
|
||||||
|
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
|
||||||
- `20xx`: **set PCM frequency.** range is `1` to `FF`.
|
- `20xx`: **set PCM frequency.** range is `1` to `FF`.
|
||||||
- PCM frequency formula: `step * (clock / 8192)`.
|
- PCM frequency formula: `step * (clock / 8192)`.
|
||||||
- range is 1.95KHz to 498KHz if the chip clock is 16MHz.
|
- range is 1.95KHz to 498KHz if the chip clock is 16MHz.
|
||||||
|
|
|
@ -16,8 +16,9 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel
|
||||||
- `16xy`: **set multiplier of operator.**
|
- `16xy`: **set multiplier of operator.**
|
||||||
- `x` is the operator (1-4).
|
- `x` is the operator (1-4).
|
||||||
- `y` is the multiplier.
|
- `y` is the multiplier.
|
||||||
- `17xx`: **enable PCM channel.**
|
- `17xx`: **toggle LEGACY sample mode.**
|
||||||
- this only works on channel 6.
|
- this only works on channel 6.
|
||||||
|
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
|
||||||
- `18xx`: **toggle extended channel 3 mode.**
|
- `18xx`: **toggle extended channel 3 mode.**
|
||||||
- 0 disables it and 1 enables it.
|
- 0 disables it and 1 enables it.
|
||||||
- only in extended channel 3 chip.
|
- only in extended channel 3 chip.
|
||||||
|
|
|
@ -107,7 +107,7 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan, bool notNul
|
||||||
case 0xea:
|
case 0xea:
|
||||||
return "EAxx: Legato";
|
return "EAxx: Legato";
|
||||||
case 0xeb:
|
case 0xeb:
|
||||||
return "EBxx: Set sample bank";
|
return "EBxx: Set LEGACY sample mode bank";
|
||||||
case 0xec:
|
case 0xec:
|
||||||
return "ECxx: Note cut";
|
return "ECxx: Note cut";
|
||||||
case 0xed:
|
case 0xed:
|
||||||
|
|
|
@ -451,7 +451,7 @@ void DivEngine::registerSystems() {
|
||||||
|
|
||||||
EffectHandlerMap fmOPN2EffectHandlerMap(fmEffectHandlerMap);
|
EffectHandlerMap fmOPN2EffectHandlerMap(fmEffectHandlerMap);
|
||||||
fmOPN2EffectHandlerMap.insert({
|
fmOPN2EffectHandlerMap.insert({
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode"}},
|
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}},
|
||||||
{0xdf, {DIV_CMD_SAMPLE_DIR, "DFxx: Set sample playback direction (0: normal; 1: reverse)"}},
|
{0xdf, {DIV_CMD_SAMPLE_DIR, "DFxx: Set sample playback direction (0: normal; 1: reverse)"}},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -681,7 +681,7 @@ void DivEngine::registerSystems() {
|
||||||
{0x11, {DIV_CMD_STD_NOISE_MODE, "11xx: Toggle noise mode"}},
|
{0x11, {DIV_CMD_STD_NOISE_MODE, "11xx: Toggle noise mode"}},
|
||||||
{0x12, {DIV_CMD_PCE_LFO_MODE, "12xx: Setup LFO (0: disabled; 1: 1x depth; 2: 16x depth; 3: 256x depth)"}},
|
{0x12, {DIV_CMD_PCE_LFO_MODE, "12xx: Setup LFO (0: disabled; 1: 1x depth; 2: 16x depth; 3: 256x depth)"}},
|
||||||
{0x13, {DIV_CMD_PCE_LFO_SPEED, "13xx: Set LFO speed"}},
|
{0x13, {DIV_CMD_PCE_LFO_SPEED, "13xx: Set LFO speed"}},
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode"}}
|
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -939,7 +939,7 @@ void DivEngine::registerSystems() {
|
||||||
{DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_NULL},
|
{DIV_INS_AMIGA, DIV_INS_AMIGA, DIV_INS_NULL},
|
||||||
{
|
{
|
||||||
{0x12, {DIV_CMD_STD_NOISE_MODE, "12xx: Set duty cycle (pulse: 0 to 7)"}},
|
{0x12, {DIV_CMD_STD_NOISE_MODE, "12xx: Set duty cycle (pulse: 0 to 7)"}},
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (pulse channel)"}},
|
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1182,7 +1182,7 @@ void DivEngine::registerSystems() {
|
||||||
{0x11, {DIV_CMD_STD_NOISE_MODE, "11xx: Setup noise mode (0: disabled; 1-8: enabled/tap)"}},
|
{0x11, {DIV_CMD_STD_NOISE_MODE, "11xx: Setup noise mode (0: disabled; 1-8: enabled/tap)"}},
|
||||||
{0x12, {DIV_CMD_WS_SWEEP_TIME, "12xx: Setup sweep period (0: disabled; 1-20: enabled/period)"}},
|
{0x12, {DIV_CMD_WS_SWEEP_TIME, "12xx: Setup sweep period (0: disabled; 1-20: enabled/period)"}},
|
||||||
{0x13, {DIV_CMD_WS_SWEEP_AMOUNT, "13xx: Set sweep amount"}},
|
{0x13, {DIV_CMD_WS_SWEEP_AMOUNT, "13xx: Set sweep amount"}},
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode"}},
|
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}},
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1497,7 +1497,7 @@ void DivEngine::registerSystems() {
|
||||||
{0x10, {DIV_CMD_WAVE, "10xx: Set waveform"}},
|
{0x10, {DIV_CMD_WAVE, "10xx: Set waveform"}},
|
||||||
{0x11, {DIV_CMD_X1_010_ENVELOPE_SHAPE, "11xx: Set envelope shape"}},
|
{0x11, {DIV_CMD_X1_010_ENVELOPE_SHAPE, "11xx: Set envelope shape"}},
|
||||||
{0x12, {DIV_CMD_X1_010_SAMPLE_BANK_SLOT, "12xx: Set sample bank slot (0 to 7)"}},
|
{0x12, {DIV_CMD_X1_010_SAMPLE_BANK_SLOT, "12xx: Set sample bank slot (0 to 7)"}},
|
||||||
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode"}},
|
{0x17, {DIV_CMD_SAMPLE_MODE, "17xx: Toggle PCM mode (LEGACY)"}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{0x20, {DIV_CMD_SAMPLE_FREQ, "20xx: Set PCM frequency (1 to FF)"}},
|
{0x20, {DIV_CMD_SAMPLE_FREQ, "20xx: Set PCM frequency (1 to FF)"}},
|
||||||
|
|
|
@ -407,13 +407,10 @@ void FurnaceGUI::sampleListItem(int i, int dir, int asset) {
|
||||||
lastAssetType=2;
|
lastAssetType=2;
|
||||||
}
|
}
|
||||||
if (ImGui::IsItemHovered() && !mobileUI) {
|
if (ImGui::IsItemHovered() && !mobileUI) {
|
||||||
ImGui::PushStyleColor(ImGuiCol_Text,uiColors[GUI_COLOR_TEXT]);
|
|
||||||
ImGui::SetTooltip("(legacy bank %d: %s)",i/12,sampleNote[i%12]);
|
|
||||||
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {
|
||||||
sampleEditOpen=true;
|
sampleEditOpen=true;
|
||||||
nextWindow=GUI_WINDOW_SAMPLE_EDIT;
|
nextWindow=GUI_WINDOW_SAMPLE_EDIT;
|
||||||
}
|
}
|
||||||
ImGui::PopStyleColor();
|
|
||||||
}
|
}
|
||||||
if (sampleListDir || (settings.unifiedDataView && insListDir)) {
|
if (sampleListDir || (settings.unifiedDataView && insListDir)) {
|
||||||
DRAG_SOURCE(dir,asset,"FUR_SDIR");
|
DRAG_SOURCE(dir,asset,"FUR_SDIR");
|
||||||
|
|
|
@ -1128,18 +1128,22 @@ void FurnaceGUI::stopPreviewNote(SDL_Scancode scancode, bool autoNote) {
|
||||||
|
|
||||||
void FurnaceGUI::noteInput(int num, int key, int vol) {
|
void FurnaceGUI::noteInput(int num, int key, int vol) {
|
||||||
DivPattern* pat=e->curPat[cursor.xCoarse].getPattern(e->curOrders->ord[cursor.xCoarse][curOrder],true);
|
DivPattern* pat=e->curPat[cursor.xCoarse].getPattern(e->curOrders->ord[cursor.xCoarse][curOrder],true);
|
||||||
|
bool removeIns=false;
|
||||||
|
|
||||||
prepareUndo(GUI_UNDO_PATTERN_EDIT);
|
prepareUndo(GUI_UNDO_PATTERN_EDIT);
|
||||||
|
|
||||||
if (key==GUI_NOTE_OFF) { // note off
|
if (key==GUI_NOTE_OFF) { // note off
|
||||||
pat->data[cursor.y][0]=100;
|
pat->data[cursor.y][0]=100;
|
||||||
pat->data[cursor.y][1]=0;
|
pat->data[cursor.y][1]=0;
|
||||||
|
removeIns=true;
|
||||||
} else if (key==GUI_NOTE_OFF_RELEASE) { // note off + env release
|
} else if (key==GUI_NOTE_OFF_RELEASE) { // note off + env release
|
||||||
pat->data[cursor.y][0]=101;
|
pat->data[cursor.y][0]=101;
|
||||||
pat->data[cursor.y][1]=0;
|
pat->data[cursor.y][1]=0;
|
||||||
|
removeIns=true;
|
||||||
} else if (key==GUI_NOTE_RELEASE) { // env release only
|
} else if (key==GUI_NOTE_RELEASE) { // env release only
|
||||||
pat->data[cursor.y][0]=102;
|
pat->data[cursor.y][0]=102;
|
||||||
pat->data[cursor.y][1]=0;
|
pat->data[cursor.y][1]=0;
|
||||||
|
removeIns=true;
|
||||||
} else {
|
} else {
|
||||||
pat->data[cursor.y][0]=num%12;
|
pat->data[cursor.y][0]=num%12;
|
||||||
pat->data[cursor.y][1]=num/12;
|
pat->data[cursor.y][1]=num/12;
|
||||||
|
@ -1165,6 +1169,14 @@ void FurnaceGUI::noteInput(int num, int key, int vol) {
|
||||||
if (latchEffect!=-1) pat->data[cursor.y][4]=latchEffect;
|
if (latchEffect!=-1) pat->data[cursor.y][4]=latchEffect;
|
||||||
if (latchEffectVal!=-1) pat->data[cursor.y][5]=latchEffectVal;
|
if (latchEffectVal!=-1) pat->data[cursor.y][5]=latchEffectVal;
|
||||||
}
|
}
|
||||||
|
if (removeIns) {
|
||||||
|
if (settings.removeInsOff) {
|
||||||
|
pat->data[cursor.y][2]=-1;
|
||||||
|
}
|
||||||
|
if (settings.removeVolOff) {
|
||||||
|
pat->data[cursor.y][3]=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
makeUndo(GUI_UNDO_PATTERN_EDIT);
|
makeUndo(GUI_UNDO_PATTERN_EDIT);
|
||||||
editAdvance();
|
editAdvance();
|
||||||
curNibble=false;
|
curNibble=false;
|
||||||
|
@ -2100,6 +2112,7 @@ int FurnaceGUI::save(String path, int dmfVersion) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int FurnaceGUI::load(String path) {
|
int FurnaceGUI::load(String path) {
|
||||||
|
bool wasPlaying=e->isPlaying();
|
||||||
if (!path.empty()) {
|
if (!path.empty()) {
|
||||||
logI("loading module...");
|
logI("loading module...");
|
||||||
FILE* f=ps_fopen(path.c_str(),"rb");
|
FILE* f=ps_fopen(path.c_str(),"rb");
|
||||||
|
@ -2176,6 +2189,12 @@ int FurnaceGUI::load(String path) {
|
||||||
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
showWarning(e->getWarnings(),GUI_WARN_GENERIC);
|
||||||
}
|
}
|
||||||
pushRecentFile(path);
|
pushRecentFile(path);
|
||||||
|
// do not auto-play a backup
|
||||||
|
if (path.find(backupPath)!=0) {
|
||||||
|
if (settings.playOnLoad==2 || (settings.playOnLoad==1 && wasPlaying)) {
|
||||||
|
play();
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6706,6 +6725,13 @@ bool FurnaceGUI::finish() {
|
||||||
SDL_HapticClose(vibrator);
|
SDL_HapticClose(vibrator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<DIV_MAX_OUTPUTS; i++) {
|
||||||
|
if (oscValues[i]) {
|
||||||
|
delete[] oscValues[i];
|
||||||
|
oscValues[i]=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
for (int i=0; i<DIV_MAX_CHANS; i++) {
|
||||||
delete oldPat[i];
|
delete oldPat[i];
|
||||||
}
|
}
|
||||||
|
@ -7102,8 +7128,11 @@ FurnaceGUI::FurnaceGUI():
|
||||||
displayInternalPorts(false),
|
displayInternalPorts(false),
|
||||||
subPortPos(0.0f,0.0f),
|
subPortPos(0.0f,0.0f),
|
||||||
oscTotal(0),
|
oscTotal(0),
|
||||||
|
oscWidth(512),
|
||||||
oscZoom(0.5f),
|
oscZoom(0.5f),
|
||||||
oscWindowSize(20.0f),
|
oscWindowSize(20.0f),
|
||||||
|
oscInput(0.0f),
|
||||||
|
oscInput1(0.0f),
|
||||||
oscZoomSlider(false),
|
oscZoomSlider(false),
|
||||||
chanOscCols(3),
|
chanOscCols(3),
|
||||||
chanOscAutoColsType(0),
|
chanOscAutoColsType(0),
|
||||||
|
@ -7217,7 +7246,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
memset(patChanX,0,sizeof(float)*(DIV_MAX_CHANS+1));
|
memset(patChanX,0,sizeof(float)*(DIV_MAX_CHANS+1));
|
||||||
memset(patChanSlideY,0,sizeof(float)*(DIV_MAX_CHANS+1));
|
memset(patChanSlideY,0,sizeof(float)*(DIV_MAX_CHANS+1));
|
||||||
memset(lastIns,-1,sizeof(int)*DIV_MAX_CHANS);
|
memset(lastIns,-1,sizeof(int)*DIV_MAX_CHANS);
|
||||||
memset(oscValues,0,sizeof(float)*512);
|
memset(oscValues,0,sizeof(void*)*DIV_MAX_OUTPUTS);
|
||||||
|
|
||||||
memset(chanOscLP0,0,sizeof(float)*DIV_MAX_CHANS);
|
memset(chanOscLP0,0,sizeof(float)*DIV_MAX_CHANS);
|
||||||
memset(chanOscLP1,0,sizeof(float)*DIV_MAX_CHANS);
|
memset(chanOscLP1,0,sizeof(float)*DIV_MAX_CHANS);
|
||||||
|
|
|
@ -152,6 +152,22 @@ enum FurnaceGUIColors {
|
||||||
GUI_COLOR_OSC_BORDER,
|
GUI_COLOR_OSC_BORDER,
|
||||||
GUI_COLOR_OSC_WAVE,
|
GUI_COLOR_OSC_WAVE,
|
||||||
GUI_COLOR_OSC_WAVE_PEAK,
|
GUI_COLOR_OSC_WAVE_PEAK,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH0,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH1,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH2,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH3,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH4,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH5,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH6,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH7,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH8,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH9,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH10,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH11,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH12,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH13,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH14,
|
||||||
|
GUI_COLOR_OSC_WAVE_CH15,
|
||||||
GUI_COLOR_OSC_REF,
|
GUI_COLOR_OSC_REF,
|
||||||
GUI_COLOR_OSC_GUIDE,
|
GUI_COLOR_OSC_GUIDE,
|
||||||
|
|
||||||
|
@ -1461,6 +1477,8 @@ class FurnaceGUI {
|
||||||
int oscTakesEntireWindow;
|
int oscTakesEntireWindow;
|
||||||
int oscBorder;
|
int oscBorder;
|
||||||
int oscEscapesBoundary;
|
int oscEscapesBoundary;
|
||||||
|
int oscMono;
|
||||||
|
int oscAntiAlias;
|
||||||
int separateFMColors;
|
int separateFMColors;
|
||||||
int insEditColorize;
|
int insEditColorize;
|
||||||
int metroVol;
|
int metroVol;
|
||||||
|
@ -1527,6 +1545,9 @@ class FurnaceGUI {
|
||||||
int memUsageUnit;
|
int memUsageUnit;
|
||||||
int cursorFollowsWheel;
|
int cursorFollowsWheel;
|
||||||
int noDMFCompat;
|
int noDMFCompat;
|
||||||
|
int removeInsOff;
|
||||||
|
int removeVolOff;
|
||||||
|
int playOnLoad;
|
||||||
unsigned int maxUndoSteps;
|
unsigned int maxUndoSteps;
|
||||||
String mainFontPath;
|
String mainFontPath;
|
||||||
String headFontPath;
|
String headFontPath;
|
||||||
|
@ -1619,6 +1640,8 @@ class FurnaceGUI {
|
||||||
oscTakesEntireWindow(0),
|
oscTakesEntireWindow(0),
|
||||||
oscBorder(1),
|
oscBorder(1),
|
||||||
oscEscapesBoundary(0),
|
oscEscapesBoundary(0),
|
||||||
|
oscMono(1),
|
||||||
|
oscAntiAlias(1),
|
||||||
separateFMColors(0),
|
separateFMColors(0),
|
||||||
insEditColorize(0),
|
insEditColorize(0),
|
||||||
metroVol(100),
|
metroVol(100),
|
||||||
|
@ -1684,6 +1707,9 @@ class FurnaceGUI {
|
||||||
memUsageUnit(1),
|
memUsageUnit(1),
|
||||||
cursorFollowsWheel(0),
|
cursorFollowsWheel(0),
|
||||||
noDMFCompat(0),
|
noDMFCompat(0),
|
||||||
|
removeInsOff(0),
|
||||||
|
removeVolOff(0),
|
||||||
|
playOnLoad(0),
|
||||||
maxUndoSteps(100),
|
maxUndoSteps(100),
|
||||||
mainFontPath(""),
|
mainFontPath(""),
|
||||||
headFontPath(""),
|
headFontPath(""),
|
||||||
|
@ -1969,10 +1995,11 @@ class FurnaceGUI {
|
||||||
ImVec2 subPortPos;
|
ImVec2 subPortPos;
|
||||||
|
|
||||||
// oscilloscope
|
// oscilloscope
|
||||||
int oscTotal;
|
int oscTotal, oscWidth;
|
||||||
float oscValues[512];
|
float* oscValues[DIV_MAX_OUTPUTS];
|
||||||
float oscZoom;
|
float oscZoom;
|
||||||
float oscWindowSize;
|
float oscWindowSize;
|
||||||
|
float oscInput, oscInput1;
|
||||||
bool oscZoomSlider;
|
bool oscZoomSlider;
|
||||||
|
|
||||||
// per-channel oscilloscope
|
// per-channel oscilloscope
|
||||||
|
|
|
@ -828,6 +828,22 @@ const FurnaceGUIColorDef guiColors[GUI_COLOR_MAX]={
|
||||||
D(GUI_COLOR_OSC_BORDER,"",ImVec4(0.4f,0.6f,0.95f,1.0f)),
|
D(GUI_COLOR_OSC_BORDER,"",ImVec4(0.4f,0.6f,0.95f,1.0f)),
|
||||||
D(GUI_COLOR_OSC_WAVE,"",ImVec4(0.95f,0.95f,1.0f,1.0f)),
|
D(GUI_COLOR_OSC_WAVE,"",ImVec4(0.95f,0.95f,1.0f,1.0f)),
|
||||||
D(GUI_COLOR_OSC_WAVE_PEAK,"",ImVec4(0.95f,0.95f,1.0f,1.0f)),
|
D(GUI_COLOR_OSC_WAVE_PEAK,"",ImVec4(0.95f,0.95f,1.0f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH0,"",ImVec4(1.0f,1.0f,1.0f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH1,"",ImVec4(1.0f,0.2f,0.2f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH2,"",ImVec4(0.1f,0.5f,1.0f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH3,"",ImVec4(0.5f,0.5f,0.5f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH4,"",ImVec4(0.7f,0.2f,0.7f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH5,"",ImVec4(0.2f,1.0f,0.2f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH6,"",ImVec4(1.0f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH7,"",ImVec4(1.0f,0.5f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH8,"",ImVec4(0.9f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH9,"",ImVec4(0.8f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH10,"",ImVec4(0.7f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH11,"",ImVec4(0.6f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH12,"",ImVec4(0.5f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH13,"",ImVec4(0.4f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH14,"",ImVec4(0.3f,1.0f,0.1f,1.0f)),
|
||||||
|
D(GUI_COLOR_OSC_WAVE_CH15,"",ImVec4(0.2f,1.0f,0.1f,1.0f)),
|
||||||
D(GUI_COLOR_OSC_REF,"",ImVec4(0.3,0.65f,1.0f,0.15f)),
|
D(GUI_COLOR_OSC_REF,"",ImVec4(0.3,0.65f,1.0f,0.15f)),
|
||||||
D(GUI_COLOR_OSC_GUIDE,"",ImVec4(0.3,0.65f,1.0f,0.13f)),
|
D(GUI_COLOR_OSC_GUIDE,"",ImVec4(0.3,0.65f,1.0f,0.13f)),
|
||||||
|
|
||||||
|
|
108
src/gui/osc.cpp
108
src/gui/osc.cpp
|
@ -20,6 +20,8 @@
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
#include "imgui_internal.h"
|
#include "imgui_internal.h"
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
|
#include "../ta-log.h"
|
||||||
|
#include "../engine/filter.h"
|
||||||
|
|
||||||
void FurnaceGUI::readOsc() {
|
void FurnaceGUI::readOsc() {
|
||||||
int writePos=e->oscWritePos;
|
int writePos=e->oscWritePos;
|
||||||
|
@ -47,18 +49,51 @@ void FurnaceGUI::readOsc() {
|
||||||
|
|
||||||
int winSize=e->getAudioDescGot().rate*(oscWindowSize/1000.0);
|
int winSize=e->getAudioDescGot().rate*(oscWindowSize/1000.0);
|
||||||
int oscReadPos=(writePos-winSize)&0x7fff;
|
int oscReadPos=(writePos-winSize)&0x7fff;
|
||||||
for (int i=0; i<512; i++) {
|
|
||||||
int pos=(oscReadPos+(i*winSize/512))&0x7fff;
|
|
||||||
oscValues[i]=0;
|
|
||||||
for (int j=0; j<e->getAudioDescGot().outChans; j++) {
|
|
||||||
oscValues[i]+=e->oscBuf[j][pos];
|
|
||||||
}
|
|
||||||
oscValues[i]/=e->getAudioDescGot().outChans;
|
|
||||||
|
|
||||||
if (oscValues[i]>0.001f || oscValues[i]<-0.001f) {
|
for (int ch=0; ch<e->getAudioDescGot().outChans; ch++) {
|
||||||
|
if (oscValues[ch]==NULL) {
|
||||||
|
oscValues[ch]=new float[1024];
|
||||||
|
}
|
||||||
|
memset(oscValues[ch],0,1024*sizeof(float));
|
||||||
|
float* sincITable=DivFilterTables::getSincIntegralTable();
|
||||||
|
|
||||||
|
float posFrac=0.0;
|
||||||
|
int posInt=oscReadPos;
|
||||||
|
float factor=(float)oscWidth/(float)winSize;
|
||||||
|
for (int i=0; i<oscWidth; i++) {
|
||||||
|
oscValues[ch][i]+=e->oscBuf[ch][posInt&0x7fff];
|
||||||
|
|
||||||
|
posFrac+=1.0;
|
||||||
|
while (posFrac>=1.0) {
|
||||||
|
unsigned int n=((unsigned int)(posFrac*8192.0))&8191;
|
||||||
|
posFrac-=factor;
|
||||||
|
posInt++;
|
||||||
|
|
||||||
|
float* t1=&sincITable[(8191-n)<<3];
|
||||||
|
float* t2=&sincITable[n<<3];
|
||||||
|
float delta=e->oscBuf[ch][posInt&0x7fff]-e->oscBuf[ch][(posInt-1)&0x7fff];
|
||||||
|
|
||||||
|
for (int j=0; j<8; j++) {
|
||||||
|
if (i-j>0) {
|
||||||
|
oscValues[ch][i-j]+=t1[j]*-delta;
|
||||||
|
}
|
||||||
|
if (i+j+1<oscWidth) {
|
||||||
|
oscValues[ch][i+j+1]+=t2[j]*delta;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<oscWidth; i++) {
|
||||||
|
if (oscValues[ch][i]>0.001f || oscValues[ch][i]<-0.001f) {
|
||||||
WAKE_UP;
|
WAKE_UP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*for (int i=0; i<oscWidth; i++) {
|
||||||
|
oscValues[i]=(i&1)?0.3:0;
|
||||||
|
}*/
|
||||||
|
|
||||||
float peakDecay=0.05f*60.0f*ImGui::GetIO().DeltaTime;
|
float peakDecay=0.05f*60.0f*ImGui::GetIO().DeltaTime;
|
||||||
for (int i=0; i<e->getAudioDescGot().outChans; i++) {
|
for (int i=0; i<e->getAudioDescGot().outChans; i++) {
|
||||||
|
@ -124,7 +159,7 @@ void FurnaceGUI::drawOsc() {
|
||||||
ImDrawList* dl=ImGui::GetWindowDrawList();
|
ImDrawList* dl=ImGui::GetWindowDrawList();
|
||||||
ImGuiWindow* window=ImGui::GetCurrentWindow();
|
ImGuiWindow* window=ImGui::GetCurrentWindow();
|
||||||
|
|
||||||
ImVec2 waveform[512];
|
ImVec2 waveform[1024];
|
||||||
ImVec2 size=ImGui::GetContentRegionAvail();
|
ImVec2 size=ImGui::GetContentRegionAvail();
|
||||||
|
|
||||||
ImVec2 minArea=window->DC.CursorPos;
|
ImVec2 minArea=window->DC.CursorPos;
|
||||||
|
@ -211,22 +246,67 @@ void FurnaceGUI::drawOsc() {
|
||||||
dpiScale
|
dpiScale
|
||||||
);
|
);
|
||||||
|
|
||||||
for (size_t i=0; i<512; i++) {
|
oscWidth=round(inRect.Max.x-inRect.Min.x);
|
||||||
float x=(float)i/512.0f;
|
if (oscWidth<1) oscWidth=1;
|
||||||
float y=oscValues[i]*oscZoom;
|
if (oscWidth>1024) oscWidth=1024;
|
||||||
|
|
||||||
|
ImDrawListFlags prevFlags=dl->Flags;
|
||||||
|
if (!settings.oscAntiAlias) {
|
||||||
|
dl->Flags&=~(ImDrawListFlags_AntiAliasedLines|ImDrawListFlags_AntiAliasedLinesUseTex);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.oscMono) {
|
||||||
|
for (int i=0; i<oscWidth; i++) {
|
||||||
|
float x=(float)i/(float)oscWidth;
|
||||||
|
float avg=0;
|
||||||
|
for (int j=0; j<e->getAudioDescGot().outChans; j++) {
|
||||||
|
avg+=oscValues[j][i];
|
||||||
|
}
|
||||||
|
avg/=e->getAudioDescGot().outChans;
|
||||||
|
|
||||||
|
float y=avg*oscZoom;
|
||||||
if (!settings.oscEscapesBoundary) {
|
if (!settings.oscEscapesBoundary) {
|
||||||
if (y<-0.5f) y=-0.5f;
|
if (y<-0.5f) y=-0.5f;
|
||||||
if (y>0.5f) y=0.5f;
|
if (y>0.5f) y=0.5f;
|
||||||
}
|
}
|
||||||
waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y));
|
waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.oscEscapesBoundary) {
|
if (settings.oscEscapesBoundary) {
|
||||||
dl->PushClipRectFullScreen();
|
dl->PushClipRectFullScreen();
|
||||||
dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale);
|
dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale);
|
||||||
dl->PopClipRect();
|
dl->PopClipRect();
|
||||||
} else {
|
} else {
|
||||||
dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale);
|
dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
for (int ch=0; ch<e->getAudioDescGot().outChans; ch++) {
|
||||||
|
for (int i=0; i<oscWidth; i++) {
|
||||||
|
float x=(float)i/(float)oscWidth;
|
||||||
|
float y=oscValues[ch][i]*oscZoom;
|
||||||
|
if (!settings.oscEscapesBoundary) {
|
||||||
|
if (y<-0.5f) y=-0.5f;
|
||||||
|
if (y>0.5f) y=0.5f;
|
||||||
|
}
|
||||||
|
waveform[i]=ImLerp(inRect.Min,inRect.Max,ImVec2(x,0.5f-y));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isClipping) {
|
||||||
|
color=ImGui::GetColorU32(uiColors[GUI_COLOR_OSC_WAVE_CH0+ch]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (settings.oscEscapesBoundary) {
|
||||||
|
dl->PushClipRectFullScreen();
|
||||||
|
dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale);
|
||||||
|
dl->PopClipRect();
|
||||||
|
} else {
|
||||||
|
dl->AddPolyline(waveform,oscWidth,color,ImDrawFlags_None,dpiScale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dl->Flags=prevFlags;
|
||||||
|
|
||||||
if (settings.oscBorder) {
|
if (settings.oscBorder) {
|
||||||
dl->AddRect(inRect.Min,inRect.Max,borderColor,settings.oscRoundedCorners?(8.0f*dpiScale):0.0f,0,1.5f*dpiScale);
|
dl->AddRect(inRect.Min,inRect.Max,borderColor,settings.oscRoundedCorners?(8.0f*dpiScale):0.0f,0,1.5f*dpiScale);
|
||||||
}
|
}
|
||||||
|
|
|
@ -437,11 +437,26 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::SetTooltip("do not report any issues arising from the use of this option!");
|
ImGui::SetTooltip("do not report any issues arising from the use of this option!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::Text("Play after opening song:");
|
||||||
|
ImGui::Indent();
|
||||||
|
if (ImGui::RadioButton("No##pol0",settings.playOnLoad==0)) {
|
||||||
|
settings.playOnLoad=0;
|
||||||
|
}
|
||||||
|
if (ImGui::RadioButton("Only if already playing##pol1",settings.playOnLoad==1)) {
|
||||||
|
settings.playOnLoad=1;
|
||||||
|
}
|
||||||
|
if (ImGui::RadioButton("Yes##pol0",settings.playOnLoad==2)) {
|
||||||
|
settings.playOnLoad=2;
|
||||||
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Audio export loop/fade out time:");
|
ImGui::Text("Audio export loop/fade out time:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) {
|
if (ImGui::RadioButton("Set to these values on start-up:##fot0",settings.persistFadeOut==0)) {
|
||||||
settings.persistFadeOut=0;
|
settings.persistFadeOut=0;
|
||||||
}
|
}
|
||||||
ImGui::BeginDisabled(settings.persistFadeOut);
|
ImGui::BeginDisabled(settings.persistFadeOut);
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) {
|
if (ImGui::InputInt("Loops",&settings.exportLoops,1,2)) {
|
||||||
if (exportLoops<0) exportLoops=0;
|
if (exportLoops<0) exportLoops=0;
|
||||||
exportLoops=settings.exportLoops;
|
exportLoops=settings.exportLoops;
|
||||||
|
@ -450,10 +465,12 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (exportFadeOut<0.0) exportFadeOut=0.0;
|
if (exportFadeOut<0.0) exportFadeOut=0.0;
|
||||||
exportFadeOut=settings.exportFadeOut;
|
exportFadeOut=settings.exportFadeOut;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) {
|
if (ImGui::RadioButton("Remember last values##fot1",settings.persistFadeOut==1)) {
|
||||||
settings.persistFadeOut=1;
|
settings.persistFadeOut=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION CHIP
|
// SUBSECTION CHIP
|
||||||
CONFIG_SUBSECTION("Chip");
|
CONFIG_SUBSECTION("Chip");
|
||||||
|
@ -645,12 +662,14 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("When creating new song:");
|
ImGui::Text("When creating new song:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) {
|
if (ImGui::RadioButton("Display system preset selector##NSB0",settings.newSongBehavior==0)) {
|
||||||
settings.newSongBehavior=0;
|
settings.newSongBehavior=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) {
|
if (ImGui::RadioButton("Start with initial system##NSB1",settings.newSongBehavior==1)) {
|
||||||
settings.newSongBehavior=1;
|
settings.newSongBehavior=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool restartOnFlagChangeB=settings.restartOnFlagChange;
|
bool restartOnFlagChangeB=settings.restartOnFlagChange;
|
||||||
if (ImGui::Checkbox("Restart song when changing chip properties",&restartOnFlagChangeB)) {
|
if (ImGui::Checkbox("Restart song when changing chip properties",&restartOnFlagChangeB)) {
|
||||||
|
@ -660,6 +679,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
// SUBSECTION START-UP
|
// SUBSECTION START-UP
|
||||||
CONFIG_SUBSECTION("Start-up");
|
CONFIG_SUBSECTION("Start-up");
|
||||||
ImGui::Text("Play intro on start-up:");
|
ImGui::Text("Play intro on start-up:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) {
|
if (ImGui::RadioButton("No##pis0",settings.alwaysPlayIntro==0)) {
|
||||||
settings.alwaysPlayIntro=0;
|
settings.alwaysPlayIntro=0;
|
||||||
}
|
}
|
||||||
|
@ -672,6 +692,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) {
|
if (ImGui::RadioButton("Full (always)##pis3",settings.alwaysPlayIntro==3)) {
|
||||||
settings.alwaysPlayIntro=3;
|
settings.alwaysPlayIntro=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool disableFadeInB=settings.disableFadeIn;
|
bool disableFadeInB=settings.disableFadeIn;
|
||||||
if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) {
|
if (ImGui::Checkbox("Disable fade-in during start-up",&disableFadeInB)) {
|
||||||
|
@ -1104,6 +1125,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Output mode:");
|
ImGui::Text("Output mode:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Off (use for TX81Z)",settings.midiOutMode==0)) {
|
if (ImGui::RadioButton("Off (use for TX81Z)",settings.midiOutMode==0)) {
|
||||||
settings.midiOutMode=0;
|
settings.midiOutMode=0;
|
||||||
}
|
}
|
||||||
|
@ -1114,6 +1136,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Light Show (use for Launchpad)",settings.midiOutMode==2)) {
|
if (ImGui::RadioButton("Light Show (use for Launchpad)",settings.midiOutMode==2)) {
|
||||||
settings.midiOutMode=2;
|
settings.midiOutMode=2;
|
||||||
}*/
|
}*/
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool midiOutProgramChangeB=settings.midiOutProgramChange;
|
bool midiOutProgramChangeB=settings.midiOutProgramChange;
|
||||||
if (ImGui::Checkbox("Send Program Change",&midiOutProgramChangeB)) {
|
if (ImGui::Checkbox("Send Program Change",&midiOutProgramChangeB)) {
|
||||||
|
@ -1132,6 +1155,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
|
|
||||||
if (settings.midiOutTime) {
|
if (settings.midiOutTime) {
|
||||||
ImGui::Text("Timecode frame rate:");
|
ImGui::Text("Timecode frame rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Closest to Tick Rate",settings.midiOutTimeRate==0)) {
|
if (ImGui::RadioButton("Closest to Tick Rate",settings.midiOutTimeRate==0)) {
|
||||||
settings.midiOutTimeRate=0;
|
settings.midiOutTimeRate=0;
|
||||||
}
|
}
|
||||||
|
@ -1147,6 +1171,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("NTSC non-drop (30fps)",settings.midiOutTimeRate==4)) {
|
if (ImGui::RadioButton("NTSC non-drop (30fps)",settings.midiOutTimeRate==4)) {
|
||||||
settings.midiOutTimeRate=4;
|
settings.midiOutTimeRate=4;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
}
|
}
|
||||||
|
|
||||||
END_SECTION;
|
END_SECTION;
|
||||||
|
@ -1615,6 +1640,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Play/edit controls layout:");
|
ImGui::Text("Play/edit controls layout:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Classic##ecl0",settings.controlLayout==0)) {
|
if (ImGui::RadioButton("Classic##ecl0",settings.controlLayout==0)) {
|
||||||
settings.controlLayout=0;
|
settings.controlLayout=0;
|
||||||
}
|
}
|
||||||
|
@ -1627,8 +1653,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Split##ecl3",settings.controlLayout==3)) {
|
if (ImGui::RadioButton("Split##ecl3",settings.controlLayout==3)) {
|
||||||
settings.controlLayout=3;
|
settings.controlLayout=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Position of buttons in Orders:");
|
ImGui::Text("Position of buttons in Orders:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Top##obp0",settings.orderButtonPos==0)) {
|
if (ImGui::RadioButton("Top##obp0",settings.orderButtonPos==0)) {
|
||||||
settings.orderButtonPos=0;
|
settings.orderButtonPos=0;
|
||||||
}
|
}
|
||||||
|
@ -1638,6 +1666,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Right##obp2",settings.orderButtonPos==2)) {
|
if (ImGui::RadioButton("Right##obp2",settings.orderButtonPos==2)) {
|
||||||
settings.orderButtonPos=2;
|
settings.orderButtonPos=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION MOUSE
|
// SUBSECTION MOUSE
|
||||||
CONFIG_SUBSECTION("Mouse");
|
CONFIG_SUBSECTION("Mouse");
|
||||||
|
@ -1660,6 +1689,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Note preview behavior:");
|
ImGui::Text("Note preview behavior:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) {
|
if (ImGui::RadioButton("Never##npb0",settings.notePreviewBehavior==0)) {
|
||||||
settings.notePreviewBehavior=0;
|
settings.notePreviewBehavior=0;
|
||||||
}
|
}
|
||||||
|
@ -1672,8 +1702,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Always##npb3",settings.notePreviewBehavior==3)) {
|
if (ImGui::RadioButton("Always##npb3",settings.notePreviewBehavior==3)) {
|
||||||
settings.notePreviewBehavior=3;
|
settings.notePreviewBehavior=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Allow dragging selection:");
|
ImGui::Text("Allow dragging selection:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##dms0",settings.dragMovesSelection==0)) {
|
if (ImGui::RadioButton("No##dms0",settings.dragMovesSelection==0)) {
|
||||||
settings.dragMovesSelection=0;
|
settings.dragMovesSelection=0;
|
||||||
}
|
}
|
||||||
|
@ -1683,8 +1715,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Yes (while holding Ctrl only)##dms2",settings.dragMovesSelection==2)) {
|
if (ImGui::RadioButton("Yes (while holding Ctrl only)##dms2",settings.dragMovesSelection==2)) {
|
||||||
settings.dragMovesSelection=2;
|
settings.dragMovesSelection=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Toggle channel solo on:");
|
ImGui::Text("Toggle channel solo on:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Right-click or double-click##soloA",settings.soloAction==0)) {
|
if (ImGui::RadioButton("Right-click or double-click##soloA",settings.soloAction==0)) {
|
||||||
settings.soloAction=0;
|
settings.soloAction=0;
|
||||||
}
|
}
|
||||||
|
@ -1694,6 +1728,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Double-click##soloD",settings.soloAction==2)) {
|
if (ImGui::RadioButton("Double-click##soloD",settings.soloAction==2)) {
|
||||||
settings.soloAction=2;
|
settings.soloAction=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool doubleClickColumnB=settings.doubleClickColumn;
|
bool doubleClickColumnB=settings.doubleClickColumn;
|
||||||
if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) {
|
if (ImGui::Checkbox("Double click selects entire column",&doubleClickColumnB)) {
|
||||||
|
@ -1718,6 +1753,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Effect input behavior:");
|
ImGui::Text("Effect input behavior:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Move down##eicb0",settings.effectCursorDir==0)) {
|
if (ImGui::RadioButton("Move down##eicb0",settings.effectCursorDir==0)) {
|
||||||
settings.effectCursorDir=0;
|
settings.effectCursorDir=0;
|
||||||
}
|
}
|
||||||
|
@ -1727,6 +1763,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Move to effect value/next effect and wrap around##eicb2",settings.effectCursorDir==2)) {
|
if (ImGui::RadioButton("Move to effect value/next effect and wrap around##eicb2",settings.effectCursorDir==2)) {
|
||||||
settings.effectCursorDir=2;
|
settings.effectCursorDir=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool effectDeletionAltersValueB=settings.effectDeletionAltersValue;
|
bool effectDeletionAltersValueB=settings.effectDeletionAltersValue;
|
||||||
if (ImGui::Checkbox("Delete effect value when deleting effect",&effectDeletionAltersValueB)) {
|
if (ImGui::Checkbox("Delete effect value when deleting effect",&effectDeletionAltersValueB)) {
|
||||||
|
@ -1738,10 +1775,21 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.absorbInsInput=absorbInsInputB;
|
settings.absorbInsInput=absorbInsInputB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool removeInsOffB=settings.removeInsOff;
|
||||||
|
if (ImGui::Checkbox("Remove instrument value when inserting note off/release",&removeInsOffB)) {
|
||||||
|
settings.removeInsOff=removeInsOffB;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool removeVolOffB=settings.removeVolOff;
|
||||||
|
if (ImGui::Checkbox("Remove volume value when inserting note off/release",&removeVolOffB)) {
|
||||||
|
settings.removeVolOff=removeVolOffB;
|
||||||
|
}
|
||||||
|
|
||||||
// SUBSECTION CURSOR MOVEMENT
|
// SUBSECTION CURSOR MOVEMENT
|
||||||
CONFIG_SUBSECTION("Cursor movement");
|
CONFIG_SUBSECTION("Cursor movement");
|
||||||
|
|
||||||
ImGui::Text("Wrap horizontally:");
|
ImGui::Text("Wrap horizontally:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##wrapH0",settings.wrapHorizontal==0)) {
|
if (ImGui::RadioButton("No##wrapH0",settings.wrapHorizontal==0)) {
|
||||||
settings.wrapHorizontal=0;
|
settings.wrapHorizontal=0;
|
||||||
}
|
}
|
||||||
|
@ -1751,8 +1799,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Yes, and move to next/prev row##wrapH2",settings.wrapHorizontal==2)) {
|
if (ImGui::RadioButton("Yes, and move to next/prev row##wrapH2",settings.wrapHorizontal==2)) {
|
||||||
settings.wrapHorizontal=2;
|
settings.wrapHorizontal=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Wrap vertically:");
|
ImGui::Text("Wrap vertically:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##wrapV0",settings.wrapVertical==0)) {
|
if (ImGui::RadioButton("No##wrapV0",settings.wrapVertical==0)) {
|
||||||
settings.wrapVertical=0;
|
settings.wrapVertical=0;
|
||||||
}
|
}
|
||||||
|
@ -1765,14 +1815,17 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Yes, and move to next/prev pattern (wrap around)##wrapV2",settings.wrapVertical==3)) {
|
if (ImGui::RadioButton("Yes, and move to next/prev pattern (wrap around)##wrapV2",settings.wrapVertical==3)) {
|
||||||
settings.wrapVertical=3;
|
settings.wrapVertical=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Cursor movement keys behavior:");
|
ImGui::Text("Cursor movement keys behavior:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Move by one##cmk0",settings.scrollStep==0)) {
|
if (ImGui::RadioButton("Move by one##cmk0",settings.scrollStep==0)) {
|
||||||
settings.scrollStep=0;
|
settings.scrollStep=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Move by Edit Step##cmk1",settings.scrollStep==1)) {
|
if (ImGui::RadioButton("Move by Edit Step##cmk1",settings.scrollStep==1)) {
|
||||||
settings.scrollStep=1;
|
settings.scrollStep=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool stepOnDeleteB=settings.stepOnDelete;
|
bool stepOnDeleteB=settings.stepOnDelete;
|
||||||
if (ImGui::Checkbox("Move cursor by edit step on delete",&stepOnDeleteB)) {
|
if (ImGui::Checkbox("Move cursor by edit step on delete",&stepOnDeleteB)) {
|
||||||
|
@ -1798,6 +1851,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
CONFIG_SUBSECTION("Scrolling");
|
CONFIG_SUBSECTION("Scrolling");
|
||||||
|
|
||||||
ImGui::Text("Change order when scrolling outside of pattern bounds:");
|
ImGui::Text("Change order when scrolling outside of pattern bounds:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("No##pscroll0",settings.scrollChangesOrder==0)) {
|
if (ImGui::RadioButton("No##pscroll0",settings.scrollChangesOrder==0)) {
|
||||||
settings.scrollChangesOrder=0;
|
settings.scrollChangesOrder=0;
|
||||||
}
|
}
|
||||||
|
@ -1807,6 +1861,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Yes, and wrap around song##pscroll2",settings.scrollChangesOrder==2)) {
|
if (ImGui::RadioButton("Yes, and wrap around song##pscroll2",settings.scrollChangesOrder==2)) {
|
||||||
settings.scrollChangesOrder=2;
|
settings.scrollChangesOrder=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool cursorFollowsOrderB=settings.cursorFollowsOrder;
|
bool cursorFollowsOrderB=settings.cursorFollowsOrder;
|
||||||
if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) {
|
if (ImGui::Checkbox("Cursor follows current order when moving it",&cursorFollowsOrderB)) {
|
||||||
|
@ -1856,6 +1911,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
ImGui::Text("Main font");
|
ImGui::Text("Main font");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7);
|
ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7);
|
||||||
|
ImGui::Indent();
|
||||||
if (settings.mainFont==6) {
|
if (settings.mainFont==6) {
|
||||||
ImGui::InputText("##MainFontPath",&settings.mainFontPath);
|
ImGui::InputText("##MainFontPath",&settings.mainFontPath);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -1867,9 +1923,11 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (settings.mainFontSize<3) settings.mainFontSize=3;
|
if (settings.mainFontSize<3) settings.mainFontSize=3;
|
||||||
if (settings.mainFontSize>96) settings.mainFontSize=96;
|
if (settings.mainFontSize>96) settings.mainFontSize=96;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Header font");
|
ImGui::Text("Header font");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7);
|
ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7);
|
||||||
|
ImGui::Indent();
|
||||||
if (settings.headFont==6) {
|
if (settings.headFont==6) {
|
||||||
ImGui::InputText("##HeadFontPath",&settings.headFontPath);
|
ImGui::InputText("##HeadFontPath",&settings.headFontPath);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -1881,9 +1939,11 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (settings.headFontSize<3) settings.headFontSize=3;
|
if (settings.headFontSize<3) settings.headFontSize=3;
|
||||||
if (settings.headFontSize>96) settings.headFontSize=96;
|
if (settings.headFontSize>96) settings.headFontSize=96;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Pattern font");
|
ImGui::Text("Pattern font");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::Combo("##PatFont",&settings.patFont,patFonts,7);
|
ImGui::Combo("##PatFont",&settings.patFont,patFonts,7);
|
||||||
|
ImGui::Indent();
|
||||||
if (settings.patFont==6) {
|
if (settings.patFont==6) {
|
||||||
ImGui::InputText("##PatFontPath",&settings.patFontPath);
|
ImGui::InputText("##PatFontPath",&settings.patFontPath);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -1895,6 +1955,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (settings.patFontSize<3) settings.patFontSize=3;
|
if (settings.patFontSize<3) settings.patFontSize=3;
|
||||||
if (settings.patFontSize>96) settings.patFontSize=96;
|
if (settings.patFontSize>96) settings.patFontSize=96;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool loadJapaneseB=settings.loadJapanese;
|
bool loadJapaneseB=settings.loadJapanese;
|
||||||
if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) {
|
if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) {
|
||||||
|
@ -1951,6 +2012,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
// SUBSECTION PROGRAM
|
// SUBSECTION PROGRAM
|
||||||
CONFIG_SUBSECTION("Program");
|
CONFIG_SUBSECTION("Program");
|
||||||
ImGui::Text("Title bar:");
|
ImGui::Text("Title bar:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Furnace##tbar0",settings.titleBarInfo==0)) {
|
if (ImGui::RadioButton("Furnace##tbar0",settings.titleBarInfo==0)) {
|
||||||
settings.titleBarInfo=0;
|
settings.titleBarInfo=0;
|
||||||
updateWindowTitle();
|
updateWindowTitle();
|
||||||
|
@ -1967,6 +2029,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.titleBarInfo=3;
|
settings.titleBarInfo=3;
|
||||||
updateWindowTitle();
|
updateWindowTitle();
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool titleBarSysB=settings.titleBarSys;
|
bool titleBarSysB=settings.titleBarSys;
|
||||||
if (ImGui::Checkbox("Display system name on title bar",&titleBarSysB)) {
|
if (ImGui::Checkbox("Display system name on title bar",&titleBarSysB)) {
|
||||||
|
@ -1981,6 +2044,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Status bar:");
|
ImGui::Text("Status bar:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Cursor details##sbar0",settings.statusDisplay==0)) {
|
if (ImGui::RadioButton("Cursor details##sbar0",settings.statusDisplay==0)) {
|
||||||
settings.statusDisplay=0;
|
settings.statusDisplay=0;
|
||||||
}
|
}
|
||||||
|
@ -1993,6 +2057,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Nothing##sbar3",settings.statusDisplay==3)) {
|
if (ImGui::RadioButton("Nothing##sbar3",settings.statusDisplay==3)) {
|
||||||
settings.statusDisplay=3;
|
settings.statusDisplay=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION ORDERS
|
// SUBSECTION ORDERS
|
||||||
CONFIG_SUBSECTION("Orders");
|
CONFIG_SUBSECTION("Orders");
|
||||||
|
@ -2008,12 +2073,14 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Orders row number format:");
|
ImGui::Text("Orders row number format:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Decimal##orbD",settings.orderRowsBase==0)) {
|
if (ImGui::RadioButton("Decimal##orbD",settings.orderRowsBase==0)) {
|
||||||
settings.orderRowsBase=0;
|
settings.orderRowsBase=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Hexadecimal##orbH",settings.orderRowsBase==1)) {
|
if (ImGui::RadioButton("Hexadecimal##orbH",settings.orderRowsBase==1)) {
|
||||||
settings.orderRowsBase=1;
|
settings.orderRowsBase=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION PATTERN
|
// SUBSECTION PATTERN
|
||||||
CONFIG_SUBSECTION("Pattern");
|
CONFIG_SUBSECTION("Pattern");
|
||||||
|
@ -2033,12 +2100,14 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Pattern row number format:");
|
ImGui::Text("Pattern row number format:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Decimal##prbD",settings.patRowsBase==0)) {
|
if (ImGui::RadioButton("Decimal##prbD",settings.patRowsBase==0)) {
|
||||||
settings.patRowsBase=0;
|
settings.patRowsBase=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Hexadecimal##prbH",settings.patRowsBase==1)) {
|
if (ImGui::RadioButton("Hexadecimal##prbH",settings.patRowsBase==1)) {
|
||||||
settings.patRowsBase=1;
|
settings.patRowsBase=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Pattern view labels:");
|
ImGui::Text("Pattern view labels:");
|
||||||
ImGui::InputTextWithHint("Note off (3-char)","OFF",&settings.noteOffLabel);
|
ImGui::InputTextWithHint("Note off (3-char)","OFF",&settings.noteOffLabel);
|
||||||
|
@ -2093,6 +2162,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
CONFIG_SUBSECTION("Channel");
|
CONFIG_SUBSECTION("Channel");
|
||||||
|
|
||||||
ImGui::Text("Channel style:");
|
ImGui::Text("Channel style:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Classic##CHS0",settings.channelStyle==0)) {
|
if (ImGui::RadioButton("Classic##CHS0",settings.channelStyle==0)) {
|
||||||
settings.channelStyle=0;
|
settings.channelStyle=0;
|
||||||
}
|
}
|
||||||
|
@ -2111,8 +2181,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Round border##CHS5",settings.channelStyle==5)) {
|
if (ImGui::RadioButton("Round border##CHS5",settings.channelStyle==5)) {
|
||||||
settings.channelStyle=5;
|
settings.channelStyle=5;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Channel volume bar:");
|
ImGui::Text("Channel volume bar:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("None##CHV0",settings.channelVolStyle==0)) {
|
if (ImGui::RadioButton("None##CHV0",settings.channelVolStyle==0)) {
|
||||||
settings.channelVolStyle=0;
|
settings.channelVolStyle=0;
|
||||||
}
|
}
|
||||||
|
@ -2128,9 +2200,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Real (stereo)##CHV4",settings.channelVolStyle==4)) {
|
if (ImGui::RadioButton("Real (stereo)##CHV4",settings.channelVolStyle==4)) {
|
||||||
settings.channelVolStyle=4;
|
settings.channelVolStyle=4;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Channel feedback style:");
|
ImGui::Text("Channel feedback style:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Off##CHF0",settings.channelFeedbackStyle==0)) {
|
if (ImGui::RadioButton("Off##CHF0",settings.channelFeedbackStyle==0)) {
|
||||||
settings.channelFeedbackStyle=0;
|
settings.channelFeedbackStyle=0;
|
||||||
}
|
}
|
||||||
|
@ -2143,15 +2216,17 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Active##CHF3",settings.channelFeedbackStyle==3)) {
|
if (ImGui::RadioButton("Active##CHF3",settings.channelFeedbackStyle==3)) {
|
||||||
settings.channelFeedbackStyle=3;
|
settings.channelFeedbackStyle=3;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Channel font:");
|
ImGui::Text("Channel font:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Regular##CHFont0",settings.channelFont==0)) {
|
if (ImGui::RadioButton("Regular##CHFont0",settings.channelFont==0)) {
|
||||||
settings.channelFont=0;
|
settings.channelFont=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Monospace##CHFont1",settings.channelFont==1)) {
|
if (ImGui::RadioButton("Monospace##CHFont1",settings.channelFont==1)) {
|
||||||
settings.channelFont=1;
|
settings.channelFont=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool channelTextCenterB=settings.channelTextCenter;
|
bool channelTextCenterB=settings.channelTextCenter;
|
||||||
if (ImGui::Checkbox("Center channel name",&channelTextCenterB)) {
|
if (ImGui::Checkbox("Center channel name",&channelTextCenterB)) {
|
||||||
|
@ -2159,6 +2234,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Channel colors:");
|
ImGui::Text("Channel colors:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Single##CHC0",settings.channelColors==0)) {
|
if (ImGui::RadioButton("Single##CHC0",settings.channelColors==0)) {
|
||||||
settings.channelColors=0;
|
settings.channelColors=0;
|
||||||
}
|
}
|
||||||
|
@ -2168,8 +2244,10 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Instrument type##CHC2",settings.channelColors==2)) {
|
if (ImGui::RadioButton("Instrument type##CHC2",settings.channelColors==2)) {
|
||||||
settings.channelColors=2;
|
settings.channelColors=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Channel name colors:");
|
ImGui::Text("Channel name colors:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Single##CTC0",settings.channelTextColors==0)) {
|
if (ImGui::RadioButton("Single##CTC0",settings.channelTextColors==0)) {
|
||||||
settings.channelTextColors=0;
|
settings.channelTextColors=0;
|
||||||
}
|
}
|
||||||
|
@ -2179,6 +2257,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Instrument type##CTC2",settings.channelTextColors==2)) {
|
if (ImGui::RadioButton("Instrument type##CTC2",settings.channelTextColors==2)) {
|
||||||
settings.channelTextColors=2;
|
settings.channelTextColors=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION ASSETS
|
// SUBSECTION ASSETS
|
||||||
CONFIG_SUBSECTION("Assets");
|
CONFIG_SUBSECTION("Assets");
|
||||||
|
@ -2205,6 +2284,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
// SUBSECTION MACRO EDITOR
|
// SUBSECTION MACRO EDITOR
|
||||||
CONFIG_SUBSECTION("Macro Editor");
|
CONFIG_SUBSECTION("Macro Editor");
|
||||||
ImGui::Text("Macro editor layout:");
|
ImGui::Text("Macro editor layout:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) {
|
if (ImGui::RadioButton("Unified##mel0",settings.macroLayout==0)) {
|
||||||
settings.macroLayout=0;
|
settings.macroLayout=0;
|
||||||
}
|
}
|
||||||
|
@ -2220,6 +2300,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) {
|
if (ImGui::RadioButton("Single (combo box)##mel4",settings.macroLayout==4)) {
|
||||||
settings.macroLayout=4;
|
settings.macroLayout=4;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool oldMacroVSliderB=settings.oldMacroVSlider;
|
bool oldMacroVSliderB=settings.oldMacroVSlider;
|
||||||
if (ImGui::Checkbox("Use classic macro editor vertical slider",&oldMacroVSliderB)) {
|
if (ImGui::Checkbox("Use classic macro editor vertical slider",&oldMacroVSliderB)) {
|
||||||
|
@ -2236,6 +2317,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
// SUBSECTION FM EDITOR
|
// SUBSECTION FM EDITOR
|
||||||
CONFIG_SUBSECTION("FM Editor");
|
CONFIG_SUBSECTION("FM Editor");
|
||||||
ImGui::Text("FM parameter names:");
|
ImGui::Text("FM parameter names:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Friendly##fmn0",settings.fmNames==0)) {
|
if (ImGui::RadioButton("Friendly##fmn0",settings.fmNames==0)) {
|
||||||
settings.fmNames=0;
|
settings.fmNames=0;
|
||||||
}
|
}
|
||||||
|
@ -2245,6 +2327,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Technical (alternate)##fmn2",settings.fmNames==2)) {
|
if (ImGui::RadioButton("Technical (alternate)##fmn2",settings.fmNames==2)) {
|
||||||
settings.fmNames=2;
|
settings.fmNames=2;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool oplStandardWaveNamesB=settings.oplStandardWaveNames;
|
bool oplStandardWaveNamesB=settings.oplStandardWaveNames;
|
||||||
if (ImGui::Checkbox("Use standard OPL waveform names",&oplStandardWaveNamesB)) {
|
if (ImGui::Checkbox("Use standard OPL waveform names",&oplStandardWaveNamesB)) {
|
||||||
|
@ -2252,6 +2335,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("FM parameter editor layout:");
|
ImGui::Text("FM parameter editor layout:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Modern##fml0",settings.fmLayout==0)) {
|
if (ImGui::RadioButton("Modern##fml0",settings.fmLayout==0)) {
|
||||||
settings.fmLayout=0;
|
settings.fmLayout=0;
|
||||||
}
|
}
|
||||||
|
@ -2273,14 +2357,17 @@ void FurnaceGUI::drawSettings() {
|
||||||
if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) {
|
if (ImGui::RadioButton("Alternate (4x1)##fml5",settings.fmLayout==6)) {
|
||||||
settings.fmLayout=6;
|
settings.fmLayout=6;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Position of Sustain in FM editor:");
|
ImGui::Text("Position of Sustain in FM editor:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) {
|
if (ImGui::RadioButton("Between Decay and Sustain Rate##susp0",settings.susPosition==0)) {
|
||||||
settings.susPosition=0;
|
settings.susPosition=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("After Release Rate##susp1",settings.susPosition==1)) {
|
if (ImGui::RadioButton("After Release Rate##susp1",settings.susPosition==1)) {
|
||||||
settings.susPosition=1;
|
settings.susPosition=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
bool separateFMColorsB=settings.separateFMColors;
|
bool separateFMColorsB=settings.separateFMColors;
|
||||||
if (ImGui::Checkbox("Use separate colors for carriers/modulators in FM editor",&separateFMColorsB)) {
|
if (ImGui::Checkbox("Use separate colors for carriers/modulators in FM editor",&separateFMColorsB)) {
|
||||||
|
@ -2295,12 +2382,14 @@ void FurnaceGUI::drawSettings() {
|
||||||
// SUBSECTION STATISTICS
|
// SUBSECTION STATISTICS
|
||||||
CONFIG_SUBSECTION("Statistics");
|
CONFIG_SUBSECTION("Statistics");
|
||||||
ImGui::Text("Chip memory usage unit:");
|
ImGui::Text("Chip memory usage unit:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Bytes##MUU0",settings.memUsageUnit==0)) {
|
if (ImGui::RadioButton("Bytes##MUU0",settings.memUsageUnit==0)) {
|
||||||
settings.memUsageUnit=0;
|
settings.memUsageUnit=0;
|
||||||
}
|
}
|
||||||
if (ImGui::RadioButton("Kilobytes##MUU1",settings.memUsageUnit==1)) {
|
if (ImGui::RadioButton("Kilobytes##MUU1",settings.memUsageUnit==1)) {
|
||||||
settings.memUsageUnit=1;
|
settings.memUsageUnit=1;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
// SUBSECTION OSCILLOSCOPE
|
// SUBSECTION OSCILLOSCOPE
|
||||||
CONFIG_SUBSECTION("Oscilloscope");
|
CONFIG_SUBSECTION("Oscilloscope");
|
||||||
|
@ -2314,6 +2403,16 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.oscBorder=oscBorderB;
|
settings.oscBorder=oscBorderB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool oscMonoB=settings.oscMono;
|
||||||
|
if (ImGui::Checkbox("Mono",&oscMonoB)) {
|
||||||
|
settings.oscMono=oscMonoB;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool oscAntiAliasB=settings.oscAntiAlias;
|
||||||
|
if (ImGui::Checkbox("Anti-aliased",&oscAntiAliasB)) {
|
||||||
|
settings.oscAntiAlias=oscAntiAliasB;
|
||||||
|
}
|
||||||
|
|
||||||
bool oscTakesEntireWindowB=settings.oscTakesEntireWindow;
|
bool oscTakesEntireWindowB=settings.oscTakesEntireWindow;
|
||||||
if (ImGui::Checkbox("Fill entire window",&oscTakesEntireWindowB)) {
|
if (ImGui::Checkbox("Fill entire window",&oscTakesEntireWindowB)) {
|
||||||
settings.oscTakesEntireWindow=oscTakesEntireWindowB;
|
settings.oscTakesEntireWindow=oscTakesEntireWindowB;
|
||||||
|
@ -2364,6 +2463,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
}
|
}
|
||||||
if (ImGui::TreeNode("General")) {
|
if (ImGui::TreeNode("General")) {
|
||||||
ImGui::Text("Color scheme type:");
|
ImGui::Text("Color scheme type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Dark##gcb0",settings.guiColorsBase==0)) {
|
if (ImGui::RadioButton("Dark##gcb0",settings.guiColorsBase==0)) {
|
||||||
settings.guiColorsBase=0;
|
settings.guiColorsBase=0;
|
||||||
applyUISettings(false);
|
applyUISettings(false);
|
||||||
|
@ -2372,6 +2472,7 @@ void FurnaceGUI::drawSettings() {
|
||||||
settings.guiColorsBase=1;
|
settings.guiColorsBase=1;
|
||||||
applyUISettings(false);
|
applyUISettings(false);
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
if (ImGui::SliderInt("Frame shading",&settings.guiColorsShading,0,100,"%d%%")) {
|
if (ImGui::SliderInt("Frame shading",&settings.guiColorsShading,0,100,"%d%%")) {
|
||||||
if (settings.guiColorsShading<0) settings.guiColorsShading=0;
|
if (settings.guiColorsShading<0) settings.guiColorsShading=0;
|
||||||
if (settings.guiColorsShading>100) settings.guiColorsShading=100;
|
if (settings.guiColorsShading>100) settings.guiColorsShading=100;
|
||||||
|
@ -2439,6 +2540,26 @@ void FurnaceGUI::drawSettings() {
|
||||||
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_PEAK,"Waveform (clip)");
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_PEAK,"Waveform (clip)");
|
||||||
UI_COLOR_CONFIG(GUI_COLOR_OSC_REF,"Reference");
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_REF,"Reference");
|
||||||
UI_COLOR_CONFIG(GUI_COLOR_OSC_GUIDE,"Guide");
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_GUIDE,"Guide");
|
||||||
|
|
||||||
|
if (ImGui::TreeNode("Wave (non-mono)")) {
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH0,"Waveform (1)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH1,"Waveform (2)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH2,"Waveform (3)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH3,"Waveform (4)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH4,"Waveform (5)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH5,"Waveform (6)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH6,"Waveform (7)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH7,"Waveform (8)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH8,"Waveform (9)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH9,"Waveform (10)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH10,"Waveform (11)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH11,"Waveform (12)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH12,"Waveform (13)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH13,"Waveform (14)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH14,"Waveform (15)");
|
||||||
|
UI_COLOR_CONFIG(GUI_COLOR_OSC_WAVE_CH15,"Waveform (16)");
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
if (ImGui::TreeNode("Volume Meter")) {
|
if (ImGui::TreeNode("Volume Meter")) {
|
||||||
|
@ -2818,6 +2939,8 @@ void FurnaceGUI::syncSettings() {
|
||||||
settings.oscTakesEntireWindow=e->getConfInt("oscTakesEntireWindow",0);
|
settings.oscTakesEntireWindow=e->getConfInt("oscTakesEntireWindow",0);
|
||||||
settings.oscBorder=e->getConfInt("oscBorder",1);
|
settings.oscBorder=e->getConfInt("oscBorder",1);
|
||||||
settings.oscEscapesBoundary=e->getConfInt("oscEscapesBoundary",0);
|
settings.oscEscapesBoundary=e->getConfInt("oscEscapesBoundary",0);
|
||||||
|
settings.oscMono=e->getConfInt("oscMono",1);
|
||||||
|
settings.oscAntiAlias=e->getConfInt("oscAntiAlias",1);
|
||||||
settings.separateFMColors=e->getConfInt("separateFMColors",0);
|
settings.separateFMColors=e->getConfInt("separateFMColors",0);
|
||||||
settings.insEditColorize=e->getConfInt("insEditColorize",0);
|
settings.insEditColorize=e->getConfInt("insEditColorize",0);
|
||||||
settings.metroVol=e->getConfInt("metroVol",100);
|
settings.metroVol=e->getConfInt("metroVol",100);
|
||||||
|
@ -2891,6 +3014,9 @@ void FurnaceGUI::syncSettings() {
|
||||||
settings.memUsageUnit=e->getConfInt("memUsageUnit",1);
|
settings.memUsageUnit=e->getConfInt("memUsageUnit",1);
|
||||||
settings.cursorFollowsWheel=e->getConfInt("cursorFollowsWheel",0);
|
settings.cursorFollowsWheel=e->getConfInt("cursorFollowsWheel",0);
|
||||||
settings.noDMFCompat=e->getConfInt("noDMFCompat",0);
|
settings.noDMFCompat=e->getConfInt("noDMFCompat",0);
|
||||||
|
settings.removeInsOff=e->getConfInt("removeInsOff",0);
|
||||||
|
settings.removeVolOff=e->getConfInt("removeVolOff",0);
|
||||||
|
settings.playOnLoad=e->getConfInt("playOnLoad",0);
|
||||||
|
|
||||||
clampSetting(settings.mainFontSize,2,96);
|
clampSetting(settings.mainFontSize,2,96);
|
||||||
clampSetting(settings.headFontSize,2,96);
|
clampSetting(settings.headFontSize,2,96);
|
||||||
|
@ -3022,6 +3148,9 @@ void FurnaceGUI::syncSettings() {
|
||||||
clampSetting(settings.memUsageUnit,0,1);
|
clampSetting(settings.memUsageUnit,0,1);
|
||||||
clampSetting(settings.cursorFollowsWheel,0,1);
|
clampSetting(settings.cursorFollowsWheel,0,1);
|
||||||
clampSetting(settings.noDMFCompat,0,1);
|
clampSetting(settings.noDMFCompat,0,1);
|
||||||
|
clampSetting(settings.removeInsOff,0,1);
|
||||||
|
clampSetting(settings.removeVolOff,0,1);
|
||||||
|
clampSetting(settings.playOnLoad,0,2);
|
||||||
|
|
||||||
if (settings.exportLoops<0.0) settings.exportLoops=0.0;
|
if (settings.exportLoops<0.0) settings.exportLoops=0.0;
|
||||||
if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0;
|
if (settings.exportFadeOut<0.0) settings.exportFadeOut=0.0;
|
||||||
|
@ -3121,7 +3250,7 @@ void FurnaceGUI::commitSettings() {
|
||||||
e->setConf("tg100Path",settings.tg100Path);
|
e->setConf("tg100Path",settings.tg100Path);
|
||||||
e->setConf("mu5Path",settings.mu5Path);
|
e->setConf("mu5Path",settings.mu5Path);
|
||||||
e->setConf("mainFont",settings.mainFont);
|
e->setConf("mainFont",settings.mainFont);
|
||||||
e->setConf("headFont",settings.mainFont);
|
e->setConf("headFont",settings.headFont);
|
||||||
e->setConf("patFont",settings.patFont);
|
e->setConf("patFont",settings.patFont);
|
||||||
e->setConf("mainFontPath",settings.mainFontPath);
|
e->setConf("mainFontPath",settings.mainFontPath);
|
||||||
e->setConf("headFontPath",settings.headFontPath);
|
e->setConf("headFontPath",settings.headFontPath);
|
||||||
|
@ -3177,6 +3306,8 @@ void FurnaceGUI::commitSettings() {
|
||||||
e->setConf("oscTakesEntireWindow",settings.oscTakesEntireWindow);
|
e->setConf("oscTakesEntireWindow",settings.oscTakesEntireWindow);
|
||||||
e->setConf("oscBorder",settings.oscBorder);
|
e->setConf("oscBorder",settings.oscBorder);
|
||||||
e->setConf("oscEscapesBoundary",settings.oscEscapesBoundary);
|
e->setConf("oscEscapesBoundary",settings.oscEscapesBoundary);
|
||||||
|
e->setConf("oscMono",settings.oscMono);
|
||||||
|
e->setConf("oscAntiAlias",settings.oscAntiAlias);
|
||||||
e->setConf("separateFMColors",settings.separateFMColors);
|
e->setConf("separateFMColors",settings.separateFMColors);
|
||||||
e->setConf("insEditColorize",settings.insEditColorize);
|
e->setConf("insEditColorize",settings.insEditColorize);
|
||||||
e->setConf("metroVol",settings.metroVol);
|
e->setConf("metroVol",settings.metroVol);
|
||||||
|
@ -3251,6 +3382,9 @@ void FurnaceGUI::commitSettings() {
|
||||||
e->setConf("memUsageUnit",settings.memUsageUnit);
|
e->setConf("memUsageUnit",settings.memUsageUnit);
|
||||||
e->setConf("cursorFollowsWheel",settings.cursorFollowsWheel);
|
e->setConf("cursorFollowsWheel",settings.cursorFollowsWheel);
|
||||||
e->setConf("noDMFCompat",settings.noDMFCompat);
|
e->setConf("noDMFCompat",settings.noDMFCompat);
|
||||||
|
e->setConf("removeInsOff",settings.removeInsOff);
|
||||||
|
e->setConf("removeVolOff",settings.removeVolOff);
|
||||||
|
e->setConf("playOnLoad",settings.playOnLoad);
|
||||||
|
|
||||||
// colors
|
// colors
|
||||||
for (int i=0; i<GUI_COLOR_MAX; i++) {
|
for (int i=0; i<GUI_COLOR_MAX; i++) {
|
||||||
|
@ -3967,7 +4101,7 @@ void FurnaceGUI::applyUISettings(bool updateFonts) {
|
||||||
settings.mainFont=0;
|
settings.mainFont=0;
|
||||||
}
|
}
|
||||||
if (settings.headFont==6 && settings.headFontPath.empty()) {
|
if (settings.headFont==6 && settings.headFontPath.empty()) {
|
||||||
logW("UI font path is empty! reverting to default font");
|
logW("header font path is empty! reverting to default font");
|
||||||
settings.headFont=0;
|
settings.headFont=0;
|
||||||
}
|
}
|
||||||
if (settings.patFont==6 && settings.patFontPath.empty()) {
|
if (settings.patFont==6 && settings.patFontPath.empty()) {
|
||||||
|
|
|
@ -44,6 +44,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool fbAllOps=flags.getBool("fbAllOps",false);
|
bool fbAllOps=flags.getBool("fbAllOps",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (7.67MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -64,8 +65,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=4;
|
clockSel=4;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Chip type:");
|
ImGui::Text("Chip type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("YM3438 (9-bit DAC)",chipType==0)) {
|
if (ImGui::RadioButton("YM3438 (9-bit DAC)",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -78,6 +81,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=2;
|
chipType=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) {
|
if (type==DIV_SYSTEM_YM2612_EXT || type==DIV_SYSTEM_YM2612_DUALPCM_EXT || type==DIV_SYSTEM_YM2612_CSM) {
|
||||||
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
|
@ -105,6 +109,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool noEasyNoise=flags.getBool("noEasyNoise",false);
|
bool noEasyNoise=flags.getBool("noEasyNoise",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -133,7 +138,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=6;
|
clockSel=6;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Chip type:");
|
ImGui::Text("Chip type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Sega VDP/Master System",chipType==0)) {
|
if (ImGui::RadioButton("Sega VDP/Master System",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -174,6 +181,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=9;
|
chipType=9;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (ImGui::Checkbox("Disable noise period change phase reset",&noPhaseReset)) {
|
if (ImGui::Checkbox("Disable noise period change phase reset",&noPhaseReset)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -205,6 +213,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
ImGui::Text("Chip revision:");
|
ImGui::Text("Chip revision:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("HuC6280 (original)",chipType==0)) {
|
if (ImGui::RadioButton("HuC6280 (original)",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -213,6 +222,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=1;
|
chipType=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -235,6 +245,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int echoVol=(signed char)flags.getInt("echoVol",0);
|
int echoVol=(signed char)flags.getInt("echoVol",0);
|
||||||
|
|
||||||
ImGui::Text("CPU rate:");
|
ImGui::Text("CPU rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("6.18MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("6.18MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -243,7 +254,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=1;
|
clockSel=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Sample memory:");
|
ImGui::Text("Sample memory:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("8K (rev A/B/E)",sampleMemSize==0)) {
|
if (ImGui::RadioButton("8K (rev A/B/E)",sampleMemSize==0)) {
|
||||||
sampleMemSize=0;
|
sampleMemSize=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -252,7 +265,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
sampleMemSize=1;
|
sampleMemSize=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("DAC resolution:");
|
ImGui::Text("DAC resolution:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("16-bit (rev A/B/D/F)",pdm==0)) {
|
if (ImGui::RadioButton("16-bit (rev A/B/D/F)",pdm==0)) {
|
||||||
pdm=false;
|
pdm=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -261,6 +276,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
pdm=true;
|
pdm=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
if (ImGui::Checkbox("Enable echo",&echo)) {
|
if (ImGui::Checkbox("Enable echo",&echo)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
@ -317,6 +333,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
ImGui::Text("Chip revision:");
|
ImGui::Text("Chip revision:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Original (DMG)",chipType==0)) {
|
if (ImGui::RadioButton("Original (DMG)",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -333,8 +350,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=3;
|
chipType=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Wave channel orientation:");
|
ImGui::Text("Wave channel orientation:");
|
||||||
if (chipType==3) {
|
if (chipType==3) {
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Normal",!invertWave)) {
|
if (ImGui::RadioButton("Normal",!invertWave)) {
|
||||||
invertWave=false;
|
invertWave=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -343,7 +362,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
invertWave=true;
|
invertWave=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
} else {
|
} else {
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Exact data (inverted)",!invertWave)) {
|
if (ImGui::RadioButton("Exact data (inverted)",!invertWave)) {
|
||||||
invertWave=false;
|
invertWave=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -352,6 +373,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
invertWave=true;
|
invertWave=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
}
|
}
|
||||||
if (ImGui::Checkbox("Pretty please one more compat flag when I use arpeggio and my sound length",&enoughAlready)) {
|
if (ImGui::Checkbox("Pretty please one more compat flag when I use arpeggio and my sound length",&enoughAlready)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -375,6 +397,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool noTopHatFreq=flags.getBool("noTopHatFreq",false);
|
bool noTopHatFreq=flags.getBool("noTopHatFreq",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (3.58MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (3.58MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -391,8 +414,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=3;
|
clockSel=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
if (type!=DIV_SYSTEM_VRC7) {
|
if (type!=DIV_SYSTEM_VRC7) {
|
||||||
ImGui::Text("Patch set:");
|
ImGui::Text("Patch set:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Yamaha YM2413",patchSet==0)) {
|
if (ImGui::RadioButton("Yamaha YM2413",patchSet==0)) {
|
||||||
patchSet=0;
|
patchSet=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -409,6 +434,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
patchSet=3;
|
patchSet=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_OPLL_DRUMS) {
|
if (type==DIV_SYSTEM_OPLL_DRUMS) {
|
||||||
|
@ -431,6 +457,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
case DIV_SYSTEM_YM2151: {
|
case DIV_SYSTEM_YM2151: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC/X16 (3.58MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC/X16 (3.58MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -443,6 +470,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -460,6 +488,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -472,9 +501,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("DPCM channel mode:");
|
ImGui::Text("DPCM channel mode:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("DPCM (muffled samples; low CPU usage)",dpcmMode)) {
|
if (ImGui::RadioButton("DPCM (muffled samples; low CPU usage)",dpcmMode)) {
|
||||||
dpcmMode=true;
|
dpcmMode=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -483,6 +514,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
dpcmMode=false;
|
dpcmMode=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -503,6 +535,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (1.02MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (1.02MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -515,9 +548,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Global parameter priority:");
|
ImGui::Text("Global parameter priority:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Left to right",!keyPriority)) {
|
if (ImGui::RadioButton("Left to right",!keyPriority)) {
|
||||||
keyPriority=false;
|
keyPriority=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -526,6 +561,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
keyPriority=true;
|
keyPriority=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Hard reset envelope:");
|
ImGui::Text("Hard reset envelope:");
|
||||||
|
|
||||||
|
@ -576,6 +612,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int ssgVol=flags.getInt("ssgVol",128);
|
int ssgVol=flags.getInt("ssgVol",128);
|
||||||
int fmVol=flags.getInt("fmVol",256);
|
int fmVol=flags.getInt("fmVol",256);
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) {
|
if (ImGui::RadioButton("8MHz (Neo Geo MVS)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -584,6 +621,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=1;
|
clockSel=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) {
|
if (type==DIV_SYSTEM_YM2610_EXT || type==DIV_SYSTEM_YM2610_FULL_EXT || type==DIV_SYSTEM_YM2610B_EXT || type==DIV_SYSTEM_YM2610_CSM || type==DIV_SYSTEM_YM2610B_CSM) {
|
||||||
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
if (ImGui::Checkbox("Disable ExtCh FM macros (compatibility)",&noExtMacros)) {
|
||||||
|
@ -626,6 +664,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int stereoSep=flags.getInt("stereoSep",0);
|
int stereoSep=flags.getInt("stereoSep",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("1.79MHz (ZX Spectrum NTSC/MSX)",clockSel==0)) {
|
if (ImGui::RadioButton("1.79MHz (ZX Spectrum NTSC/MSX)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -686,8 +725,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=14;
|
clockSel=14;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
if (type==DIV_SYSTEM_AY8910) {
|
if (type==DIV_SYSTEM_AY8910) {
|
||||||
ImGui::Text("Chip type:");
|
ImGui::Text("Chip type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("AY-3-8910",chipType==0)) {
|
if (ImGui::RadioButton("AY-3-8910",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -704,6 +745,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=3;
|
chipType=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
if (ImGui::IsItemHovered()) {
|
if (ImGui::IsItemHovered()) {
|
||||||
ImGui::SetTooltip("note: AY-3-8914 is not supported by the VGM format!");
|
ImGui::SetTooltip("note: AY-3-8914 is not supported by the VGM format!");
|
||||||
}
|
}
|
||||||
|
@ -744,6 +786,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
case DIV_SYSTEM_SAA1099: {
|
case DIV_SYSTEM_SAA1099: {
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("SAM Coupé (8MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("SAM Coupé (8MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -756,6 +799,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -779,6 +823,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
} rightClickable
|
} rightClickable
|
||||||
|
|
||||||
ImGui::Text("Model:");
|
ImGui::Text("Model:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Amiga 500 (OCS)",chipType==0)) {
|
if (ImGui::RadioButton("Amiga 500 (OCS)",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -787,8 +832,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=1;
|
chipType=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Chip memory:");
|
ImGui::Text("Chip memory:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("2MB (ECS/AGA max)",chipMem==21)) {
|
if (ImGui::RadioButton("2MB (ECS/AGA max)",chipMem==21)) {
|
||||||
chipMem=21;
|
chipMem=21;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -805,6 +852,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipMem=18;
|
chipMem=18;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
|
|
||||||
if (ImGui::Checkbox("PAL",&clockSel)) {
|
if (ImGui::Checkbox("PAL",&clockSel)) {
|
||||||
|
@ -830,6 +878,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int mixingType=flags.getInt("mixingType",0);
|
int mixingType=flags.getInt("mixingType",0);
|
||||||
|
|
||||||
ImGui::Text("Mixing mode:");
|
ImGui::Text("Mixing mode:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Mono",mixingType==0)) {
|
if (ImGui::RadioButton("Mono",mixingType==0)) {
|
||||||
mixingType=0;
|
mixingType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -842,6 +891,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
mixingType=2;
|
mixingType=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (ImGui::Checkbox("PAL",&clockSel)) {
|
if (ImGui::Checkbox("PAL",&clockSel)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -860,6 +910,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int speakerType=flags.getInt("speakerType",0);
|
int speakerType=flags.getInt("speakerType",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("1.19MHz (PC)",clockSel==0)) {
|
if (ImGui::RadioButton("1.19MHz (PC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -872,8 +923,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Speaker type:");
|
ImGui::Text("Speaker type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Unfiltered",speakerType==0)) {
|
if (ImGui::RadioButton("Unfiltered",speakerType==0)) {
|
||||||
speakerType=0;
|
speakerType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -890,6 +943,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
speakerType=3;
|
speakerType=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -933,6 +987,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool stereo=flags.getBool("stereo",false);
|
bool stereo=flags.getBool("stereo",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("16MHz (Seta 1)",clockSel==0)) {
|
if (ImGui::RadioButton("16MHz (Seta 1)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -945,6 +1000,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (ImGui::Checkbox("Stereo",&stereo)) {
|
if (ImGui::Checkbox("Stereo",&stereo)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -965,6 +1021,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool lenCompensate=flags.getBool("lenCompensate",false);
|
bool lenCompensate=flags.getBool("lenCompensate",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -977,6 +1034,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Initial channel limit:");
|
ImGui::Text("Initial channel limit:");
|
||||||
if (CWSliderInt("##N163_InitialChannelLimit",&channels,1,8)) {
|
if (CWSliderInt("##N163_InitialChannelLimit",&channels,1,8)) {
|
||||||
if (channels<1) channels=1;
|
if (channels<1) channels=1;
|
||||||
|
@ -1037,6 +1095,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int fmVol=flags.getInt("fmVol",256);
|
int fmVol=flags.getInt("fmVol",256);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1061,7 +1120,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=5;
|
clockSel=5;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Output rate:");
|
ImGui::Text("Output rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",prescale==0)) {
|
if (ImGui::RadioButton("FM: clock / 72, SSG: clock / 16",prescale==0)) {
|
||||||
prescale=0;
|
prescale=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1074,6 +1135,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
prescale=2;
|
prescale=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
|
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
|
||||||
if (ssgVol<0) ssgVol=0;
|
if (ssgVol<0) ssgVol=0;
|
||||||
|
@ -1119,6 +1181,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int fmVol=flags.getInt("fmVol",256);
|
int fmVol=flags.getInt("fmVol",256);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) {
|
if (ImGui::RadioButton("8MHz (Arcade)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1127,7 +1190,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=1;
|
clockSel=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Output rate:");
|
ImGui::Text("Output rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("FM: clock / 144, SSG: clock / 32",prescale==0)) {
|
if (ImGui::RadioButton("FM: clock / 144, SSG: clock / 32",prescale==0)) {
|
||||||
prescale=0;
|
prescale=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1140,6 +1205,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
prescale=2;
|
prescale=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
|
if (CWSliderInt("SSG Volume",&ssgVol,0,256)) {
|
||||||
if (ssgVol<0) ssgVol=0;
|
if (ssgVol<0) ssgVol=0;
|
||||||
|
@ -1179,6 +1245,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int chipType=flags.getInt("chipType",0);
|
int chipType=flags.getInt("chipType",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("8MHz (FM Towns)",clockSel==0)) {
|
if (ImGui::RadioButton("8MHz (FM Towns)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1191,7 +1258,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=2;
|
clockSel=2;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Chip type:");
|
ImGui::Text("Chip type:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("RF5C68 (10-bit output)",chipType==0)) {
|
if (ImGui::RadioButton("RF5C68 (10-bit output)",chipType==0)) {
|
||||||
chipType=0;
|
chipType=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1200,6 +1269,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
chipType=1;
|
chipType=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1213,6 +1283,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("4MHz",clockSel==0)) {
|
if (ImGui::RadioButton("4MHz",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1229,6 +1300,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=3;
|
clockSel=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1242,6 +1314,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool rateSel=flags.getBool("rateSel",false);
|
bool rateSel=flags.getBool("rateSel",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("1MHz",clockSel==0)) {
|
if (ImGui::RadioButton("1MHz",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1302,7 +1375,9 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=14;
|
clockSel=14;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
ImGui::Text("Output rate:");
|
ImGui::Text("Output rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("clock / 132",rateSel==0)) {
|
if (ImGui::RadioButton("clock / 132",rateSel==0)) {
|
||||||
rateSel=false;
|
rateSel=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1311,6 +1386,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
rateSel=true;
|
rateSel=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1325,6 +1401,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("1.79MHz (NTSC/MSX)",clockSel==0)) {
|
if (ImGui::RadioButton("1.79MHz (NTSC/MSX)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1341,6 +1418,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=3;
|
clockSel=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1358,6 +1436,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1382,6 +1461,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=5;
|
clockSel=5;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1396,6 +1476,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool compatPan=flags.getBool("compatPan",false);
|
bool compatPan=flags.getBool("compatPan",false);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("14.32MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("14.32MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1416,6 +1497,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=4;
|
clockSel=4;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (ImGui::Checkbox("Compatible panning (0800)",&compatPan)) {
|
if (ImGui::Checkbox("Compatible panning (0800)",&compatPan)) {
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1433,6 +1515,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("16.9344MHz",clockSel==0)) {
|
if (ImGui::RadioButton("16.9344MHz",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1457,6 +1540,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=5;
|
clockSel=5;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1489,6 +1573,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Interpolation:");
|
ImGui::Text("Interpolation:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("None",interpolation==0)) {
|
if (ImGui::RadioButton("None",interpolation==0)) {
|
||||||
interpolation=0;
|
interpolation=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1505,6 +1590,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
interpolation=3;
|
interpolation=3;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1741,6 +1827,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Text("Envelope mode (channel 1-4):");
|
ImGui::Text("Envelope mode (channel 1-4):");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Capacitor (attack/decay)##EM00",groupEnv[0])) {
|
if (ImGui::RadioButton("Capacitor (attack/decay)##EM00",groupEnv[0])) {
|
||||||
groupEnv[0]=true;
|
groupEnv[0]=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1749,8 +1836,10 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
groupEnv[0]=false;
|
groupEnv[0]=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Envelope mode (channel 5-8):");
|
ImGui::Text("Envelope mode (channel 5-8):");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Capacitor (attack/decay)##EM10",groupEnv[1])) {
|
if (ImGui::RadioButton("Capacitor (attack/decay)##EM10",groupEnv[1])) {
|
||||||
groupEnv[1]=true;
|
groupEnv[1]=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1759,6 +1848,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
groupEnv[1]=false;
|
groupEnv[1]=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Global vibrato:");
|
ImGui::Text("Global vibrato:");
|
||||||
|
|
||||||
|
@ -1834,6 +1924,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
bool romMode=flags.getBool("romMode",false);
|
bool romMode=flags.getBool("romMode",false);
|
||||||
|
|
||||||
ImGui::Text("Waveform storage mode:");
|
ImGui::Text("Waveform storage mode:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("RAM",!romMode)) {
|
if (ImGui::RadioButton("RAM",!romMode)) {
|
||||||
romMode=false;
|
romMode=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1842,6 +1933,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
romMode=true;
|
romMode=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1897,6 +1989,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
int clockSel=flags.getInt("clockSel",0);
|
int clockSel=flags.getInt("clockSel",0);
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
if (ImGui::RadioButton("3.58MHz (NTSC)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1905,6 +1998,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=1;
|
clockSel=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1919,6 +2013,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
|
|
||||||
ImGui::Text("Clock rate:");
|
ImGui::Text("Clock rate:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
if (ImGui::RadioButton("NTSC (1.79MHz)",clockSel==0)) {
|
||||||
clockSel=0;
|
clockSel=0;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1927,9 +2022,11 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
clockSel=1;
|
clockSel=1;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
ImGui::Text("Global parameter priority:");
|
ImGui::Text("Global parameter priority:");
|
||||||
|
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::RadioButton("Left to right",!keyPriority)) {
|
if (ImGui::RadioButton("Left to right",!keyPriority)) {
|
||||||
keyPriority=false;
|
keyPriority=false;
|
||||||
altered=true;
|
altered=true;
|
||||||
|
@ -1938,6 +2035,7 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
keyPriority=true;
|
keyPriority=true;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
@ -1988,11 +2086,13 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
}
|
}
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Indent();
|
||||||
if (ImGui::InputInt("Hz",&customClock)) {
|
if (ImGui::InputInt("Hz",&customClock)) {
|
||||||
if (customClock<MIN_CUSTOM_CLOCK) customClock=0;
|
if (customClock<MIN_CUSTOM_CLOCK) customClock=0;
|
||||||
if (customClock>MAX_CUSTOM_CLOCK) customClock=MAX_CUSTOM_CLOCK;
|
if (customClock>MAX_CUSTOM_CLOCK) customClock=MAX_CUSTOM_CLOCK;
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
ImGui::Unindent();
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
e->lockSave([&]() {
|
e->lockSave([&]() {
|
||||||
|
|
Loading…
Reference in a new issue