mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-27 15:03:01 +00:00
GUI: ability to add/del effect cols and EExx value
This commit is contained in:
parent
969d673e0e
commit
7f3885d2b1
5 changed files with 57 additions and 4 deletions
|
@ -1408,6 +1408,7 @@ void DivEngine::play() {
|
||||||
void DivEngine::stop() {
|
void DivEngine::stop() {
|
||||||
isBusy.lock();
|
isBusy.lock();
|
||||||
playing=false;
|
playing=false;
|
||||||
|
extValuePresent=false;
|
||||||
isBusy.unlock();
|
isBusy.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1417,6 +1418,8 @@ void DivEngine::reset() {
|
||||||
chan[i].volMax=(dispatch->dispatch(DivCommand(DIV_CMD_GET_VOLMAX,i))<<8)|0xff;
|
chan[i].volMax=(dispatch->dispatch(DivCommand(DIV_CMD_GET_VOLMAX,i))<<8)|0xff;
|
||||||
chan[i].volume=chan[i].volMax;
|
chan[i].volume=chan[i].volMax;
|
||||||
}
|
}
|
||||||
|
extValue=0;
|
||||||
|
extValuePresent=0;
|
||||||
dispatch->reset();
|
dispatch->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1442,6 +1445,14 @@ int DivEngine::getRow() {
|
||||||
return curRow;
|
return curRow;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DivEngine::hasExtValue() {
|
||||||
|
return extValuePresent;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char DivEngine::getExtValue() {
|
||||||
|
return extValue;
|
||||||
|
}
|
||||||
|
|
||||||
bool DivEngine::isPlaying() {
|
bool DivEngine::isPlaying() {
|
||||||
return playing;
|
return playing;
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,8 +77,10 @@ class DivEngine {
|
||||||
bool speedAB;
|
bool speedAB;
|
||||||
bool endOfSong;
|
bool endOfSong;
|
||||||
bool consoleMode;
|
bool consoleMode;
|
||||||
|
bool extValuePresent;
|
||||||
int ticks, cycles, curRow, curOrder, remainingLoops, nextSpeed, clockDrift;
|
int ticks, cycles, curRow, curOrder, remainingLoops, nextSpeed, clockDrift;
|
||||||
int changeOrd, changePos, totalTicks, totalCmds, lastCmds, cmdsPerSecond;
|
int changeOrd, changePos, totalTicks, totalCmds, lastCmds, cmdsPerSecond;
|
||||||
|
unsigned char extValue;
|
||||||
DivStatusView view;
|
DivStatusView view;
|
||||||
DivChannelState chan[17];
|
DivChannelState chan[17];
|
||||||
DivAudioEngines audioEngine;
|
DivAudioEngines audioEngine;
|
||||||
|
@ -204,6 +206,12 @@ class DivEngine {
|
||||||
// get current row
|
// get current row
|
||||||
int getRow();
|
int getRow();
|
||||||
|
|
||||||
|
// has ext value
|
||||||
|
bool hasExtValue();
|
||||||
|
|
||||||
|
// get ext value
|
||||||
|
unsigned char getExtValue();
|
||||||
|
|
||||||
// is playing
|
// is playing
|
||||||
bool isPlaying();
|
bool isPlaying();
|
||||||
|
|
||||||
|
@ -273,6 +281,7 @@ class DivEngine {
|
||||||
speedAB(false),
|
speedAB(false),
|
||||||
endOfSong(false),
|
endOfSong(false),
|
||||||
consoleMode(false),
|
consoleMode(false),
|
||||||
|
extValuePresent(false),
|
||||||
ticks(0),
|
ticks(0),
|
||||||
cycles(0),
|
cycles(0),
|
||||||
curRow(0),
|
curRow(0),
|
||||||
|
@ -286,6 +295,7 @@ class DivEngine {
|
||||||
totalCmds(0),
|
totalCmds(0),
|
||||||
lastCmds(0),
|
lastCmds(0),
|
||||||
cmdsPerSecond(0),
|
cmdsPerSecond(0),
|
||||||
|
extValue(0),
|
||||||
view(DIV_STATUS_NOTHING),
|
view(DIV_STATUS_NOTHING),
|
||||||
audioEngine(DIV_AUDIO_SDL),
|
audioEngine(DIV_AUDIO_SDL),
|
||||||
bbInLen(0),
|
bbInLen(0),
|
||||||
|
|
|
@ -516,6 +516,8 @@ void DivEngine::processRow(int i, bool afterDelay) {
|
||||||
break;
|
break;
|
||||||
case 0xee: // external command
|
case 0xee: // external command
|
||||||
//printf("\x1b[1;36m%d: extern command %d\x1b[m\n",i,effectVal);
|
//printf("\x1b[1;36m%d: extern command %d\x1b[m\n",i,effectVal);
|
||||||
|
extValue=effectVal;
|
||||||
|
extValuePresent=true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -915,6 +915,7 @@ void FurnaceGUI::drawPattern() {
|
||||||
sel1.xFine^=sel2.xFine;
|
sel1.xFine^=sel2.xFine;
|
||||||
sel2.xFine^=sel1.xFine;
|
sel2.xFine^=sel1.xFine;
|
||||||
}
|
}
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,ImVec2(0.0f,0.0f));
|
||||||
if (ImGui::Begin("Pattern",&patternOpen)) {
|
if (ImGui::Begin("Pattern",&patternOpen)) {
|
||||||
ImGui::SetWindowSize(ImVec2(scrW*dpiScale,scrH*dpiScale));
|
ImGui::SetWindowSize(ImVec2(scrW*dpiScale,scrH*dpiScale));
|
||||||
char id[32];
|
char id[32];
|
||||||
|
@ -922,8 +923,10 @@ void FurnaceGUI::drawPattern() {
|
||||||
unsigned char ord=e->getOrder();
|
unsigned char ord=e->getOrder();
|
||||||
int chans=e->getChannelCount(e->song.system);
|
int chans=e->getChannelCount(e->song.system);
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,ImVec2(0.0f,0.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_CellPadding,ImVec2(0.0f,0.0f));
|
||||||
if (ImGui::BeginTable("PatternView",chans+1,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX)) {
|
if (ImGui::BeginTable("PatternView",chans+2,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX)) {
|
||||||
ImGui::TableSetupColumn("pos",ImGuiTableColumnFlags_WidthFixed);
|
ImGui::TableSetupColumn("pos",ImGuiTableColumnFlags_WidthFixed);
|
||||||
|
char chanID[256];
|
||||||
|
float lineHeight=(ImGui::GetTextLineHeight()+2*dpiScale);
|
||||||
int curRow=e->getRow();
|
int curRow=e->getRow();
|
||||||
if (e->isPlaying()) updateScroll(curRow);
|
if (e->isPlaying()) updateScroll(curRow);
|
||||||
if (nextScroll>-0.5f) {
|
if (nextScroll>-0.5f) {
|
||||||
|
@ -936,8 +939,9 @@ void FurnaceGUI::drawPattern() {
|
||||||
}
|
}
|
||||||
ImGui::TableNextRow();
|
ImGui::TableNextRow();
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
char chanID[256];
|
if (ImGui::Selectable(extraChannelButtons?" --##ExtraChannelButtons":" ++##ExtraChannelButtons",false,ImGuiSelectableFlags_NoPadWithHalfSpacing,ImVec2(0.0f,lineHeight+2.0f*dpiScale))) {
|
||||||
float lineHeight=(ImGui::GetTextLineHeight()+2*dpiScale);
|
extraChannelButtons=!extraChannelButtons;
|
||||||
|
}
|
||||||
for (int i=0; i<chans; i++) {
|
for (int i=0; i<chans; i++) {
|
||||||
ImGui::TableNextColumn();
|
ImGui::TableNextColumn();
|
||||||
snprintf(chanID,256," %s##_CH%d",e->getChannelName(i),i);
|
snprintf(chanID,256," %s##_CH%d",e->getChannelName(i),i);
|
||||||
|
@ -947,6 +951,28 @@ void FurnaceGUI::drawPattern() {
|
||||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
if (ImGui::IsItemClicked(ImGuiMouseButton_Right)) {
|
||||||
e->toggleSolo(i);
|
e->toggleSolo(i);
|
||||||
}
|
}
|
||||||
|
if (extraChannelButtons) {
|
||||||
|
snprintf(chanID,256,"<##_LCH%d",i);
|
||||||
|
ImGui::BeginDisabled(e->song.pat[i].effectRows<=1);
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetCursorPosX()+4.0f*dpiScale);
|
||||||
|
if (ImGui::SmallButton(chanID)) {
|
||||||
|
e->song.pat[i].effectRows--;
|
||||||
|
if (e->song.pat[i].effectRows<1) e->song.pat[i].effectRows=1;
|
||||||
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::BeginDisabled(e->song.pat[i].effectRows>=4);
|
||||||
|
snprintf(chanID,256,">##_RCH%d",i);
|
||||||
|
if (ImGui::SmallButton(chanID)) {
|
||||||
|
e->song.pat[i].effectRows++;
|
||||||
|
if (e->song.pat[i].effectRows>4) e->song.pat[i].effectRows=4;
|
||||||
|
}
|
||||||
|
ImGui::EndDisabled();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::TableNextColumn();
|
||||||
|
if (e->hasExtValue()) {
|
||||||
|
ImGui::TextColored(uiColors[GUI_COLOR_EE_VALUE]," %.2X",e->getExtValue());
|
||||||
}
|
}
|
||||||
float oneCharSize=ImGui::CalcTextSize("A").x;
|
float oneCharSize=ImGui::CalcTextSize("A").x;
|
||||||
ImVec2 threeChars=ImVec2(oneCharSize*3.0f,lineHeight);
|
ImVec2 threeChars=ImVec2(oneCharSize*3.0f,lineHeight);
|
||||||
|
@ -1099,6 +1125,7 @@ void FurnaceGUI::drawPattern() {
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
ImGui::PopFont();
|
ImGui::PopFont();
|
||||||
}
|
}
|
||||||
|
ImGui::PopStyleVar();
|
||||||
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PATTERN;
|
if (ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows)) curWindow=GUI_WINDOW_PATTERN;
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
}
|
}
|
||||||
|
@ -2195,6 +2222,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
settingsOpen(false),
|
settingsOpen(false),
|
||||||
selecting(false),
|
selecting(false),
|
||||||
curNibble(false),
|
curNibble(false),
|
||||||
|
extraChannelButtons(false),
|
||||||
curWindow(GUI_WINDOW_NOTHING),
|
curWindow(GUI_WINDOW_NOTHING),
|
||||||
arpMacroScroll(0),
|
arpMacroScroll(0),
|
||||||
macroDragStart(0,0),
|
macroDragStart(0,0),
|
||||||
|
@ -2226,6 +2254,7 @@ FurnaceGUI::FurnaceGUI():
|
||||||
uiColors[GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY]=ImVec4(0.5f,1.0f,0.0f,1.0f);
|
uiColors[GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY]=ImVec4(0.5f,1.0f,0.0f,1.0f);
|
||||||
uiColors[GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY]=ImVec4(0.0f,1.0f,0.5f,1.0f);
|
uiColors[GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY]=ImVec4(0.0f,1.0f,0.5f,1.0f);
|
||||||
uiColors[GUI_COLOR_PATTERN_EFFECT_MISC]=ImVec4(0.3f,0.3f,1.0f,1.0f);
|
uiColors[GUI_COLOR_PATTERN_EFFECT_MISC]=ImVec4(0.3f,0.3f,1.0f,1.0f);
|
||||||
|
uiColors[GUI_COLOR_EE_VALUE]=ImVec4(0.0f,1.0f,1.0f,1.0f);
|
||||||
|
|
||||||
for (int i=0; i<64; i++) {
|
for (int i=0; i<64; i++) {
|
||||||
ImVec4 col1=uiColors[GUI_COLOR_PATTERN_VOLUME_MIN];
|
ImVec4 col1=uiColors[GUI_COLOR_PATTERN_VOLUME_MIN];
|
||||||
|
|
|
@ -30,6 +30,7 @@ enum FurnaceGUIColors {
|
||||||
GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,
|
GUI_COLOR_PATTERN_EFFECT_SYS_PRIMARY,
|
||||||
GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY,
|
GUI_COLOR_PATTERN_EFFECT_SYS_SECONDARY,
|
||||||
GUI_COLOR_PATTERN_EFFECT_MISC,
|
GUI_COLOR_PATTERN_EFFECT_MISC,
|
||||||
|
GUI_COLOR_EE_VALUE,
|
||||||
GUI_COLOR_MAX
|
GUI_COLOR_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ class FurnaceGUI {
|
||||||
bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen;
|
bool editControlsOpen, ordersOpen, insListOpen, songInfoOpen, patternOpen, insEditOpen;
|
||||||
bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen;
|
bool waveListOpen, waveEditOpen, sampleListOpen, sampleEditOpen, aboutOpen, settingsOpen;
|
||||||
SelectionPoint selStart, selEnd;
|
SelectionPoint selStart, selEnd;
|
||||||
bool selecting, curNibble;
|
bool selecting, curNibble, extraChannelButtons;
|
||||||
FurnaceGUIWindows curWindow;
|
FurnaceGUIWindows curWindow;
|
||||||
|
|
||||||
std::map<SDL_Keycode,int> noteKeys;
|
std::map<SDL_Keycode,int> noteKeys;
|
||||||
|
|
Loading…
Reference in a new issue