Skip to content

Commit

Permalink
Ensure rendering engine gets set on all TopLevelWindows
Browse files Browse the repository at this point in the history
  • Loading branch information
anjaldoshi committed Feb 26, 2025
1 parent f6d1a20 commit 823dd89
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 19 deletions.
22 changes: 13 additions & 9 deletions Source/Processors/Editors/VisualizerEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -166,15 +166,6 @@ void VisualizerEditor::ButtonResponder::buttonClicked (Button* button)
editor->dataWindow->setVisible (true);
editor->dataWindow->toFront (true);
editor->dataWindow->addListener (editor);

// Set the rendering engine for the window
auto editorPeer = editor->getPeer();
if (auto peer = editor->canvas->getPeer())
{
auto editorPeer = editor->getPeer();
if (editorPeer)
peer->setCurrentRenderingEngine (editorPeer->getCurrentRenderingEngine());
}
}
else
{
Expand All @@ -191,6 +182,19 @@ void VisualizerEditor::ButtonResponder::buttonClicked (Button* button)
editor->dataWindow->setVisible (false);
}
}

#if JUCE_WINDOWS
// Set the rendering engine for the window
if (editor->dataWindow->isVisible())
{
auto editorPeer = editor->getPeer();
if (auto peer = editor->dataWindow->getPeer())
{
if (editorPeer)
peer->setCurrentRenderingEngine (editorPeer->getCurrentRenderingEngine());
}
}
#endif
}
else if (button == editor->tabSelector.get())
{
Expand Down
29 changes: 19 additions & 10 deletions Source/UI/UIComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1105,21 +1105,13 @@ bool UIComponent::perform (const InvocationInfo& info)

case setSoftwareRenderer:
{
if (auto peer = getPeer())
{
peer->setCurrentRenderingEngine (0);
repaint();
}
setRenderingEngine (0);
break;
}

case setDirect2DRenderer:
{
if (auto peer = getPeer())
{
peer->setCurrentRenderingEngine (1);
repaint();
}
setRenderingEngine (1);
break;
}

Expand Down Expand Up @@ -1148,6 +1140,23 @@ bool UIComponent::perform (const InvocationInfo& info)
return true;
}

void UIComponent::setRenderingEngine (int index)
{
#if JUCE_WINDOWS
for (int i = 0; i < TopLevelWindow::getNumTopLevelWindows(); i++)
{
if (TopLevelWindow* window = TopLevelWindow::getTopLevelWindow (i))
{
if (auto* peer = window->getPeer())
{
peer->setCurrentRenderingEngine (index);
window->repaint();
}
}
}
#endif
}

void UIComponent::saveStateToXml (XmlElement* xml)
{
XmlElement* uiComponentState = xml->createNewChildElement ("UICOMPONENT");
Expand Down
3 changes: 3 additions & 0 deletions Source/UI/UIComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,9 @@ class UIComponent : public Component,

CustomLookAndFeel* customLookAndFeel;

/** Set the rendering engine to use on Windows - Software (CPU) or Direct2D (GPU))*/
void setRenderingEngine (int engineIndex);

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (UIComponent);
};

Expand Down

0 comments on commit 823dd89

Please sign in to comment.