UI Zoom Factor
-
I'm building a standalone app with Hise, in FLT "CustomSettings" I have UI Zoom Factor set to 100%.
I haveContent.makeFrontInterface(1280, 740);
and my computer has a display with
(1280 x 800)
However when I open the compiled standalone it is smaller than 100%, (but the UI Zoom Factor is still set to 100%), so I set the UI Zoom Factor to something else than 100% and then set it back to 100%, and then it scales down/up to 100%.
How come it doesn't scale to 100% when launching it (even when it's set to 100%)?
Has it to do with my
Content.makeFrontInterface(1280, 740);
and that Hise scales it down automatically at some range?
-
My guess would be that this is a project you've opened before and it's written the zoom setting to a file in the appData folder.
-
@d-healey Aha, ok I'll check, thanks!
-
@d-healey Hm.. that was not the cause
-
If the user's screen is smaller than the UI height at 100% (minus the OS toolbar) it defaults to 85% so that the interface is not capped.
-
@Christoph-Hart Ok I understand, could we in some way script the UI Zoom setting?
-
Yes, that's a reasonable request. It's actually pretty easy to do, so maybe someone else can implement it:
- fetch a reference to the main controller and dynamic_cast it to
AudioProcessorDriver
- call
driver->setGlobalScaleFactor(scaleFactor, sendNotification);
(the last parameter is important to that it sends a message to the UI to resize). - Add a API call
Engine.setZoomLevel(double scaleFactor)
(it's a bit inconsistent to the C++ naming, but it matches theEngine.getZoomLevel()
call).
EDIT: Oh and if you want to disable the 85% scaling, just remove the condition here:
- fetch a reference to the main controller and dynamic_cast it to
-
@Christoph-Hart gorgeous, I’ll give it a go sometimes tomorrow
-
@Christoph-Hart Beautiful, thank you!
-
@ustk Yezzz...great! You'll get a bear as well
-
-
@Christoph-Hart said in UI Zoom Factor:
message to the UI to resize).
Oh Wow, Thank You
Any Examples is much appreciated -
@Christoph-Hart So I've made the API, but it is of course non-dynamic, as the plugin has to be closed and reopened like for the norm zoom factor setting.
So the question is, is it easily doable to have it resized in real-time using the same API, or is it a totally different approach? -
Did you use
sendNotification
? It's basically the same thing that the combobox of the settings dialogue does. -
@Christoph-Hart Yes
void ScriptingApi::Engine::setZoomLevel(double scaleFactor) { auto mc = getScriptProcessor()->getMainController_(); AudioProcessorDriver* driver = dynamic_cast<AudioProcessorDriver*>(mc); driver->setGlobalScaleFactor(scaleFactor, sendNotification); }
or
void ScriptingApi::Engine::setZoomLevel(double scaleFactor) { auto mc = getScriptProcessor()->getMainController_(); dynamic_cast<AudioProcessorDriver*>(mc)->setGlobalScaleFactor(scaleFactor, sendNotification); }
which is the same thing
-
@Christoph-Hart I think we need this
#if USE_FRONTEND auto fpe = mc->findParentComponentOfClass<FrontendProcessorEditor>(); if (fpe != nullptr) { fpe->setGlobalScaleFactor((float)scaleFactor); } #endif
then
findParentComponentOfClass
must be adapted but I don't know how...What's the difference between
getScriptProcessor()->getMainController_();
andgetProcessor()->getMainController();
?
Both are working... -
They are both the same (and one just calls the other method with a dynamic cast).
Ah I see the problem (not sure how I could have missed that when I wrote my last answer). The editor window is not registered to the
ScaleFactorListener
system (which is weird because the system is made exactly for this purpose). I think I have to take it from here and clean up my own mess :) -
@Christoph-Hart Nice, I've just seen you implemented it yourself ;)
You also corrected the macOS compilation, but I still have the same issue when compiling:
-
Yeah, I accidentally committed this to the SNEX branch, it was meant to go to the Scriptnode branch, but I'll transfer it real quick.
-
This post is deleted!