sample filter ui: clamp frequency on popup

This commit is contained in:
yohannd1 2025-03-07 15:18:39 -03:00 committed by tildearrow
parent 37d49ffe0f
commit f2d6ae78fa
3 changed files with 14 additions and 4 deletions

View file

@ -8732,6 +8732,7 @@ FurnaceGUI::FurnaceGUI():
sampleFilterCutStart(16000.0f), sampleFilterCutStart(16000.0f),
sampleFilterCutEnd(100.0f), sampleFilterCutEnd(100.0f),
sampleFilterSweep(true), sampleFilterSweep(true),
sampleFilterFirstFrame(true),
sampleCrossFadeLoopLength(0), sampleCrossFadeLoopLength(0),
sampleCrossFadeLoopLaw(50), sampleCrossFadeLoopLaw(50),
sampleFilterPower(1), sampleFilterPower(1),

View file

@ -2570,7 +2570,7 @@ class FurnaceGUI {
ImVec2 sampleDragAreaSize; ImVec2 sampleDragAreaSize;
unsigned int sampleDragLen; unsigned int sampleDragLen;
float sampleFilterL, sampleFilterB, sampleFilterH, sampleFilterRes, sampleFilterCutStart, sampleFilterCutEnd; float sampleFilterL, sampleFilterB, sampleFilterH, sampleFilterRes, sampleFilterCutStart, sampleFilterCutEnd;
bool sampleFilterSweep; bool sampleFilterSweep, sampleFilterFirstFrame;
int sampleCrossFadeLoopLength, sampleCrossFadeLoopLaw; int sampleCrossFadeLoopLength, sampleCrossFadeLoopLaw;
unsigned char sampleFilterPower; unsigned char sampleFilterPower;
short* sampleClipboard; short* sampleClipboard;

View file

@ -1182,8 +1182,11 @@ void FurnaceGUI::drawSampleEdit() {
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip(_("Apply filter")); ImGui::SetTooltip(_("Apply filter"));
} }
float minCutoff=10.0f;
float maxCutoff=sample->centerRate*0.5f;
if (openSampleFilterOpt) { if (openSampleFilterOpt) {
openSampleFilterOpt=false; openSampleFilterOpt=false;
sampleFilterFirstFrame=true;
ImGui::OpenPopup("SFilterOpt"); ImGui::OpenPopup("SFilterOpt");
} }
if (ImGui::BeginPopupContextItem("SFilterOpt",ImGuiPopupFlags_MouseButtonLeft)) { if (ImGui::BeginPopupContextItem("SFilterOpt",ImGuiPopupFlags_MouseButtonLeft)) {
@ -1191,12 +1194,9 @@ void FurnaceGUI::drawSampleEdit() {
float bandP=sampleFilterB*100.0f; float bandP=sampleFilterB*100.0f;
float highP=sampleFilterH*100.0f; float highP=sampleFilterH*100.0f;
float resP=sampleFilterRes*100.0f; float resP=sampleFilterRes*100.0f;
float minCutoff=10.0f;
float maxCutoff=sample->centerRate*0.5f;
ImGui::Text(_("Cutoff:")); ImGui::Text(_("Cutoff:"));
ImGui::Checkbox(_("Sweep (2 frequencies)"),&sampleFilterSweep); ImGui::Checkbox(_("Sweep (2 frequencies)"),&sampleFilterSweep);
if (sampleFilterSweep) { if (sampleFilterSweep) {
if (ImGui::SliderFloat(_("From"),&sampleFilterCutStart,minCutoff,maxCutoff,"%.0f Hz")) { if (ImGui::SliderFloat(_("From"),&sampleFilterCutStart,minCutoff,maxCutoff,"%.0f Hz")) {
if (sampleFilterCutStart<minCutoff) sampleFilterCutStart=minCutoff; if (sampleFilterCutStart<minCutoff) sampleFilterCutStart=minCutoff;
@ -1307,6 +1307,15 @@ void FurnaceGUI::drawSampleEdit() {
MARK_MODIFIED; MARK_MODIFIED;
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
if (sampleFilterFirstFrame) {
if (sampleFilterCutStart<minCutoff) sampleFilterCutStart=minCutoff;
if (sampleFilterCutStart>maxCutoff) sampleFilterCutStart=maxCutoff;
if (sampleFilterCutEnd<minCutoff) sampleFilterCutEnd=minCutoff;
if (sampleFilterCutEnd>maxCutoff) sampleFilterCutEnd=maxCutoff;
sampleFilterFirstFrame=false;
}
ImGui::EndPopup(); ImGui::EndPopup();
} }
ImGui::EndDisabled(); ImGui::EndDisabled();