zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

commit c37c5476f4b8008ef82e887d1efd6c7ecf6d6206
parent c4058910d4ee02a9694e0e91fce29fb211f259da
Author: fundamental <mark.d.mccurry@gmail.com>
Date:   Sun, 11 Aug 2013 16:16:30 -0400

Fix Broken Oscillator Views

Diffstat:
Msrc/UI/ADnoteUI.fl | 19++++++++++---------
Msrc/UI/Fl_Oscilloscope.h | 24+++++++-----------------
Msrc/UI/MasterUI.fl | 2+-
Msrc/UI/OscilGenUI.fl | 14++++++++++----
4 files changed, 28 insertions(+), 31 deletions(-)

diff --git a/src/UI/ADnoteUI.fl b/src/UI/ADnoteUI.fl @@ -112,8 +112,9 @@ class ADvoicelistitem {open : {public Fl_Osc_Group} } Fl_Group voiceoscil {open xywh {60 5 30 20} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 - code0 {oscil=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} - code1 {oscil->init(false, "oscil/");} + code0 {voiceoscil->ext = "oscil/";} + code1 {oscil=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} + code2 {oscil->init(false);} class Fl_Osc_Group } {} Fl_Value_Output detunevalueoutput { @@ -321,10 +322,10 @@ o->redraw();} } { Fl_Group fmoscil {open xywh {535 440 220 140} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 - code0 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} - code1 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;} - code2 {fmoscil->base = loc; fmoscil->ext="mod-oscil/";fmoscil->osc = osc_i;} - code3 {oscFM->parent(fmoscil);oscFM->init(false);oscFM->update();} + code0 {fmoscil->base = loc; fmoscil->ext="mod-oscil/";fmoscil->osc = osc_i;fmoscil->begin();} + code1 {oscFM=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} + code2 {//int nv=nvoice; if (pars->VoicePar[nvoice].PextFMoscil>=0) nv=pars->VoicePar[nvoice].PextFMoscil;} + code3 {oscFM->parent(fmoscil);oscFM->init(false);oscFM->update();fmoscil->end();} class Fl_Osc_Group } {} Fl_Box {} { @@ -505,10 +506,10 @@ o->redraw();} } Fl_Group voiceoscil { xywh {80 390 445 145} box THIN_DOWN_BOX color 32 selection_color 71 labelcolor 179 - code0 {osc=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} - code1 {voiceoscil->base = loc;voiceoscil->ext="oscil/";//int nv=nvoice; if (extoscil->value()>=0) nv=extoscil->value();} + code0 {voiceoscil->base = loc;voiceoscil->ext="oscil/";voiceoscil->begin();//int nv=nvoice; if (extoscil->value()>=0) nv=extoscil->value();} + code1 {osc=new Fl_Oscilloscope(o->x(),o->y(),o->w(),o->h(),"");} code2 {voiceoscil->osc = osc_i;} - code3 {osc->parent(voiceoscil); osc->init(false);} + code3 {osc->parent(voiceoscil); osc->init(false);voiceoscil->end();} class Fl_Osc_Group } {} Fl_Button changevoiceoscilbutton { diff --git a/src/UI/Fl_Oscilloscope.h b/src/UI/Fl_Oscilloscope.h @@ -9,6 +9,7 @@ #include "common.H" #include <cassert> #include <cstdio> +#include "../globals.h" class Fl_Osc_Group; //Consider merging in Fl_OscilSpectrum @@ -16,7 +17,7 @@ class Fl_Oscilloscope : public Fl_Box, Fl_Osc_Widget { public: Fl_Oscilloscope(int x,int y, int w, int h, const char *label=0) - :Fl_Box(x,y,w,h,label) + :Fl_Box(x,y,w,h,label), Fl_Osc_Widget(this) { smps = new float[synth->oscilsize]; memset(smps, 0, synth->oscilsize*sizeof(float)); @@ -27,34 +28,23 @@ class Fl_Oscilloscope : public Fl_Box, Fl_Osc_Widget ~Fl_Oscilloscope(void) { delete[] smps; - osc->removeLink(loc, this); } - void init(bool base_waveform_p, std::string loc = "") + void init(bool base_waveform_p) { - Fl_Osc_Pane *og = fetch_osc_pane(this); - assert(og); - - loc = og->base + loc + (base_waveform_p ? "base-waveform": "waveform"); - osc = og->osc; + fprintf(stderr, "PARENT BASE LEADS TO '%s'\n", loc.c_str()); + ext = (base_waveform_p ? "base-waveform": "waveform"); assert(osc); - - printf("\n\n\n"); - printf("HELLO I AM HIM AT ADDRESS '%s'\n", loc.c_str()); - printf("\n\n\n"); - osc->createLink(loc, this); - osc->requestValue(loc); + oscRegister(ext.c_str()); } void update(void) { - printf("HELLO I AM HIM UPDATING AT ADDRESS '%s'\n", loc.c_str()); - osc->requestValue(loc); + oscWrite(ext); } virtual void OSC_value(unsigned N, void *data) override { - fprintf(stderr, "(oscl) OSC_value(%d,%p)\n", N, data); assert(N==(unsigned)(synth->oscilsize*4)); memcpy(smps, data, N); diff --git a/src/UI/MasterUI.fl b/src/UI/MasterUI.fl @@ -162,7 +162,7 @@ bankui->show();} } Fl_Check_Button partenabled { label 01 - callback {o->oscWrite("partonoff", o->value() ? "T" : "F"); + callback {o->oscWrite("Penabled", o->value() ? "T" : "F"); if ((int) o->value()==0) panellistitemgroup->deactivate(); else { panellistitemgroup->activate(); diff --git a/src/UI/OscilGenUI.fl b/src/UI/OscilGenUI.fl @@ -307,8 +307,6 @@ oscildisplaygroup->redraw();} Fl_Choice magtype { label {Mag.Type} callback {//oscil->Phmagtype=(int) o->value(); -basefuncdisplaygroup->redraw(); - redrawoscil();} xywh {75 285 65 20} down_box BORDER_BOX labelsize 11 when 1 textsize 11 code0 {o->init("hmagtype");} @@ -938,9 +936,11 @@ refresh();} } Function {OscilEditor(bool adnotep_, std::string loc_, Fl_Osc_Interface *osc_)} {open } { - code {assert(osc_); + code { assert(osc_); assert(!loc_.empty()); +initialized = false; + adnotep = adnotep_; osc = osc_; loc = loc_; @@ -951,6 +951,7 @@ oscils = NULL; oscils_base = NULL; make_window(); +initialized = true; refresh(); osceditUI->show();} {} @@ -1017,7 +1018,10 @@ redrawoscil();} {} } Function {redrawoscil()} {open } { - code {//get data from backend + code { + if(!initialized) //Must have been called during initialization + return; + //get data from backend osc->requestValue(loc+"prepare"); oscilo->update(); oscils->update(); @@ -1039,4 +1043,6 @@ oscils_base->update(); } decl {bool adnotep;} {private local } + decl {bool initialized;} {private local + } }