Update minimum & maximum size in the PiP
This commit is contained in:
parent
2f5038a792
commit
66d2c06eb4
|
@ -369,6 +369,18 @@ void PipPanel::init() {
|
||||||
// Workaround Qt's forced transient parent.
|
// Workaround Qt's forced transient parent.
|
||||||
Ui::Platform::ClearTransientParent(widget());
|
Ui::Platform::ClearTransientParent(widget());
|
||||||
}, rp()->lifetime());
|
}, rp()->lifetime());
|
||||||
|
|
||||||
|
rp()->sizeValue(
|
||||||
|
) | rpl::start_with_next([=](QSize size) {
|
||||||
|
handleResize(size);
|
||||||
|
}, rp()->lifetime());
|
||||||
|
|
||||||
|
QObject::connect(
|
||||||
|
widget()->windowHandle(),
|
||||||
|
&QWindow::screenChanged,
|
||||||
|
[=](QScreen *screen) {
|
||||||
|
handleScreenChanged(screen);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
not_null<QWidget*> PipPanel::widget() const {
|
not_null<QWidget*> PipPanel::widget() const {
|
||||||
|
@ -531,7 +543,7 @@ void PipPanel::setPositionOnScreen(Position position, QRect available) {
|
||||||
std::max(normalized.height(), minimalSize.height()));
|
std::max(normalized.height(), minimalSize.height()));
|
||||||
|
|
||||||
// Apply maximal size.
|
// Apply maximal size.
|
||||||
const auto maximalSize = (_ratio.width() > _ratio.height())
|
const auto maximalSize = byWidth
|
||||||
? QSize(fit.width(), fit.width() * _ratio.height() / _ratio.width())
|
? QSize(fit.width(), fit.width() * _ratio.height() / _ratio.width())
|
||||||
: QSize(fit.height() * _ratio.width() / _ratio.height(), fit.height());
|
: QSize(fit.height() * _ratio.width() / _ratio.height(), fit.height());
|
||||||
|
|
||||||
|
@ -621,6 +633,22 @@ void PipPanel::handleResize(QSize size) {
|
||||||
#endif // QT_WAYLAND_EGL_CLIENT_HW_INTEGRATION_LIB
|
#endif // QT_WAYLAND_EGL_CLIENT_HW_INTEGRATION_LIB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PipPanel::handleScreenChanged(QScreen *screen) {
|
||||||
|
const auto screenGeometry = screen->availableGeometry();
|
||||||
|
const auto minimalSize = _ratio.scaled(
|
||||||
|
st::pipMinimalSize,
|
||||||
|
st::pipMinimalSize,
|
||||||
|
Qt::KeepAspectRatioByExpanding);
|
||||||
|
const auto maximalSize = _ratio.scaled(
|
||||||
|
screenGeometry.width() / 2,
|
||||||
|
screenGeometry.height() / 2,
|
||||||
|
Qt::KeepAspectRatio);
|
||||||
|
widget()->setMinimumSize(minimalSize);
|
||||||
|
widget()->setMaximumSize(
|
||||||
|
std::max(minimalSize.width(), maximalSize.width()),
|
||||||
|
std::max(minimalSize.height(), maximalSize.height()));
|
||||||
|
}
|
||||||
|
|
||||||
void PipPanel::handleMousePress(QPoint position, Qt::MouseButton button) {
|
void PipPanel::handleMousePress(QPoint position, Qt::MouseButton button) {
|
||||||
if (button != Qt::LeftButton) {
|
if (button != Qt::LeftButton) {
|
||||||
return;
|
return;
|
||||||
|
@ -770,6 +798,10 @@ void PipPanel::processDrag(QPoint point) {
|
||||||
const auto clamped = (dragPart == RectPart::Center)
|
const auto clamped = (dragPart == RectPart::Center)
|
||||||
? ClampToEdges(screen, valid)
|
? ClampToEdges(screen, valid)
|
||||||
: valid.topLeft();
|
: valid.topLeft();
|
||||||
|
widget()->setMinimumSize(minimalSize);
|
||||||
|
widget()->setMaximumSize(
|
||||||
|
std::max(minimalSize.width(), maximalSize.width()),
|
||||||
|
std::max(minimalSize.height(), maximalSize.height()));
|
||||||
if (clamped != valid.topLeft()) {
|
if (clamped != valid.topLeft()) {
|
||||||
moveAnimated(clamped);
|
moveAnimated(clamped);
|
||||||
} else {
|
} else {
|
||||||
|
@ -953,11 +985,6 @@ void Pip::setupPanel() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}, _panel.rp()->lifetime());
|
}, _panel.rp()->lifetime());
|
||||||
|
|
||||||
_panel.rp()->sizeValue(
|
|
||||||
) | rpl::start_with_next([=](QSize size) {
|
|
||||||
_panel.handleResize(size);
|
|
||||||
}, _panel.rp()->lifetime());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Pip::handleClose() {
|
void Pip::handleClose() {
|
||||||
|
|
|
@ -77,6 +77,7 @@ public:
|
||||||
[[nodiscard]] bool dragging() const;
|
[[nodiscard]] bool dragging() const;
|
||||||
|
|
||||||
void handleResize(QSize size);
|
void handleResize(QSize size);
|
||||||
|
void handleScreenChanged(QScreen *screen);
|
||||||
void handleMousePress(QPoint position, Qt::MouseButton button);
|
void handleMousePress(QPoint position, Qt::MouseButton button);
|
||||||
void handleMouseRelease(QPoint position, Qt::MouseButton button);
|
void handleMouseRelease(QPoint position, Qt::MouseButton button);
|
||||||
void handleMouseMove(QPoint position);
|
void handleMouseMove(QPoint position);
|
||||||
|
|
Loading…
Reference in New Issue