mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-07-25 15:03:03 +02:00
Update media viewer geometry on showing and screen change
This commit is contained in:
parent
b71f61dec3
commit
cd67cb1c62
2 changed files with 41 additions and 10 deletions
|
@ -359,6 +359,7 @@ OverlayWidget::OverlayWidget()
|
|||
} else {
|
||||
setWindowFlags(Qt::FramelessWindowHint);
|
||||
}
|
||||
updateGeometry(QApplication::primaryScreen()->geometry());
|
||||
moveToScreen();
|
||||
setAttribute(Qt::WA_NoSystemBackground, true);
|
||||
setAttribute(Qt::WA_TranslucentBackground, true);
|
||||
|
@ -374,6 +375,17 @@ OverlayWidget::OverlayWidget()
|
|||
setWindowState(Qt::WindowFullScreen);
|
||||
}
|
||||
|
||||
connect(
|
||||
windowHandle(),
|
||||
&QWindow::visibleChanged,
|
||||
this,
|
||||
[=](bool visible) { handleVisibleChanged(visible); });
|
||||
connect(
|
||||
windowHandle(),
|
||||
&QWindow::screenChanged,
|
||||
this,
|
||||
[=](QScreen *screen) { handleScreenChanged(screen); });
|
||||
|
||||
#if defined Q_OS_MAC && !defined OS_OSX
|
||||
TouchBar::SetupMediaViewTouchBar(
|
||||
winId(),
|
||||
|
@ -417,7 +429,7 @@ void OverlayWidget::refreshLang() {
|
|||
InvokeQueued(this, [this] { updateThemePreviewGeometry(); });
|
||||
}
|
||||
|
||||
void OverlayWidget::moveToScreen(bool force) {
|
||||
void OverlayWidget::moveToScreen() {
|
||||
const auto widgetScreen = [&](auto &&widget) -> QScreen* {
|
||||
if (auto handle = widget ? widget->windowHandle() : nullptr) {
|
||||
return handle->screen();
|
||||
|
@ -432,14 +444,10 @@ void OverlayWidget::moveToScreen(bool force) {
|
|||
if (activeWindowScreen && myScreen && myScreen != activeWindowScreen) {
|
||||
windowHandle()->setScreen(activeWindowScreen);
|
||||
}
|
||||
const auto screen = activeWindowScreen
|
||||
? activeWindowScreen
|
||||
: QApplication::primaryScreen();
|
||||
const auto available = screen->geometry();
|
||||
if (!force && geometry() == available) {
|
||||
return;
|
||||
}
|
||||
setGeometry(available);
|
||||
}
|
||||
|
||||
void OverlayWidget::updateGeometry(const QRect &rect) {
|
||||
setGeometry(rect);
|
||||
|
||||
auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize;
|
||||
_closeNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, st::mediaviewControlMargin, st::mediaviewControlSize, st::mediaviewControlSize);
|
||||
|
@ -1294,6 +1302,12 @@ void OverlayWidget::onScreenResized(int screen) {
|
|||
const auto changed = (screen >= 0 && screen < screens.size())
|
||||
? screens[screen]
|
||||
: nullptr;
|
||||
if (windowHandle()
|
||||
&& windowHandle()->screen()
|
||||
&& changed
|
||||
&& windowHandle()->screen() == changed) {
|
||||
updateGeometry(changed->geometry());
|
||||
}
|
||||
if (!windowHandle()
|
||||
|| !windowHandle()->screen()
|
||||
|| !changed
|
||||
|
@ -1302,6 +1316,19 @@ void OverlayWidget::onScreenResized(int screen) {
|
|||
}
|
||||
}
|
||||
|
||||
void OverlayWidget::handleVisibleChanged(bool visible) {
|
||||
if (visible) {
|
||||
const auto screen = windowHandle()->screen()
|
||||
? windowHandle()->screen()
|
||||
: QApplication::primaryScreen();
|
||||
updateGeometry(screen->geometry());
|
||||
}
|
||||
}
|
||||
|
||||
void OverlayWidget::handleScreenChanged(QScreen *screen) {
|
||||
updateGeometry(screen->geometry());
|
||||
}
|
||||
|
||||
void OverlayWidget::onToMessage() {
|
||||
if (!_session) {
|
||||
return;
|
||||
|
|
|
@ -208,10 +208,14 @@ private:
|
|||
void assignMediaPointer(not_null<PhotoData*> photo);
|
||||
|
||||
void updateOver(QPoint mpos);
|
||||
void moveToScreen(bool force = false);
|
||||
void moveToScreen();
|
||||
bool moveToNext(int delta);
|
||||
void preloadData(int delta);
|
||||
|
||||
void updateGeometry(const QRect &rect);
|
||||
void handleVisibleChanged(bool visible);
|
||||
void handleScreenChanged(QScreen *screen);
|
||||
|
||||
bool contentCanBeSaved() const;
|
||||
void checkForSaveLoaded();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue