don't allow the vst window to take up more space than the screen size
This commit is contained in:
parent
77fa4c72b2
commit
40ee677f90
6 changed files with 35 additions and 27 deletions
|
@ -25,6 +25,7 @@
|
|||
#include <QWindow>
|
||||
#include <QTimer>
|
||||
#include <QKeyEvent>
|
||||
#include <QScreen>
|
||||
|
||||
#include "vsttypes.h"
|
||||
#include "internal/vstplugin.h"
|
||||
|
@ -54,7 +55,6 @@ AbstractVstEditorView::AbstractVstEditorView(QWidget* parent)
|
|||
: TopLevelDialog(parent)
|
||||
{
|
||||
setAttribute(Qt::WA_NativeWindow);
|
||||
m_scalingFactor = uiConfig()->guiScaling();
|
||||
}
|
||||
|
||||
AbstractVstEditorView::~AbstractVstEditorView()
|
||||
|
@ -81,14 +81,25 @@ tresult AbstractVstEditorView::resizeView(IPlugView* view, ViewRect* newSize)
|
|||
{
|
||||
view->checkSizeConstraint(newSize);
|
||||
|
||||
QScreen* screen = this->screen();
|
||||
QSize availableSize = screen->availableSize();
|
||||
|
||||
int newWidth = newSize->getWidth();
|
||||
int newHeight = newSize->getHeight();
|
||||
|
||||
//! NOTE: newSize already includes the UI scaling on Windows, so we have to remove it before setting the fixed size.
|
||||
//! Otherwise, the user will get an extremely large window and won't be able to resize it
|
||||
#ifdef Q_OS_WIN
|
||||
setFixedSize(newSize->getWidth() / m_scalingFactor, newSize->getHeight() / m_scalingFactor);
|
||||
#else
|
||||
setFixedSize(newSize->getWidth(), newSize->getHeight());
|
||||
qreal scaling = screen->devicePixelRatio();
|
||||
newWidth = newWidth / scaling;
|
||||
newHeight = newHeight / scaling;
|
||||
#endif
|
||||
|
||||
newWidth = std::min(newWidth, availableSize.width());
|
||||
newHeight = std::min(newHeight, availableSize.height());
|
||||
|
||||
setFixedSize(newWidth, newHeight);
|
||||
|
||||
view->onSize(newSize);
|
||||
|
||||
update();
|
||||
|
@ -138,24 +149,31 @@ void AbstractVstEditorView::attachView(VstPluginPtr pluginPtr)
|
|||
return;
|
||||
}
|
||||
|
||||
FUnknownPtr<IPluginContentScaleHandler> scalingHandler(m_view);
|
||||
if (scalingHandler) {
|
||||
scalingHandler->setContentScaleFactor(m_scalingFactor);
|
||||
}
|
||||
connect(windowHandle(), &QWindow::screenChanged, this, [this](QScreen*) {
|
||||
updateViewGeometry();
|
||||
});
|
||||
|
||||
QTimer::singleShot(0, [this]() {
|
||||
setupWindowGeometry();
|
||||
updateViewGeometry();
|
||||
moveViewToMainWindowCenter();
|
||||
});
|
||||
}
|
||||
|
||||
void AbstractVstEditorView::setupWindowGeometry()
|
||||
void AbstractVstEditorView::updateViewGeometry()
|
||||
{
|
||||
IF_ASSERT_FAILED(m_view) {
|
||||
return;
|
||||
}
|
||||
|
||||
FUnknownPtr<IPluginContentScaleHandler> scalingHandler(m_view);
|
||||
if (scalingHandler) {
|
||||
scalingHandler->setContentScaleFactor(screen()->devicePixelRatio());
|
||||
}
|
||||
|
||||
ViewRect size;
|
||||
m_view->getSize(&size);
|
||||
|
||||
resizeView(m_view, &size);
|
||||
|
||||
moveViewToMainWindowCenter();
|
||||
}
|
||||
|
||||
void AbstractVstEditorView::moveViewToMainWindowCenter()
|
||||
|
@ -221,6 +239,7 @@ void AbstractVstEditorView::setTrackId(int newTrackId)
|
|||
if (m_trackId == newTrackId) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_trackId = newTrackId;
|
||||
emit trackIdChanged();
|
||||
|
||||
|
@ -239,6 +258,7 @@ void AbstractVstEditorView::setResourceId(const QString& newResourceId)
|
|||
if (m_resourceId == newResourceId) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_resourceId = newResourceId;
|
||||
emit resourceIdChanged();
|
||||
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
|
||||
#include "modularity/ioc.h"
|
||||
#include "ivstpluginsregister.h"
|
||||
#include "ui/iuiconfiguration.h"
|
||||
|
||||
class QWidget;
|
||||
|
||||
|
@ -43,7 +42,6 @@ class AbstractVstEditorView : public uicomponents::TopLevelDialog, public Steinb
|
|||
Q_PROPERTY(QString resourceId READ resourceId WRITE setResourceId NOTIFY resourceIdChanged)
|
||||
|
||||
INJECT(vst, IVstPluginsRegister, pluginsRegister)
|
||||
INJECT(vst, ui::IUiConfiguration, uiConfig)
|
||||
|
||||
public:
|
||||
AbstractVstEditorView(QWidget* parent = nullptr);
|
||||
|
@ -70,7 +68,7 @@ protected:
|
|||
private:
|
||||
void attachView(VstPluginPtr pluginPtr);
|
||||
|
||||
void setupWindowGeometry();
|
||||
void updateViewGeometry();
|
||||
void moveViewToMainWindowCenter();
|
||||
|
||||
void showEvent(QShowEvent* ev) override;
|
||||
|
@ -87,8 +85,6 @@ private:
|
|||
audio::TrackId m_trackId = -1;
|
||||
QString m_resourceId;
|
||||
audio::AudioFxChainOrder m_chainOrder = -1;
|
||||
|
||||
double m_scalingFactor = 0.0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -22,11 +22,7 @@
|
|||
|
||||
#include "vstfxeditorview.h"
|
||||
|
||||
#include "vsttypes.h"
|
||||
#include "internal/vstplugin.h"
|
||||
|
||||
using namespace mu::vst;
|
||||
using namespace Steinberg;
|
||||
|
||||
VstFxEditorView::VstFxEditorView(QWidget* parent)
|
||||
: AbstractVstEditorView(parent)
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
#ifndef MU_VST_VSTFXEDITORVIEW_H
|
||||
#define MU_VST_VSTFXEDITORVIEW_H
|
||||
|
||||
#include "vstieditorview.h"
|
||||
#include "abstractvsteditorview.h"
|
||||
|
||||
namespace mu::vst {
|
||||
class VstFxEditorView : public AbstractVstEditorView
|
||||
|
|
|
@ -22,11 +22,7 @@
|
|||
|
||||
#include "vstieditorview.h"
|
||||
|
||||
#include "vsttypes.h"
|
||||
#include "internal/vstplugin.h"
|
||||
|
||||
using namespace mu::vst;
|
||||
using namespace Steinberg;
|
||||
|
||||
VstiEditorView::VstiEditorView(QWidget* parent)
|
||||
: AbstractVstEditorView(parent)
|
||||
|
|
|
@ -41,4 +41,4 @@ private:
|
|||
|
||||
Q_DECLARE_METATYPE(mu::vst::VstiEditorView)
|
||||
|
||||
#endif // VSTIEDITORVIEW_H
|
||||
#endif // MU_VST_VSTIEDITORVIEW_H
|
||||
|
|
Loading…
Reference in a new issue