From 99340234b8a3883b9eee985230ce54bcabf47583 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 10 Sep 2022 16:01:22 -0500 Subject: [PATCH] GUI: wave generator, part 7 prepare for WaveTools (formerly Mangle) --- src/gui/gui.cpp | 6 ++++ src/gui/gui.h | 2 ++ src/gui/waveEdit.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 65e982c73..0b1d008b3 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5241,6 +5241,12 @@ FurnaceGUI::FurnaceGUI(): waveGenDuty(0.5f), waveGenPower(1), waveGenInvertPoint(1.0f), + waveGenScaleX(32), + waveGenScaleY(31), + waveGenOffsetX(0), + waveGenOffsetY(0), + waveGenSmooth(1), + waveGenAmplify(1.0f), waveGenFM(false) { // value keys valueKeys[SDLK_0]=0; diff --git a/src/gui/gui.h b/src/gui/gui.h index 180013dfa..79a39a1f9 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1573,6 +1573,8 @@ class FurnaceGUI { float waveGenTL[4]; int waveGenMult[4]; int waveGenFB[4]; + int waveGenScaleX, waveGenScaleY, waveGenOffsetX, waveGenOffsetY, waveGenSmooth; + float waveGenAmplify; bool waveGenFMCon1[4]; bool waveGenFMCon2[3]; bool waveGenFMCon3[2]; diff --git a/src/gui/waveEdit.cpp b/src/gui/waveEdit.cpp index c46e2ec0c..de106cb5d 100644 --- a/src/gui/waveEdit.cpp +++ b/src/gui/waveEdit.cpp @@ -503,7 +503,91 @@ void FurnaceGUI::drawWaveEdit() { } ImGui::EndTabItem(); } - if (ImGui::BeginTabItem("Mangle")) { + if (ImGui::BeginTabItem("WaveTools")) { + if (ImGui::BeginTable("WGParamItems",2)) { + ImGui::TableSetupColumn("c0",ImGuiTableColumnFlags_WidthStretch); + ImGui::TableSetupColumn("c1",ImGuiTableColumnFlags_WidthFixed); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##WGScaleX",&waveGenScaleX,1,16)) { + if (waveGenScaleX<2) waveGenScaleX=2; + if (waveGenScaleX>256) waveGenScaleX=256; + } + ImGui::TableNextColumn(); + ImGui::Button("Scale X"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##WGScaleY",&waveGenScaleY,1,16)) { + if (waveGenScaleY<2) waveGenScaleY=2; + if (waveGenScaleY>256) waveGenScaleY=256; + } + ImGui::TableNextColumn(); + ImGui::Button("Scale Y"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##WGOffsetX",&waveGenOffsetX,1,16)) { + if (waveGenOffsetX<-wave->len+1) waveGenOffsetX=-wave->len+1; + if (waveGenOffsetX>wave->len-1) waveGenOffsetX=wave->len-1; + } + ImGui::TableNextColumn(); + ImGui::Button("Offset X"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##WGOffsetY",&waveGenOffsetY,1,16)) { + if (waveGenOffsetY<-wave->max) waveGenOffsetY=-wave->max; + if (waveGenOffsetY>wave->max) waveGenOffsetY=wave->max; + } + ImGui::TableNextColumn(); + ImGui::Button("Offset Y"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + if (ImGui::InputInt("##WGSmooth",&waveGenSmooth,1,4)) { + if (waveGenSmooth>wave->len) waveGenSmooth=wave->len; + if (waveGenSmooth<1) waveGenSmooth=1; + } + ImGui::TableNextColumn(); + ImGui::Button("Smooth"); + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + float amp=waveGenAmplify*100.0f; + if (ImGui::InputFloat("##WGAmplify",&,1.0f,10.0f)) { + waveGenAmplify=amp/100.0f; + if (waveGenAmplify<0.0f) waveGenAmplify=0.0f; + if (waveGenAmplify>100.0f) waveGenAmplify=100.0f; + } + ImGui::TableNextColumn(); + ImGui::Button("Amplify"); + + ImGui::EndTable(); + } + + ImVec2 buttonSize=ImGui::GetContentRegionAvail(); + buttonSize.y=0.0f; + ImVec2 buttonSizeHalf=buttonSize; + buttonSizeHalf.x-=ImGui::GetStyle().ItemSpacing.x; + buttonSizeHalf.x*=0.5; + + ImGui::Button("Normalize",buttonSize); + ImGui::Button("Invert",buttonSize); + + ImGui::Button("/2",buttonSizeHalf); + ImGui::SameLine(); + ImGui::Button("×2",buttonSizeHalf); + + ImGui::Button("Convert Signed/Unsigned",buttonSize); + ImGui::Button("Randomize",buttonSize); ImGui::EndTabItem(); } ImGui::EndTabBar();