GUI: add setting to make osc escape bounds
This commit is contained in:
parent
f8d851cbc2
commit
49943aba76
|
@ -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),
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue