mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
Use WebViewLifetimeListener in WebControlRelays
This commit is contained in:
parent
b395239884
commit
853e2052ff
4 changed files with 98 additions and 27 deletions
|
|
@ -2,6 +2,32 @@
|
|||
|
||||
# develop
|
||||
|
||||
## Change
|
||||
|
||||
The constructors of the WebSliderRelay, WebToggleButtonRelay and
|
||||
WebComboBoxRelay classes were changed and they no longer accept a reference
|
||||
parameter to a WebBrowserComponent object.
|
||||
|
||||
**Possible Issues**
|
||||
|
||||
Code that uses these classes will fail to compile.
|
||||
|
||||
**Workaround**
|
||||
|
||||
Omit the WebBrowserComponent parameter when constructing the relay objects.
|
||||
|
||||
**Rationale**
|
||||
|
||||
The relay classes use a new underlying mechanism to obtain a pointer to the
|
||||
WebBrowserComponent object. When calling the
|
||||
WebBrowserComponent::Options::withOptionsFrom() function with the relay as a
|
||||
parameter, the corresponding WebBrowserComponent object will notify the relay
|
||||
about its creation and destruction.
|
||||
|
||||
This avoids the anti-pattern where the relay class required a reference to a
|
||||
yet uninitialised WebBrowserComponent object.
|
||||
|
||||
|
||||
## Change
|
||||
|
||||
The coefficients of LadderFilter::Mode::BPF12 have been changed, causing a
|
||||
|
|
|
|||
|
|
@ -438,9 +438,9 @@ public:
|
|||
private:
|
||||
WebViewPluginAudioProcessor& processorRef;
|
||||
|
||||
WebSliderRelay cutoffSliderRelay { webComponent, "cutoffSlider" };
|
||||
WebToggleButtonRelay muteToggleRelay { webComponent, "muteToggle" };
|
||||
WebComboBoxRelay filterTypeComboRelay { webComponent, "filterTypeCombo" };
|
||||
WebSliderRelay cutoffSliderRelay { "cutoffSlider" };
|
||||
WebToggleButtonRelay muteToggleRelay { "muteToggle" };
|
||||
WebComboBoxRelay filterTypeComboRelay { "filterTypeCombo" };
|
||||
|
||||
WebControlParameterIndexReceiver controlParameterIndexReceiver;
|
||||
|
||||
|
|
|
|||
|
|
@ -37,9 +37,8 @@ namespace juce
|
|||
|
||||
#if JUCE_WEB_BROWSER
|
||||
|
||||
WebSliderRelay::WebSliderRelay (WebBrowserComponent& browserIn, StringRef nameIn)
|
||||
: browser (browserIn),
|
||||
name (nameIn)
|
||||
WebSliderRelay::WebSliderRelay (StringRef nameIn)
|
||||
: name (nameIn)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -75,12 +74,25 @@ WebBrowserComponent::Options WebSliderRelay::buildOptions (const WebBrowserCompo
|
|||
{
|
||||
return initialOptions
|
||||
.withEventListener (eventId, [this] (auto object) { handleEvent (object); })
|
||||
.withInitialisationData ("__juce__sliders", name);
|
||||
.withInitialisationData ("__juce__sliders", name)
|
||||
.withWebViewLifetimeListener (this);
|
||||
}
|
||||
|
||||
void WebSliderRelay::emitEvent (const var& payload)
|
||||
{
|
||||
browser.emitEventIfBrowserIsVisible (eventId, payload);
|
||||
if (browser != nullptr)
|
||||
browser->emitEventIfBrowserIsVisible (eventId, payload);
|
||||
}
|
||||
|
||||
void WebSliderRelay::webViewConstructed (WebBrowserComponent* browserIn)
|
||||
{
|
||||
browser = browserIn;
|
||||
listeners.call (&Listener::initialUpdateRequested, this);
|
||||
}
|
||||
|
||||
void WebSliderRelay::webViewDestructed (WebBrowserComponent*)
|
||||
{
|
||||
browser = nullptr;
|
||||
}
|
||||
|
||||
void WebSliderRelay::handleEvent (const var& event)
|
||||
|
|
@ -122,9 +134,8 @@ void WebSliderRelay::handleEvent (const var& event)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
WebToggleButtonRelay::WebToggleButtonRelay ([[maybe_unused]] WebBrowserComponent& browserIn, StringRef nameIn)
|
||||
: browser (browserIn),
|
||||
name (nameIn)
|
||||
WebToggleButtonRelay::WebToggleButtonRelay (StringRef nameIn)
|
||||
: name (nameIn)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -154,12 +165,25 @@ WebBrowserComponent::Options WebToggleButtonRelay::buildOptions (const WebBrowse
|
|||
{
|
||||
return initialOptions
|
||||
.withEventListener (eventId, [this] (auto object) { handleEvent (object); })
|
||||
.withInitialisationData ("__juce__toggles", name);
|
||||
.withInitialisationData ("__juce__toggles", name)
|
||||
.withWebViewLifetimeListener (this);
|
||||
}
|
||||
|
||||
void WebToggleButtonRelay::emitEvent (const var& payload)
|
||||
{
|
||||
browser.emitEventIfBrowserIsVisible (eventId, payload);
|
||||
if (browser != nullptr)
|
||||
browser->emitEventIfBrowserIsVisible (eventId, payload);
|
||||
}
|
||||
|
||||
void WebToggleButtonRelay::webViewConstructed (WebBrowserComponent* browserIn)
|
||||
{
|
||||
browser = browserIn;
|
||||
listeners.call (&Listener::initialUpdateRequested);
|
||||
}
|
||||
|
||||
void WebToggleButtonRelay::webViewDestructed (WebBrowserComponent*)
|
||||
{
|
||||
browser = nullptr;
|
||||
}
|
||||
|
||||
void WebToggleButtonRelay::handleEvent (const var& event)
|
||||
|
|
@ -187,9 +211,8 @@ void WebToggleButtonRelay::handleEvent (const var& event)
|
|||
}
|
||||
|
||||
//==============================================================================
|
||||
WebComboBoxRelay::WebComboBoxRelay ([[maybe_unused]] WebBrowserComponent& browserIn, StringRef nameIn)
|
||||
: browser (browserIn),
|
||||
name (nameIn)
|
||||
WebComboBoxRelay::WebComboBoxRelay (StringRef nameIn)
|
||||
: name (nameIn)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -219,12 +242,25 @@ WebBrowserComponent::Options WebComboBoxRelay::buildOptions (const WebBrowserCom
|
|||
{
|
||||
return initialOptions
|
||||
.withEventListener (eventId, [this] (auto object) { handleEvent (object); })
|
||||
.withInitialisationData ("__juce__comboBoxes", name);
|
||||
.withInitialisationData ("__juce__comboBoxes", name)
|
||||
.withWebViewLifetimeListener (this);
|
||||
}
|
||||
|
||||
void WebComboBoxRelay::emitEvent (const var& payload)
|
||||
{
|
||||
browser.emitEventIfBrowserIsVisible (eventId, payload);
|
||||
if (browser != nullptr)
|
||||
browser->emitEventIfBrowserIsVisible (eventId, payload);
|
||||
}
|
||||
|
||||
void WebComboBoxRelay::webViewConstructed (WebBrowserComponent* browserIn)
|
||||
{
|
||||
browser = browserIn;
|
||||
listeners.call (&Listener::initialUpdateRequested);
|
||||
}
|
||||
|
||||
void WebComboBoxRelay::webViewDestructed (WebBrowserComponent*)
|
||||
{
|
||||
browser = nullptr;
|
||||
}
|
||||
|
||||
void WebComboBoxRelay::handleEvent (const var& event)
|
||||
|
|
|
|||
|
|
@ -62,14 +62,15 @@ namespace juce
|
|||
|
||||
@tags{GUI}
|
||||
*/
|
||||
class JUCE_API WebSliderRelay : public OptionsBuilder<WebBrowserComponent::Options>
|
||||
class JUCE_API WebSliderRelay : public OptionsBuilder<WebBrowserComponent::Options>,
|
||||
private WebViewLifetimeListener
|
||||
{
|
||||
public:
|
||||
/** Creating a relay will ensure that a Javascript object under the provided name will be
|
||||
available in the specified WebBrowserComponent's context. Use the frontend framework's
|
||||
getSliderState function with the same name to get a hold of this object.
|
||||
*/
|
||||
WebSliderRelay (WebBrowserComponent& browserIn, StringRef nameIn);
|
||||
WebSliderRelay (StringRef nameIn);
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
|
|
@ -98,8 +99,10 @@ public:
|
|||
|
||||
private:
|
||||
void handleEvent (const var& event);
|
||||
void webViewConstructed (WebBrowserComponent*) override;
|
||||
void webViewDestructed (WebBrowserComponent*) override;
|
||||
|
||||
WebBrowserComponent& browser;
|
||||
WebBrowserComponent* browser = nullptr;
|
||||
String name;
|
||||
float value{};
|
||||
Identifier eventId { "__juce__slider" + name };
|
||||
|
|
@ -134,14 +137,15 @@ private:
|
|||
|
||||
@tags{GUI}
|
||||
*/
|
||||
class JUCE_API WebToggleButtonRelay : public OptionsBuilder<WebBrowserComponent::Options>
|
||||
class JUCE_API WebToggleButtonRelay : public OptionsBuilder<WebBrowserComponent::Options>,
|
||||
private WebViewLifetimeListener
|
||||
{
|
||||
public:
|
||||
/** Creating a relay will ensure that a Javascript object under the provided name will be
|
||||
available in the specified WebBrowserComponent's context. Use the frontend framework's
|
||||
getToggleState function with the same name to get a hold of this object.
|
||||
*/
|
||||
WebToggleButtonRelay (WebBrowserComponent& browserIn, StringRef nameIn);
|
||||
WebToggleButtonRelay (StringRef nameIn);
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
|
|
@ -169,8 +173,10 @@ public:
|
|||
|
||||
private:
|
||||
void handleEvent (const var& event);
|
||||
void webViewConstructed (WebBrowserComponent*) override;
|
||||
void webViewDestructed (WebBrowserComponent*) override;
|
||||
|
||||
WebBrowserComponent& browser;
|
||||
WebBrowserComponent* browser = nullptr;
|
||||
String name;
|
||||
Identifier eventId { "__juce__toggle" + name };
|
||||
ListenerList<Listener> listeners;
|
||||
|
|
@ -204,14 +210,15 @@ private:
|
|||
|
||||
@tags{GUI}
|
||||
*/
|
||||
class JUCE_API WebComboBoxRelay : public OptionsBuilder<WebBrowserComponent::Options>
|
||||
class JUCE_API WebComboBoxRelay : public OptionsBuilder<WebBrowserComponent::Options>,
|
||||
private WebViewLifetimeListener
|
||||
{
|
||||
public:
|
||||
/** Creating a relay will ensure that a Javascript object under the provided name will be
|
||||
available in the specified WebBrowserComponent's context. Use the frontend framework's
|
||||
getComboBoxState function with the same name to get a hold of this object.
|
||||
*/
|
||||
WebComboBoxRelay (WebBrowserComponent& browserIn, StringRef nameIn);
|
||||
WebComboBoxRelay (StringRef nameIn);
|
||||
|
||||
//==============================================================================
|
||||
/** @internal */
|
||||
|
|
@ -239,8 +246,10 @@ public:
|
|||
|
||||
private:
|
||||
void handleEvent (const var& event);
|
||||
void webViewConstructed (WebBrowserComponent*) override;
|
||||
void webViewDestructed (WebBrowserComponent*) override;
|
||||
|
||||
WebBrowserComponent& browser;
|
||||
WebBrowserComponent* browser = nullptr;
|
||||
String name;
|
||||
Identifier eventId { "__juce__comboBox" + name };
|
||||
ListenerList<Listener> listeners;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue