1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-13 00:04:19 +00:00

Plugin hosting cleanups + workarounds for some Mackie plugins.

This commit is contained in:
jules 2013-05-03 15:39:34 +01:00
parent 886cd92eda
commit 178dc9012b
6 changed files with 60 additions and 82 deletions

View file

@ -780,22 +780,17 @@ public:
if (effect != nullptr && effect->magic == kEffectMagic)
{
try
{
#if JUCE_MAC
if (module->resFileId != 0)
UseResFile (module->resFileId);
#endif
#if JUCE_MAC
if (module->resFileId != 0)
UseResFile (module->resFileId);
#endif
// Must delete any editors before deleting the plugin instance!
jassert (getActiveEditor() == 0);
// Must delete any editors before deleting the plugin instance!
jassert (getActiveEditor() == 0);
_fpreset(); // some dodgy plugs fuck around with this
_fpreset(); // some dodgy plugs fuck around with this
module->closeEffect (effect);
}
catch (...)
{}
module->closeEffect (effect);
}
module = nullptr;
@ -1052,36 +1047,21 @@ public:
jlimit (0, numSamples - 1, samplePosition));
}
try
{
effect->dispatcher (effect, effProcessEvents, 0, 0, midiEventsToSend.events, 0);
}
catch (...)
{}
effect->dispatcher (effect, effProcessEvents, 0, 0, midiEventsToSend.events, 0);
}
_clearfp();
if ((effect->flags & effFlagsCanReplacing) != 0)
{
try
{
effect->processReplacing (effect, buffer.getArrayOfChannels(), buffer.getArrayOfChannels(), numSamples);
}
catch (...)
{}
effect->processReplacing (effect, buffer.getArrayOfChannels(), buffer.getArrayOfChannels(), numSamples);
}
else
{
tempBuffer.setSize (effect->numOutputs, numSamples);
tempBuffer.clear();
try
{
effect->process (effect, buffer.getArrayOfChannels(), tempBuffer.getArrayOfChannels(), numSamples);
}
catch (...)
{}
effect->process (effect, buffer.getArrayOfChannels(), tempBuffer.getArrayOfChannels(), numSamples);
for (int i = effect->numOutputs; --i >= 0;)
buffer.copyFrom (i, 0, tempBuffer.getSampleData (i), numSamples);
@ -1169,14 +1149,8 @@ public:
{
if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams))
{
try
{
const ScopedLock sl (lock);
return effect->getParameter (effect, index);
}
catch (...)
{
}
const ScopedLock sl (lock);
return effect->getParameter (effect, index);
}
return 0.0f;
@ -1186,16 +1160,10 @@ public:
{
if (effect != nullptr && isPositiveAndBelow (index, (int) effect->numParams))
{
try
{
const ScopedLock sl (lock);
const ScopedLock sl (lock);
if (effect->getParameter (effect, index) != newValue)
effect->setParameter (effect, index, newValue);
}
catch (...)
{
}
if (effect->getParameter (effect, index) != newValue)
effect->setParameter (effect, index, newValue);
}
}
@ -1922,12 +1890,12 @@ class VSTPluginWindow : public AudioProcessorEditor,
{
public:
//==============================================================================
VSTPluginWindow (VSTPluginInstance& plugin_)
: AudioProcessorEditor (&plugin_),
VSTPluginWindow (VSTPluginInstance& plug)
: AudioProcessorEditor (&plug),
#if ! JUCE_MAC
ComponentMovementWatcher (this),
#endif
plugin (plugin_),
plugin (plug),
isOpen (false),
recursiveResize (false),
pluginWantsKeys (false),
@ -2085,7 +2053,6 @@ public:
if (--sizeCheckCount <= 0)
{
sizeCheckCount = 10;
checkPluginWindowSize();
}
#endif
@ -2108,6 +2075,8 @@ public:
//==============================================================================
void mouseDown (const MouseEvent& e)
{
(void) e;
#if JUCE_LINUX
if (pluginWindow == 0)
return;
@ -2130,8 +2099,6 @@ public:
sendEventToChild (&ev);
#elif JUCE_WINDOWS
(void) e;
toFront (true);
#endif
}
@ -2398,11 +2365,9 @@ private:
message, wParam, lParam);
}
return CallWindowProc ((WNDPROC) (w->originalWndProc),
return CallWindowProc ((WNDPROC) w->originalWndProc,
(HWND) w->pluginHWND,
message,
wParam,
lParam);
message, wParam, lParam);
}
}
@ -2569,8 +2534,8 @@ private:
class InnerWrapperComponent : public CarbonViewWrapperComponent
{
public:
InnerWrapperComponent (VSTPluginWindow& owner_)
: owner (owner_), alreadyInside (false)
InnerWrapperComponent (VSTPluginWindow& w)
: owner (w), alreadyInside (false)
{
}

View file

@ -23,8 +23,8 @@
==============================================================================
*/
AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* const owner_)
: owner (owner_)
AudioProcessorEditor::AudioProcessorEditor (AudioProcessor* const p)
: owner (p)
{
// the filter must be valid..
jassert (owner != nullptr);

View file

@ -28,16 +28,16 @@ class ProcessorParameterPropertyComp : public PropertyComponent,
private Timer
{
public:
ProcessorParameterPropertyComp (const String& name, AudioProcessor& owner_, const int index_)
ProcessorParameterPropertyComp (const String& name, AudioProcessor& p, const int index_)
: PropertyComponent (name),
owner (owner_),
owner (p),
index (index_),
paramHasChanged (false),
slider (owner_, index_)
slider (p, index_)
{
startTimer (100);
addAndMakeVisible (&slider);
owner_.addListener (this);
owner.addListener (this);
}
~ProcessorParameterPropertyComp()
@ -77,8 +77,8 @@ private:
class ParamSlider : public Slider
{
public:
ParamSlider (AudioProcessor& owner_, const int index_)
: owner (owner_),
ParamSlider (AudioProcessor& p, const int index_)
: owner (p),
index (index_)
{
setRange (0.0, 1.0, 0.0);
@ -118,26 +118,26 @@ private:
//==============================================================================
GenericAudioProcessorEditor::GenericAudioProcessorEditor (AudioProcessor* const owner_)
: AudioProcessorEditor (owner_)
GenericAudioProcessorEditor::GenericAudioProcessorEditor (AudioProcessor* const p)
: AudioProcessorEditor (p)
{
jassert (owner_ != nullptr);
jassert (p != nullptr);
setOpaque (true);
addAndMakeVisible (&panel);
Array <PropertyComponent*> params;
const int numParams = owner_->getNumParameters();
const int numParams = p->getNumParameters();
int totalHeight = 0;
for (int i = 0; i < numParams; ++i)
{
String name (owner_->getParameterName (i));
String name (p->getParameterName (i));
if (name.trim().isEmpty())
name = "Unnamed";
ProcessorParameterPropertyComp* const pc = new ProcessorParameterPropertyComp (name, *owner_, i);
ProcessorParameterPropertyComp* const pc = new ProcessorParameterPropertyComp (name, *p, i);
params.add (pc);
totalHeight += pc->getPreferredHeight();
}

View file

@ -644,7 +644,8 @@ ComponentPeer* Component::getPeer() const
{
if (flags.hasHeavyweightPeerFlag)
return ComponentPeer::getPeerFor (this);
else if (parentComponent == nullptr)
if (parentComponent == nullptr)
return nullptr;
return parentComponent->getPeer();

View file

@ -1147,8 +1147,8 @@ public:
class AsyncRepaintMessage : public CallbackMessage
{
public:
AsyncRepaintMessage (NSViewComponentPeer* const peer_, const Rectangle<int>& rect_)
: peer (peer_), rect (rect_)
AsyncRepaintMessage (NSViewComponentPeer* const p, const Rectangle<int>& r)
: peer (p), rect (r)
{}
void messageCallback()

View file

@ -98,9 +98,7 @@ public:
// Check for the plugin creating its own floating window, and if there is one,
// we need to reparent it to make it visible..
NSWindow* floatingChildWindow = [[carbonWindow childWindows] objectAtIndex: 0];
if (floatingChildWindow != nil)
if (NSWindow* floatingChildWindow = [[carbonWindow childWindows] objectAtIndex: 0])
[getOwnerWindow() addChildWindow: floatingChildWindow
ordered: NSWindowAbove];
@ -112,7 +110,7 @@ public:
{ kEventClassMouse, kEventMouseDown },
{ kEventClassMouse, kEventMouseMoved },
{ kEventClassMouse, kEventMouseDragged },
{ kEventClassMouse, kEventMouseUp},
{ kEventClassMouse, kEventMouseUp },
{ kEventClassWindow, kEventWindowDrawContent },
{ kEventClassWindow, kEventWindowShown },
{ kEventClassWindow, kEventWindowHidden }
@ -201,6 +199,18 @@ public:
wr.bottom = (short) (wr.top + getHeight());
SetWindowBounds (wrapperWindow, kWindowContentRgn, &wr);
// This group stuff is mainly a workaround for Mackie plugins like FinalMix..
WindowGroupRef group = GetWindowGroup (wrapperWindow);
WindowRef attachedWindow;
if (GetIndexedWindow (group, 2, kWindowGroupContentsReturnWindows, &attachedWindow) == noErr)
{
SelectWindow (attachedWindow);
ActivateWindow (attachedWindow, TRUE);
HideWindow (wrapperWindow);
}
ShowWindow (wrapperWindow);
}
@ -269,7 +279,9 @@ public:
SetEventParameter (event, kEventParamClickActivation, typeClickActivationResult,
sizeof (ClickActivationResult), &howToHandleClick);
HIViewSetNeedsDisplay (embeddedView, true);
if (embeddedView != 0)
HIViewSetNeedsDisplay (embeddedView, true);
return noErr;
}
}