GUI: improve wavetable editor, part 2

This commit is contained in:
tildearrow 2022-07-21 03:14:52 -05:00
parent 962dab012c
commit 191a0dedf9
3 changed files with 55 additions and 24 deletions

View file

@ -4116,6 +4116,7 @@ bool FurnaceGUI::init() {
tempoView=e->getConfBool("tempoView",true); tempoView=e->getConfBool("tempoView",true);
waveHex=e->getConfBool("waveHex",false); waveHex=e->getConfBool("waveHex",false);
waveGenVisible=e->getConfBool("waveGenVisible",false);
waveEditStyle=e->getConfInt("waveEditStyle",0); waveEditStyle=e->getConfInt("waveEditStyle",0);
lockLayout=e->getConfBool("lockLayout",false); lockLayout=e->getConfBool("lockLayout",false);
#ifdef IS_MOBILE #ifdef IS_MOBILE
@ -4360,6 +4361,7 @@ bool FurnaceGUI::finish() {
e->setConf("tempoView",tempoView); e->setConf("tempoView",tempoView);
e->setConf("waveHex",waveHex); e->setConf("waveHex",waveHex);
e->setConf("waveGenVisible",waveGenVisible);
e->setConf("waveEditStyle",waveEditStyle); e->setConf("waveEditStyle",waveEditStyle);
e->setConf("lockLayout",lockLayout); e->setConf("lockLayout",lockLayout);
e->setConf("fullScreen",fullScreen); e->setConf("fullScreen",fullScreen);
@ -4535,6 +4537,7 @@ FurnaceGUI::FurnaceGUI():
firstFrame(true), firstFrame(true),
tempoView(true), tempoView(true),
waveHex(false), waveHex(false),
waveGenVisible(false),
lockLayout(false), lockLayout(false),
editOptsVisible(false), editOptsVisible(false),
latchNibble(false), latchNibble(false),

View file

@ -1222,7 +1222,7 @@ class FurnaceGUI {
SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd; SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd;
bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI; bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI;
bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, lockLayout, editOptsVisible, latchNibble, nonLatchNibble; bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
FurnaceGUIWindows curWindow, nextWindow, curWindowLast; FurnaceGUIWindows curWindow, nextWindow, curWindowLast;
float peak[2]; float peak[2];
float patChanX[DIV_MAX_CHANS+1]; float patChanX[DIV_MAX_CHANS+1];

View file

@ -96,6 +96,11 @@ void FurnaceGUI::drawWaveEdit() {
MARK_MODIFIED; MARK_MODIFIED;
} }
ImGui::SameLine();
if (ImGui::Button(waveGenVisible?(ICON_FA_CHEVRON_RIGHT "##WEWaveGen"):(ICON_FA_CHEVRON_LEFT "##WEWaveGen"))) {
waveGenVisible=!waveGenVisible;
}
ImGui::EndTable(); ImGui::EndTable();
} }
@ -105,31 +110,54 @@ void FurnaceGUI::drawWaveEdit() {
} }
if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1]; if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1];
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f)); if (ImGui::BeginTable("WEWaveSection",waveGenVisible?2:1)) {
ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch);
if (waveGenVisible) ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed,250.0f*dpiScale);
ImGui::TableNextRow();
ImVec2 contentRegion=ImGui::GetContentRegionAvail(); // wavetable graph size determined here ImGui::TableNextColumn();
contentRegion.y-=ImGui::GetFrameHeightWithSpacing()+ImGui::GetStyle().WindowPadding.y; ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
/*if (ImGui::GetContentRegionAvail().y > (ImGui::GetContentRegionAvail().x / 2.0f)) {
contentRegion=ImVec2(ImGui::GetContentRegionAvail().x,ImGui::GetContentRegionAvail().x / 2.0f); ImVec2 contentRegion=ImGui::GetContentRegionAvail(); // wavetable graph size determined here
}*/ contentRegion.y-=ImGui::GetFrameHeightWithSpacing()+ImGui::GetStyle().WindowPadding.y;
if (waveEditStyle) { if (waveEditStyle) {
PlotNoLerp("##Waveform",wavePreview,wave->len+1,0,NULL,0,wave->max,contentRegion); PlotNoLerp("##Waveform",wavePreview,wave->len+1,0,NULL,0,wave->max,contentRegion);
} else { } else {
PlotCustom("##Waveform",wavePreview,wave->len+1,0,NULL,0,wave->max,contentRegion,sizeof(float),ImVec4(1.0f,1.0f,1.0f,1.0f),0,NULL,true); PlotCustom("##Waveform",wavePreview,wave->len,0,NULL,0,wave->max,contentRegion,sizeof(float),ImVec4(1.0f,1.0f,1.0f,1.0f),0,NULL,true);
}
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) {
waveDragStart=ImGui::GetItemRectMin();
waveDragAreaSize=contentRegion;
waveDragMin=0;
waveDragMax=wave->max;
waveDragLen=wave->len;
waveDragActive=true;
waveDragTarget=wave->data;
processDrags(ImGui::GetMousePos().x,ImGui::GetMousePos().y);
e->notifyWaveChange(curWave);
modified=true;
}
ImGui::PopStyleVar();
if (waveGenVisible) {
ImGui::TableNextColumn();
if (ImGui::BeginTabBar("WaveGenOpt")) {
if (ImGui::BeginTabItem("Shapes")) {
ImGui::Button("Square");
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("FM")) {
ImGui::EndTabItem();
}
if (ImGui::BeginTabItem("Mangle")) {
ImGui::EndTabItem();
}
ImGui::EndTabBar();
}
}
ImGui::EndTable();
} }
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) {
waveDragStart=ImGui::GetItemRectMin();
waveDragAreaSize=contentRegion;
waveDragMin=0;
waveDragMax=wave->max;
waveDragLen=wave->len;
waveDragActive=true;
waveDragTarget=wave->data;
processDrags(ImGui::GetMousePos().x,ImGui::GetMousePos().y);
e->notifyWaveChange(curWave);
modified=true;
}
ImGui::PopStyleVar();
if (ImGui::RadioButton("Dec",!waveHex)) { if (ImGui::RadioButton("Dec",!waveHex)) {
waveHex=false; waveHex=false;