mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-07-26 23:43:06 +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 {
|
} else {
|
||||||
setWindowFlags(Qt::FramelessWindowHint);
|
setWindowFlags(Qt::FramelessWindowHint);
|
||||||
}
|
}
|
||||||
|
updateGeometry(QApplication::primaryScreen()->geometry());
|
||||||
moveToScreen();
|
moveToScreen();
|
||||||
setAttribute(Qt::WA_NoSystemBackground, true);
|
setAttribute(Qt::WA_NoSystemBackground, true);
|
||||||
setAttribute(Qt::WA_TranslucentBackground, true);
|
setAttribute(Qt::WA_TranslucentBackground, true);
|
||||||
|
@ -374,6 +375,17 @@ OverlayWidget::OverlayWidget()
|
||||||
setWindowState(Qt::WindowFullScreen);
|
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
|
#if defined Q_OS_MAC && !defined OS_OSX
|
||||||
TouchBar::SetupMediaViewTouchBar(
|
TouchBar::SetupMediaViewTouchBar(
|
||||||
winId(),
|
winId(),
|
||||||
|
@ -417,7 +429,7 @@ void OverlayWidget::refreshLang() {
|
||||||
InvokeQueued(this, [this] { updateThemePreviewGeometry(); });
|
InvokeQueued(this, [this] { updateThemePreviewGeometry(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayWidget::moveToScreen(bool force) {
|
void OverlayWidget::moveToScreen() {
|
||||||
const auto widgetScreen = [&](auto &&widget) -> QScreen* {
|
const auto widgetScreen = [&](auto &&widget) -> QScreen* {
|
||||||
if (auto handle = widget ? widget->windowHandle() : nullptr) {
|
if (auto handle = widget ? widget->windowHandle() : nullptr) {
|
||||||
return handle->screen();
|
return handle->screen();
|
||||||
|
@ -432,14 +444,10 @@ void OverlayWidget::moveToScreen(bool force) {
|
||||||
if (activeWindowScreen && myScreen && myScreen != activeWindowScreen) {
|
if (activeWindowScreen && myScreen && myScreen != activeWindowScreen) {
|
||||||
windowHandle()->setScreen(activeWindowScreen);
|
windowHandle()->setScreen(activeWindowScreen);
|
||||||
}
|
}
|
||||||
const auto screen = activeWindowScreen
|
}
|
||||||
? activeWindowScreen
|
|
||||||
: QApplication::primaryScreen();
|
void OverlayWidget::updateGeometry(const QRect &rect) {
|
||||||
const auto available = screen->geometry();
|
setGeometry(rect);
|
||||||
if (!force && geometry() == available) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
setGeometry(available);
|
|
||||||
|
|
||||||
auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize;
|
auto navSkip = 2 * st::mediaviewControlMargin + st::mediaviewControlSize;
|
||||||
_closeNav = myrtlrect(width() - st::mediaviewControlMargin - st::mediaviewControlSize, st::mediaviewControlMargin, st::mediaviewControlSize, 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())
|
const auto changed = (screen >= 0 && screen < screens.size())
|
||||||
? screens[screen]
|
? screens[screen]
|
||||||
: nullptr;
|
: nullptr;
|
||||||
|
if (windowHandle()
|
||||||
|
&& windowHandle()->screen()
|
||||||
|
&& changed
|
||||||
|
&& windowHandle()->screen() == changed) {
|
||||||
|
updateGeometry(changed->geometry());
|
||||||
|
}
|
||||||
if (!windowHandle()
|
if (!windowHandle()
|
||||||
|| !windowHandle()->screen()
|
|| !windowHandle()->screen()
|
||||||
|| !changed
|
|| !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() {
|
void OverlayWidget::onToMessage() {
|
||||||
if (!_session) {
|
if (!_session) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -208,10 +208,14 @@ private:
|
||||||
void assignMediaPointer(not_null<PhotoData*> photo);
|
void assignMediaPointer(not_null<PhotoData*> photo);
|
||||||
|
|
||||||
void updateOver(QPoint mpos);
|
void updateOver(QPoint mpos);
|
||||||
void moveToScreen(bool force = false);
|
void moveToScreen();
|
||||||
bool moveToNext(int delta);
|
bool moveToNext(int delta);
|
||||||
void preloadData(int delta);
|
void preloadData(int delta);
|
||||||
|
|
||||||
|
void updateGeometry(const QRect &rect);
|
||||||
|
void handleVisibleChanged(bool visible);
|
||||||
|
void handleScreenChanged(QScreen *screen);
|
||||||
|
|
||||||
bool contentCanBeSaved() const;
|
bool contentCanBeSaved() const;
|
||||||
void checkForSaveLoaded();
|
void checkForSaveLoaded();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue