Browse Source

Fixed (tiny) memory leak for port labels, and replaced strndup with strncpy

master
waxfrenzy 22 years ago
parent
commit
b46747ac04
2 changed files with 72 additions and 44 deletions
  1. +69
    -44
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C
  2. +3
    -0
      SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h

+ 69
- 44
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.C View File

@@ -130,7 +130,6 @@ SpiralPluginGUI(w,h,o,ch)
m_Tab->value(m_SetupGroup);

m_TabIndex = 1;

m_PortIndex = 0;

end();
@@ -266,8 +265,16 @@ void LADSPAPluginGUI::AddPortInfo(const char *Info)
int len = strlen(Info);
len -= 5; // Get rid of (CV), (AU) bit
len = len > 20 ? 20 : len; // Truncate to fit
char *label = (char *)malloc(len + 1);
if (label)
{
strncpy(label, Info, len);
label[len] = '\0';
}
m_PortDefaultAdjustLabels.push_back(label);

Fl_Knob* NewKnob = new Fl_Knob(0,0,40,40,strndup(Info, len));
Fl_Knob* NewKnob = new Fl_Knob(0,0,40,40,"");
NewKnob->label(m_PortDefaultAdjustLabels[m_PortDefaultAdjustLabels.size() - 1]);
NewKnob->labelsize(10);
NewKnob->color(GUI_COLOUR);
NewKnob->maximum(1.0f);
@@ -327,11 +334,11 @@ void LADSPAPluginGUI::UpdateDefaultAdjustControls(void)
void LADSPAPluginGUI::UpdateValues(SpiralPlugin *o)
{
LADSPAPlugin* Plugin = (LADSPAPlugin*)o;
SetPluginIndex(Plugin->GetPluginIndex());
SetName(Plugin->GetName());
SetMaker(Plugin->GetMaker());
SetTabIndex(Plugin->GetTabIndex());
SetUpdateInputs(Plugin->GetUpdateInputs());
SetPluginIndex(Plugin->GetPluginIndex());

m_InputPortCount = Plugin->GetInputPortCount();
const char *name;
@@ -407,49 +414,15 @@ void LADSPAPluginGUI::Update(void)
if (state_changed) UpdateDefaultAdjustControls();
}

// ****************************************************************************
// ** Widget Callback Functions **
// ****************************************************************************

inline void LADSPAPluginGUI::cb_TabChange_i(Fl_Tabs *o)
{
m_TabIndex = o->find(o->value());

m_GUICH->SetData("SetTabIndex", &m_TabIndex);
m_GUICH->SetCommand(LADSPAPlugin::SETTABINDEX);
}
void LADSPAPluginGUI::cb_TabChange(Fl_Tabs *o)
{ // GUI
((LADSPAPluginGUI*)(o->parent()))->cb_TabChange_i(o);
}

inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
void LADSPAPluginGUI::ClearPlugin(void)
{
m_PluginIndex = o->value();

if (o->value() == 0) {
// "(None)" selected
m_GUICH->SetCommand(LADSPAPlugin::CLEARPLUGIN);
} else {
// Plugin selected
m_GUICH->SetData("SetPluginIndex",&m_PluginIndex);
m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN);
}
m_PluginIndex = 0;
m_InputPortCount = 0;
m_PortIndex = 0;

// Wait until next update for plugin to be loaded etc.
m_GUICH->SetCommand(LADSPAPlugin::CLEARPLUGIN);
m_GUICH->Wait();

// Now get the new values to populate GUI controls
m_GUICH->GetData("GetName", m_Name);
m_GUICH->GetData("GetMaker", m_Maker);
m_GUICH->GetData("GetInputPortCount", &(m_InputPortCount));
m_GUICH->GetData("GetInputPortNames", m_InputPortNames);
m_GUICH->GetData("GetInputPortSettings", m_InputPortSettings);
m_GUICH->GetData("GetInputPortDefaults", m_InputPortDefaults);

SetName((const char *)m_Name);
SetMaker((const char *)m_Maker);

// Clear out port info, and refresh
m_InputScroll->remove(m_InputPack);
delete m_InputPack;
@@ -463,6 +436,27 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
m_PortDefault.clear();
m_PortDefaultAdjust.clear();

for (vector<char *>::iterator i = m_PortDefaultAdjustLabels.begin();
i != m_PortDefaultAdjustLabels.end(); i++)
{
if (*i) free (*i);
}
m_PortDefaultAdjustLabels.clear();
}

void LADSPAPluginGUI::SelectPlugin(void)
{
// Now get the new values to populate GUI controls
m_GUICH->GetData("GetName", m_Name);
m_GUICH->GetData("GetMaker", m_Maker);
m_GUICH->GetData("GetInputPortCount", &(m_InputPortCount));
m_GUICH->GetData("GetInputPortNames", m_InputPortNames);
m_GUICH->GetData("GetInputPortSettings", m_InputPortSettings);
m_GUICH->GetData("GetInputPortDefaults", m_InputPortDefaults);

SetName((const char *)m_Name);
SetMaker((const char *)m_Maker);

for (unsigned long p = 0; p < m_InputPortCount; p++) {
AddPortInfo((const char *)(m_InputPortNames + p * 256));
SetPortSettings(p, m_InputPortSettings[p].Min,
@@ -474,10 +468,41 @@ inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
}

UpdateDefaultAdjustControls();

m_PortIndex = m_InputPortCount;
}

// ****************************************************************************
// ** Widget Callback Functions **
// ****************************************************************************

inline void LADSPAPluginGUI::cb_TabChange_i(Fl_Tabs *o)
{
m_TabIndex = o->find(o->value());

m_GUICH->SetData("SetTabIndex", &m_TabIndex);
m_GUICH->SetCommand(LADSPAPlugin::SETTABINDEX);
}
void LADSPAPluginGUI::cb_TabChange(Fl_Tabs *o)
{ // GUI
((LADSPAPluginGUI*)(o->parent()))->cb_TabChange_i(o);
}

inline void LADSPAPluginGUI::cb_Select_i(Fl_Choice* o)
{
ClearPlugin();

m_PluginIndex = o->value();

if (o->value() != 0) {
// Plugin selected
m_GUICH->SetData("SetPluginIndex",&m_PluginIndex);
m_GUICH->SetCommand(LADSPAPlugin::SELECTPLUGIN);
m_GUICH->Wait();

SelectPlugin();
}

redraw();
// redraw();
}
void LADSPAPluginGUI::cb_Select(Fl_Choice* o)
{ // Group Tab GUI


+ 3
- 0
SpiralSound/Plugins/LADSPAPlugin/LADSPAPluginGUI.h View File

@@ -66,6 +66,8 @@ private:
void SetPortSettings(unsigned long n, float min, float max, bool clamp, float defolt);
void SetDefaultAdjust(unsigned long n);
void UpdateDefaultAdjustControls(void);
void ClearPlugin(void);
void SelectPlugin(void);

Fl_Box *m_NameLabel;
Fl_Box *m_MakerLabel;
@@ -84,6 +86,7 @@ private:
std::vector<Fl_Check_Button*> m_PortClamp;
std::vector<Fl_Input*> m_PortDefault;
std::vector<Fl_Knob*> m_PortDefaultAdjust;
std::vector<char *> m_PortDefaultAdjustLabels;

std::vector<LADSPAInfo::PluginEntry> m_PluginList;



Loading…
Cancel
Save