GUI: add setting to make osc escape bounds

This commit is contained in:
tildearrow 2022-05-23 17:42:25 -05:00
parent f8d851cbc2
commit 49943aba76
3 changed files with 20 additions and 3 deletions

View File

@ -922,6 +922,7 @@ class FurnaceGUI {
int oscRoundedCorners;
int oscTakesEntireWindow;
int oscBorder;
int oscEscapesBoundary;
int separateFMColors;
int insEditColorize;
int metroVol;
@ -1012,6 +1013,7 @@ class FurnaceGUI {
oscRoundedCorners(1),
oscTakesEntireWindow(0),
oscBorder(1),
oscEscapesBoundary(0),
separateFMColors(0),
insEditColorize(0),
metroVol(100),

View File

@ -19,6 +19,7 @@
#include "gui.h"
#include "imgui_internal.h"
#include <imgui.h>
// TODO:
// - potentially move oscilloscope seek position to the end, and read the last samples
@ -224,11 +225,18 @@ void FurnaceGUI::drawOsc() {
for (size_t i=0; i<512; i++) {
float x=(float)i/512.0f;
float y=oscValues[i]*oscZoom;
if (y<-0.5f) y=-0.5f;
if (y>0.5f) y=0.5f;
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));
}
dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale);
if (settings.oscEscapesBoundary) {
ImDrawList* dlf=ImGui::GetForegroundDrawList();
dlf->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale);
} else {
dl->AddPolyline(waveform,512,color,ImDrawFlags_None,dpiScale);
}
if (settings.oscBorder) {
dl->AddRect(inRect.Min,inRect.Max,borderColor,settings.oscRoundedCorners?(8.0f*dpiScale):0.0f,0,1.5f*dpiScale);
}

View File

@ -1219,6 +1219,11 @@ void FurnaceGUI::drawSettings() {
settings.oscTakesEntireWindow=oscTakesEntireWindowB;
}
bool oscEscapesBoundaryB=settings.oscEscapesBoundary;
if (ImGui::Checkbox("Waveform goes out of bounds",&oscEscapesBoundaryB)) {
settings.oscEscapesBoundary=oscEscapesBoundaryB;
}
bool oscBorderB=settings.oscBorder;
if (ImGui::Checkbox("Border",&oscBorderB)) {
settings.oscBorder=oscBorderB;
@ -1933,6 +1938,7 @@ void FurnaceGUI::syncSettings() {
settings.oscRoundedCorners=e->getConfInt("oscRoundedCorners",1);
settings.oscTakesEntireWindow=e->getConfInt("oscTakesEntireWindow",0);
settings.oscBorder=e->getConfInt("oscBorder",1);
settings.oscEscapesBoundary=e->getConfInt("oscEscapesBoundary",0);
settings.separateFMColors=e->getConfInt("separateFMColors",0);
settings.insEditColorize=e->getConfInt("insEditColorize",0);
settings.metroVol=e->getConfInt("metroVol",100);
@ -2130,6 +2136,7 @@ void FurnaceGUI::commitSettings() {
e->setConf("oscRoundedCorners",settings.oscRoundedCorners);
e->setConf("oscTakesEntireWindow",settings.oscTakesEntireWindow);
e->setConf("oscBorder",settings.oscBorder);
e->setConf("oscEscapesBoundary",settings.oscEscapesBoundary);
e->setConf("separateFMColors",settings.separateFMColors);
e->setConf("insEditColorize",settings.insEditColorize);
e->setConf("metroVol",settings.metroVol);