Adding an overlay on top of audio plugins loaded in a JUCE window

I am not a programmer, I vibe-coded an audio plugin Host and then created a VST3 plugin version. All for personal use. Both versions have the same issue that needs resolving that I cant seem to get around, but also, dont know if its an AI limitation or a real JUCE limitation. Knowing how useless AI can be at coding, I’m guessing JUCE is capable, but need to get some sort of confirmation if possible.

Ok, so essentially, the VST3 plugin is called PolyHostInterface (PHI), which is able to load several other plugins at once. But I added very similar functionality as Stefan Mattings PointerCC program. This basically allows users to create a map of points for which the MIDI hardware uses MIDI CC’s to control X, Y and parameter adjustment.

The difference between my implementation and Stefan’s is that my app/plugin uses a built in overlay when a toolbar button is pressed. That overlay allows users to place points where the MIDI CC knobs can jumps to for quicker editing. All good so far, everything is working here.

The issue though, is that the overlay has to be made as a separate window entity and cannot be made as a part of the actual Host/plugin as the loaded plugins gui’s are always on top of the overlay, meaning the loaded plugins are obscuring the entire PointerCC editor. Hence I have had to make the overlay become a separate window to the Host/Plugin, which is really not wanted.

The main issue with this is that when using PHI in a DAW, each instance can have its own set of loaded plugins, but also each instance can have its own PointerCC editor. That means you have two windows open per instance and it gets messy. Partly due to the amount of unnecessary windows, but mainly because they overlap other windows, I cannot close them on lose focus, so they just get in the way.

So really what I need to know is, is it possible to have an overlay that appears on top of plugins gui’s loaded inside a JUCE Host app/plugin?

I’ll try to upload a picture of the current state, which is only as a separate window for Host/Plugin and editor, the only thing you’ll see is that the Windows task bar has multi-windows open for the Host. But you should get a picture of what I mean by Host/Plugin and Editor overlay. The only way I can seem to make the overlay usable is to make it a separate window, but I really want to make it a part of the actual Host/Plugin window itself and make it appear as topmost so it shows over a loaded plugins gui. How do I do that?

Thanks for any advice or help you can offer. If it’s easier, I can share a link of the PHI Host/Plugin so you can test or even look at the source of you wish.

EDIT: Here’s a link to the github page.
EDIT: I can only post one pic due to being new user, so heres a pic of the PHI Host with the Editor overlay active…

Not sure if anyone else solved this, but I started from scratch and managed to get this working as an integrated overlay instead of a separate window. I tested these methods and came up with the solution:
CallOutBox = fully works, but no control over placement.
Document window = Fully works, but remains a separate window that blocks anything under it when switching to other apps.
BubbleMessageComponent = not suitable for custom content
PopupMenu = auto-closes after click.
The working solution was not CallOutBox, PopupMenu, BubbleMessageComponent, or DocumentWindow.
It was a custom overlay based on a plain juce::Component added directly to the desktop with addToDesktop(…), then manually positioned over the hosted plugin editor using screen bounds.
Why it worked:-

Because it gives you:
no menu behavior
no callout insets
no window title bar/chrome
exact manual bounds
still desktop-level overlay behaviour above the hosted editor

Maybe this info is of use to someone out there? Hope it helps! :wink:

You can visit my github page to see what I did.

Am I understanding your product right, as it allows users to „move“ and „click“ the mouse over an open hosted editor-window using MIDI-CC?

That’s cool, that you got the overlay to work. I remember being stuck at a similar problem.

How are you (if you are) triggering clicks into the editor window?

Hi, yes, it allows you to set MIDI CC numbers to control Mouse X and Y to allow positioning the cursor on the gui. If you set points in the Point editor to create a “map” it then jumps from point to point, or you can use without creating points for smooth mouse movement, similar to IBM laptops little red touch pointer.

When the cursor is over a software parameter, you can then use a third knob, also MIDI CC customisable, to control whatever the cursor is over. It does this by emulating mouse scroll behaviour. Some plugins, as you likely know, do not respond to scroll, only mouse drag. So I added a setting to swap between the two. This setting is the “Adjust Method” which can be set per tab/plugin.

I haven’t added mouse button emulation, so clicks aren’t supported yet, but that could be done too I expect. I could add three new options to set MIDI CC to control Left, Middle, Right mouse buttons, maybe even forward/back buttons too. I just don’t have a hardware controller with custom button settings, so not sure I can test it. But if you would like that, I could do it. I do have an Akai Mini Plus that sends MIDI CC from its sequencer buttons, but they aren’t customisable I don’t think. But it may be enough to test button emulation.

Unless by clicks, you mean the real mouse clicks on the overlay where you set the point mapping? Well, read below, as I cannot answer how that is done I’m afraid!

Btw, the first thing I said at the top:
“I am not a programmer, I vibe-coded an audio plugin Host and then created a VST3 plugin version.”
So if you ask how I did something, I am afraid I actually have no idea! lol Because I didn’t write it, ChatGPT 5.4 did! I just asked it to do what I wanted, and got this app at the end. Hence why I also said, feel free to check the source code. It was a struggle at times, but has improved massively lately. Though, I just used my Copilot Pro+ limit in two days to get it finished! But I got a fair bit done and, apart from trying to solve the overlay problem, it really went super smoothly! Implementing everything with minimal hassle. Yeah some compile errors and warnings, but they got cleared up real quick. Anyway, upshot is, it’s pretty much finished, but I can add these new button emulations if wanted? Let me know.

Here’s a link to my github page

Oh, I have to point out that the whole Pointer Control idea came from Stefan Mattings PointerControl CC app on github. It needed much improvement, but I haven’t heard from him for some time. I requested permission to update his app, but decided to rewrite it, which then turned into this plugin. So credit for that idea goes to him. But to be fair, he got it from someone else. Go check out his page for more info.