UI Zoom Factor
-
@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! -
@ustk Think it's possible to add the same kind of function for the Streaming Mode?
-
@d-healey I can't tell but I can have a look…
-
@d-healey @Christoph-Hart I've done it and it seems to work... But I'm not against an input from Christoph before pushing :)
void ScriptingApi::Engine::setDiskMode(int mode) { auto mc = dynamic_cast<MainController*>(getScriptProcessor()->getMainController_()); AudioProcessorDriver* driver = dynamic_cast<AudioProcessorDriver*>(mc); driver->diskMode = mode; mc->getSampleManager().setDiskMode((MainController::SampleManager::DiskMode)mode); }
So
mode
should be 1 for fast and 2 for slow due to the original combobox offset.
Do you prefer a 0 based value? (0-fast 1-slow)