Fix PiP window first show.

This commit is contained in:
John Preston 2021-05-20 09:53:09 +04:00
parent a45064257a
commit ccc599c83e
4 changed files with 114 additions and 126 deletions

View file

@ -53,6 +53,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/platform/base_platform_info.h" #include "base/platform/base_platform_info.h"
#include "base/openssl_help.h" #include "base/openssl_help.h"
#include "base/unixtime.h" #include "base/unixtime.h"
#include "base/qt_signal_producer.h"
#include "main/main_account.h" #include "main/main_account.h"
#include "main/main_domain.h" // Domain::activeSessionValue. #include "main/main_domain.h" // Domain::activeSessionValue.
#include "main/main_session.h" #include "main/main_session.h"
@ -352,8 +353,6 @@ OverlayWidget::OverlayWidget()
_saveMsgText.setMarkedText(st::mediaviewSaveMsgStyle, text, Ui::DialogTextOptions()); _saveMsgText.setMarkedText(st::mediaviewSaveMsgStyle, text, Ui::DialogTextOptions());
_saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::mediaviewSaveMsgPadding.left() + st::mediaviewSaveMsgPadding.right(), st::mediaviewSaveMsgStyle.font->height + st::mediaviewSaveMsgPadding.top() + st::mediaviewSaveMsgPadding.bottom()); _saveMsg = QRect(0, 0, _saveMsgText.maxWidth() + st::mediaviewSaveMsgPadding.left() + st::mediaviewSaveMsgPadding.right(), st::mediaviewSaveMsgStyle.font->height + st::mediaviewSaveMsgPadding.top() + st::mediaviewSaveMsgPadding.bottom());
connect(QApplication::desktop(), SIGNAL(resized(int)), this, SLOT(onScreenResized(int)));
if (Platform::IsLinux()) { if (Platform::IsLinux()) {
setWindowFlags(Qt::FramelessWindowHint setWindowFlags(Qt::FramelessWindowHint
| Qt::MaximizeUsingFullscreenGeometryHint); | Qt::MaximizeUsingFullscreenGeometryHint);
@ -392,6 +391,7 @@ OverlayWidget::OverlayWidget()
&QWindow::screenChanged, &QWindow::screenChanged,
this, this,
[=](QScreen *screen) { handleScreenChanged(screen); }); [=](QScreen *screen) { handleScreenChanged(screen); });
subscribeToScreenGeometry();
#if defined Q_OS_MAC && !defined OS_OSX #if defined Q_OS_MAC && !defined OS_OSX
TouchBar::SetupMediaViewTouchBar( TouchBar::SetupMediaViewTouchBar(
@ -420,16 +420,16 @@ OverlayWidget::OverlayWidget()
_saveMsgUpdater.setCallback([=] { updateImage(); }); _saveMsgUpdater.setCallback([=] { updateImage(); });
setAttribute(Qt::WA_AcceptTouchEvents); setAttribute(Qt::WA_AcceptTouchEvents);
_touchTimer.setCallback([=] { onTouchTimer(); }); _touchTimer.setCallback([=] { handleTouchTimer(); });
_controlsHideTimer.setCallback([=] { onHideControls(); }); _controlsHideTimer.setCallback([=] { hideControls(); });
_docDownload->addClickHandler([=] { onDownload(); }); _docDownload->addClickHandler([=] { downloadMedia(); });
_docSaveAs->addClickHandler([=] { onSaveAs(); }); _docSaveAs->addClickHandler([=] { saveAs(); });
_docCancel->addClickHandler([=] { onSaveCancel(); }); _docCancel->addClickHandler([=] { saveCancel(); });
_dropdown->setHiddenCallback([this] { dropdownHidden(); }); _dropdown->setHiddenCallback([this] { dropdownHidden(); });
_dropdownShowTimer.setCallback([=] { onDropdown(); }); _dropdownShowTimer.setCallback([=] { showDropdown(); });
} }
void OverlayWidget::refreshLang() { void OverlayWidget::refreshLang() {
@ -698,10 +698,10 @@ void OverlayWidget::checkForSaveLoaded() {
return; return;
} else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::QuickSave) { } else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::QuickSave) {
_savePhotoVideoWhenLoaded = SavePhotoVideo::None; _savePhotoVideoWhenLoaded = SavePhotoVideo::None;
onDownload(); downloadMedia();
} else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::SaveAs) { } else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::SaveAs) {
_savePhotoVideoWhenLoaded = SavePhotoVideo::None; _savePhotoVideoWhenLoaded = SavePhotoVideo::None;
onSaveAs(); saveAs();
} else { } else {
Unexpected("SavePhotoVideo in OverlayWidget::checkForSaveLoaded."); Unexpected("SavePhotoVideo in OverlayWidget::checkForSaveLoaded.");
} }
@ -838,35 +838,28 @@ void OverlayWidget::refreshCaptionGeometry() {
void OverlayWidget::fillContextMenuActions(const MenuCallback &addAction) { void OverlayWidget::fillContextMenuActions(const MenuCallback &addAction) {
if (_document && _document->loading()) { if (_document && _document->loading()) {
addAction(tr::lng_cancel(tr::now), [=] { onSaveCancel(); }); addAction(tr::lng_cancel(tr::now), [=] { saveCancel(); });
} }
if (IsServerMsgId(_msgid.msg)) { if (IsServerMsgId(_msgid.msg)) {
addAction(tr::lng_context_to_msg(tr::now), [=] { onToMessage(); }); addAction(tr::lng_context_to_msg(tr::now), [=] { toMessage(); });
} }
if (_document && !_document->filepath(true).isEmpty()) { if (_document && !_document->filepath(true).isEmpty()) {
const auto text = Platform::IsMac() const auto text = Platform::IsMac()
? tr::lng_context_show_in_finder(tr::now) ? tr::lng_context_show_in_finder(tr::now)
: tr::lng_context_show_in_folder(tr::now); : tr::lng_context_show_in_folder(tr::now);
addAction(text, [=] { onShowInFolder(); }); addAction(text, [=] { showInFolder(); });
} }
if ((_document && documentContentShown()) || (_photo && _photoMedia->loaded())) { if ((_document && documentContentShown()) || (_photo && _photoMedia->loaded())) {
addAction(tr::lng_mediaview_copy(tr::now), [=] { onCopy(); }); addAction(tr::lng_mediaview_copy(tr::now), [=] { copyMedia(); });
} }
if ((_photo && _photo->hasAttachedStickers()) if ((_photo && _photo->hasAttachedStickers())
|| (_document && _document->hasAttachedStickers())) { || (_document && _document->hasAttachedStickers())) {
auto callback = [=] {
if (_photo) {
onPhotoAttachedStickers();
} else if (_document) {
onDocumentAttachedStickers();
}
};
addAction( addAction(
tr::lng_context_attached_stickers(tr::now), tr::lng_context_attached_stickers(tr::now),
std::move(callback)); [=] { showAttachedStickers(); });
} }
if (_canForwardItem) { if (_canForwardItem) {
addAction(tr::lng_mediaview_forward(tr::now), [=] { onForward(); }); addAction(tr::lng_mediaview_forward(tr::now), [=] { forwardMedia(); });
} }
const auto canDelete = [&] { const auto canDelete = [&] {
if (_canDeleteItem) { if (_canDeleteItem) {
@ -886,15 +879,15 @@ void OverlayWidget::fillContextMenuActions(const MenuCallback &addAction) {
return false; return false;
}(); }();
if (canDelete) { if (canDelete) {
addAction(tr::lng_mediaview_delete(tr::now), [=] { onDelete(); }); addAction(tr::lng_mediaview_delete(tr::now), [=] { deleteMedia(); });
} }
addAction(tr::lng_mediaview_save_as(tr::now), [=] { onSaveAs(); }); addAction(tr::lng_mediaview_save_as(tr::now), [=] { saveAs(); });
if (const auto overviewType = computeOverviewType()) { if (const auto overviewType = computeOverviewType()) {
const auto text = _document const auto text = _document
? tr::lng_mediaview_files_all(tr::now) ? tr::lng_mediaview_files_all(tr::now)
: tr::lng_mediaview_photos_all(tr::now); : tr::lng_mediaview_photos_all(tr::now);
addAction(text, [=] { onOverview(); }); addAction(text, [=] { showMediaOverview(); });
} }
} }
@ -1300,7 +1293,7 @@ void OverlayWidget::activateControls() {
} }
} }
void OverlayWidget::onHideControls(bool force) { void OverlayWidget::hideControls(bool force) {
if (!force) { if (!force) {
if (!_dropdown->isHidden() if (!_dropdown->isHidden()
|| (_streamed && _streamed->controls.hasMenu()) || (_streamed && _streamed->controls.hasMenu())
@ -1333,24 +1326,7 @@ void OverlayWidget::dropdownHidden() {
updateOver(_lastMouseMovePos); updateOver(_lastMouseMovePos);
_ignoringDropdown = false; _ignoringDropdown = false;
if (!_controlsHideTimer.isActive()) { if (!_controlsHideTimer.isActive()) {
onHideControls(true); hideControls(true);
}
}
void OverlayWidget::onScreenResized(int screen) {
if (isHidden()) {
return;
}
const auto screens = QApplication::screens();
const auto changed = (screen >= 0 && screen < screens.size())
? screens[screen]
: nullptr;
if (windowHandle()
&& windowHandle()->screen()
&& changed
&& windowHandle()->screen() == changed) {
updateGeometry();
} }
} }
@ -1365,6 +1341,7 @@ void OverlayWidget::handleVisibleChanged(bool visible) {
} }
void OverlayWidget::handleScreenChanged(QScreen *screen) { void OverlayWidget::handleScreenChanged(QScreen *screen) {
subscribeToScreenGeometry();
if (!isVisible()) { if (!isVisible()) {
return; return;
} }
@ -1376,7 +1353,21 @@ void OverlayWidget::handleScreenChanged(QScreen *screen) {
moveToScreen(); moveToScreen();
} }
void OverlayWidget::onToMessage() { void OverlayWidget::subscribeToScreenGeometry() {
_screenGeometryLifetime.destroy();
const auto screen = windowHandle()->screen();
if (!screen) {
return;
}
base::qt_signal_producer(
screen,
&QScreen::geometryChanged
) | rpl::start_with_next([=] {
updateGeometry();
}, _screenGeometryLifetime);
}
void OverlayWidget::toMessage() {
if (!_session) { if (!_session) {
return; return;
} }
@ -1397,7 +1388,7 @@ void OverlayWidget::notifyFileDialogShown(bool shown) {
} }
} }
void OverlayWidget::onSaveAs() { void OverlayWidget::saveAs() {
QString file; QString file;
if (_document) { if (_document) {
const auto &location = _document->location(true); const auto &location = _document->location(true);
@ -1502,9 +1493,9 @@ void OverlayWidget::onSaveAs() {
setFocus(); setFocus();
} }
void OverlayWidget::onDocClick() { void OverlayWidget::handleDocumentClick() {
if (_document->loading()) { if (_document->loading()) {
onSaveCancel(); saveCancel();
} else { } else {
DocumentOpenClickHandler::Open( DocumentOpenClickHandler::Open(
fileOrigin(), fileOrigin(),
@ -1520,12 +1511,12 @@ PeerData *OverlayWidget::ui_getPeerForMouseAction() {
return _history ? _history->peer.get() : nullptr; return _history ? _history->peer.get() : nullptr;
} }
void OverlayWidget::onDownload() { void OverlayWidget::downloadMedia() {
if (!_photo && !_document) { if (!_photo && !_document) {
return; return;
} }
if (Core::App().settings().askDownloadPath()) { if (Core::App().settings().askDownloadPath()) {
return onSaveAs(); return saveAs();
} }
QString path; QString path;
@ -1607,7 +1598,7 @@ void OverlayWidget::onDownload() {
} }
} }
void OverlayWidget::onSaveCancel() { void OverlayWidget::saveCancel() {
if (_document && _document->loading()) { if (_document && _document->loading()) {
_document->cancel(); _document->cancel();
if (_documentMedia->canBePlayed()) { if (_documentMedia->canBePlayed()) {
@ -1616,7 +1607,7 @@ void OverlayWidget::onSaveCancel() {
} }
} }
void OverlayWidget::onShowInFolder() { void OverlayWidget::showInFolder() {
if (!_document) return; if (!_document) return;
auto filepath = _document->filepath(true); auto filepath = _document->filepath(true);
@ -1626,7 +1617,7 @@ void OverlayWidget::onShowInFolder() {
} }
} }
void OverlayWidget::onForward() { void OverlayWidget::forwardMedia() {
if (!_session) { if (!_session) {
return; return;
} }
@ -1645,7 +1636,7 @@ void OverlayWidget::onForward() {
{ 1, item->fullId() }); { 1, item->fullId() });
} }
void OverlayWidget::onDelete() { void OverlayWidget::deleteMedia() {
if (!_session) { if (!_session) {
return; return;
} }
@ -1678,7 +1669,7 @@ void OverlayWidget::onDelete() {
} }
} }
void OverlayWidget::onOverview() { void OverlayWidget::showMediaOverview() {
if (_menu) { if (_menu) {
_menu->hideMenu(true); _menu->hideMenu(true);
} }
@ -1689,7 +1680,7 @@ void OverlayWidget::onOverview() {
} }
} }
void OverlayWidget::onCopy() { void OverlayWidget::copyMedia() {
_dropdown->hideAnimated(Ui::DropdownMenu::HideOption::IgnoreShow); _dropdown->hideAnimated(Ui::DropdownMenu::HideOption::IgnoreShow);
if (_document) { if (_document) {
QGuiApplication::clipboard()->setImage(videoShown() QGuiApplication::clipboard()->setImage(videoShown()
@ -1702,31 +1693,23 @@ void OverlayWidget::onCopy() {
} }
} }
void OverlayWidget::onPhotoAttachedStickers() { void OverlayWidget::showAttachedStickers() {
if (!_session || !_photo) { if (!_session) {
return; return;
} }
const auto &active = _session->windows(); const auto &active = _session->windows();
if (active.empty()) { if (active.empty()) {
return; return;
} }
_session->api().attachedStickers().requestAttachedStickerSets( const auto window = active.front();
active.front(), auto &attachedStickers = _session->api().attachedStickers();
_photo); if (_photo) {
close(); attachedStickers.requestAttachedStickerSets(window, _photo);
} } else if (_document) {
attachedStickers.requestAttachedStickerSets(window, _document);
void OverlayWidget::onDocumentAttachedStickers() { } else {
if (!_session || !_document) {
return; return;
} }
const auto &active = _session->windows();
if (active.empty()) {
return;
}
_session->api().attachedStickers().requestAttachedStickerSets(
active.front(),
_document);
close(); close();
} }
@ -2455,8 +2438,12 @@ void OverlayWidget::updateThemePreviewGeometry() {
void OverlayWidget::displayFinished() { void OverlayWidget::displayFinished() {
updateControls(); updateControls();
if (isHidden()) { if (isHidden()) {
Ui::Platform::UpdateOverlayed(this);
moveToScreen(); moveToScreen();
//setAttribute(Qt::WA_DontShowOnScreen);
//OverlayParent::setVisibleHook(true);
//OverlayParent::setVisibleHook(false);
//setAttribute(Qt::WA_DontShowOnScreen, false);
Ui::Platform::UpdateOverlayed(this);
if (Platform::IsLinux()) { if (Platform::IsLinux()) {
showFullScreen(); showFullScreen();
} else { } else {
@ -3616,19 +3603,19 @@ void OverlayWidget::keyPressEvent(QKeyEvent *e) {
} }
if (!_menu && e->key() == Qt::Key_Escape) { if (!_menu && e->key() == Qt::Key_Escape) {
if (_document && _document->loading() && !_streamed) { if (_document && _document->loading() && !_streamed) {
onDocClick(); handleDocumentClick();
} else { } else {
close(); close();
} }
} else if (e == QKeySequence::Save || e == QKeySequence::SaveAs) { } else if (e == QKeySequence::Save || e == QKeySequence::SaveAs) {
onSaveAs(); saveAs();
} else if (e->key() == Qt::Key_Copy || (e->key() == Qt::Key_C && ctrl)) { } else if (e->key() == Qt::Key_Copy || (e->key() == Qt::Key_C && ctrl)) {
onCopy(); copyMedia();
} else if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return || e->key() == Qt::Key_Space) { } else if (e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return || e->key() == Qt::Key_Space) {
if (_streamed) { if (_streamed) {
playbackPauseResume(); playbackPauseResume();
} else if (_document && !_document->loading() && (documentBubbleShown() || !_documentMedia->loaded())) { } else if (_document && !_document->loading() && (documentBubbleShown() || !_documentMedia->loaded())) {
onDocClick(); handleDocumentClick();
} }
} else if (e->key() == Qt::Key_Left) { } else if (e->key() == Qt::Key_Left) {
if (_controlsHideTimer.isActive()) { if (_controlsHideTimer.isActive()) {
@ -4173,17 +4160,17 @@ void OverlayWidget::mouseReleaseEvent(QMouseEvent *e) {
Ui::showPeerProfile(_from); Ui::showPeerProfile(_from);
} }
} else if (_over == OverDate && _down == OverDate) { } else if (_over == OverDate && _down == OverDate) {
onToMessage(); toMessage();
} else if (_over == OverHeader && _down == OverHeader) { } else if (_over == OverHeader && _down == OverHeader) {
onOverview(); showMediaOverview();
} else if (_over == OverSave && _down == OverSave) { } else if (_over == OverSave && _down == OverSave) {
onDownload(); downloadMedia();
} else if (_over == OverRotate && _down == OverRotate) { } else if (_over == OverRotate && _down == OverRotate) {
playbackControlsRotate(); playbackControlsRotate();
} else if (_over == OverIcon && _down == OverIcon) { } else if (_over == OverIcon && _down == OverIcon) {
onDocClick(); handleDocumentClick();
} else if (_over == OverMore && _down == OverMore) { } else if (_over == OverMore && _down == OverMore) {
InvokeQueued(this, [=] { onDropdown(); }); InvokeQueued(this, [=] { showDropdown(); });
} else if (_over == OverClose && _down == OverClose) { } else if (_over == OverClose && _down == OverClose) {
close(); close();
} else if (_over == OverVideo && _down == OverVideo) { } else if (_over == OverVideo && _down == OverVideo) {
@ -4432,7 +4419,7 @@ void OverlayWidget::receiveMouse() {
_receiveMouse = true; _receiveMouse = true;
} }
void OverlayWidget::onDropdown() { void OverlayWidget::showDropdown() {
_dropdown->clearActions(); _dropdown->clearActions();
fillContextMenuActions([&] (const QString &text, Fn<void()> handler) { fillContextMenuActions([&] (const QString &text, Fn<void()> handler) {
_dropdown->addAction(text, std::move(handler)); _dropdown->addAction(text, std::move(handler));
@ -4442,7 +4429,7 @@ void OverlayWidget::onDropdown() {
_dropdown->setFocus(); _dropdown->setFocus();
} }
void OverlayWidget::onTouchTimer() { void OverlayWidget::handleTouchTimer() {
_touchRightButton = true; _touchRightButton = true;
} }

View file

@ -72,10 +72,9 @@ class OverlayWidget final
: public OverlayParent : public OverlayParent
, public ClickHandlerHost , public ClickHandlerHost
, private PlaybackControls::Delegate { , private PlaybackControls::Delegate {
Q_OBJECT
public: public:
OverlayWidget(); OverlayWidget();
~OverlayWidget();
enum class TouchBarItemType { enum class TouchBarItemType {
Photo, Photo,
@ -99,10 +98,8 @@ public:
updateOver(mapFromGlobal(QCursor::pos())); updateOver(mapFromGlobal(QCursor::pos()));
} }
void close();
void activateControls(); void activateControls();
void onDocClick(); void close();
PeerData *ui_getPeerForMouseAction(); PeerData *ui_getPeerForMouseAction();
@ -110,36 +107,10 @@ public:
void clearSession(); void clearSession();
~OverlayWidget();
// ClickHandlerHost interface // ClickHandlerHost interface
void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override; void clickHandlerActiveChanged(const ClickHandlerPtr &p, bool active) override;
void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool pressed) override; void clickHandlerPressedChanged(const ClickHandlerPtr &p, bool pressed) override;
private Q_SLOTS:
void onHideControls(bool force = false);
void onScreenResized(int screen);
void onToMessage();
void onSaveAs();
void onDownload();
void onSaveCancel();
void onShowInFolder();
void onForward();
void onDelete();
void onOverview();
void onCopy();
void receiveMouse();
void onPhotoAttachedStickers();
void onDocumentAttachedStickers();
void onDropdown();
void onTouchTimer();
void updateImage();
private: private:
struct Streamed; struct Streamed;
struct PipWrap; struct PipWrap;
@ -212,6 +183,25 @@ private:
void playbackPauseMusic(); void playbackPauseMusic();
void switchToPip(); void switchToPip();
void hideControls(bool force = false);
void subscribeToScreenGeometry();
void toMessage();
void saveAs();
void downloadMedia();
void saveCancel();
void showInFolder();
void forwardMedia();
void deleteMedia();
void showMediaOverview();
void copyMedia();
void receiveMouse();
void showAttachedStickers();
void showDropdown();
void handleTouchTimer();
void handleDocumentClick();
void updateImage();
void clearBeforeHide(); void clearBeforeHide();
void clearAfterHide(); void clearAfterHide();
@ -445,6 +435,7 @@ private:
int32 _dragging = 0; int32 _dragging = 0;
QPixmap _staticContent; QPixmap _staticContent;
bool _blurred = true; bool _blurred = true;
rpl::lifetime _screenGeometryLifetime;
std::unique_ptr<Streamed> _streamed; std::unique_ptr<Streamed> _streamed;
std::unique_ptr<PipWrap> _pip; std::unique_ptr<PipWrap> _pip;

View file

@ -375,7 +375,7 @@ PipPanel::PipPanel(
QWidget *parent, QWidget *parent,
Fn<void(QPainter&, FrameRequest, bool)> paint) Fn<void(QPainter&, FrameRequest, bool)> paint)
: _content(Ui::GL::CreateSurface( : _content(Ui::GL::CreateSurface(
parent, nullptr, // No parent for the window in Qt parent-child sense.
[=](Ui::GL::Capabilities capabilities) { [=](Ui::GL::Capabilities capabilities) {
return chooseRenderer(capabilities); return chooseRenderer(capabilities);
})) }))
@ -629,15 +629,22 @@ void PipPanel::setPositionOnScreen(Position position, QRect available) {
geometry += _padding; geometry += _padding;
widget()->setGeometry(geometry); setGeometry(geometry);
widget()->setMinimumSize(minimalSize); widget()->setMinimumSize(minimalSize);
widget()->setMaximumSize( widget()->setMaximumSize(
std::max(minimalSize.width(), maximalSize.width()), std::max(minimalSize.width(), maximalSize.width()),
std::max(minimalSize.height(), maximalSize.height())); std::max(minimalSize.height(), maximalSize.height()));
updateDecorations(); updateDecorations();
}
void PipPanel::update() {
widget()->update(); widget()->update();
} }
void PipPanel::setGeometry(QRect geometry) {
widget()->setGeometry(geometry);
}
void PipPanel::paint(QPainter &p, const QRegion &clip, bool opengl) { void PipPanel::paint(QPainter &p, const QRegion &clip, bool opengl) {
if (_useTransparency && opengl) { if (_useTransparency && opengl) {
p.setCompositionMode(QPainter::CompositionMode_Source); p.setCompositionMode(QPainter::CompositionMode_Source);
@ -826,7 +833,7 @@ void PipPanel::processDrag(QPoint point) {
} else { } else {
const auto newGeometry = valid.marginsAdded(_padding); const auto newGeometry = valid.marginsAdded(_padding);
_positionAnimation.stop(); _positionAnimation.stop();
widget()->setGeometry(newGeometry); setGeometry(newGeometry);
} }
} }
@ -917,8 +924,8 @@ void PipPanel::updateDecorations() {
_padding = padding; _padding = padding;
_useTransparency = use; _useTransparency = use;
widget()->setAttribute(Qt::WA_OpaquePaintEvent, !_useTransparency); widget()->setAttribute(Qt::WA_OpaquePaintEvent, !_useTransparency);
widget()->setGeometry(newGeometry); setGeometry(newGeometry);
widget()->update(); update();
} }
Pip::Pip( Pip::Pip(
@ -1029,7 +1036,7 @@ void Pip::setOverState(OverState state) {
const auto nowShown = (_over != OverState::None); const auto nowShown = (_over != OverState::None);
if ((was != OverState::None) != nowShown) { if ((was != OverState::None) != nowShown) {
_controlsShown.start( _controlsShown.start(
[=] { _panel.widget()->update(); }, [=] { _panel.update(); },
nowShown ? 0. : 1., nowShown ? 0. : 1.,
nowShown ? 1. : 0., nowShown ? 1. : 0.,
st::fadeWrapDuration, st::fadeWrapDuration,
@ -1038,7 +1045,7 @@ void Pip::setOverState(OverState state) {
if (!_pressed) { if (!_pressed) {
updateActiveState(was); updateActiveState(was);
} }
_panel.widget()->update(); _panel.update();
} }
void Pip::setPressedState(std::optional<OverState> state) { void Pip::setPressedState(std::optional<OverState> state) {
@ -1232,7 +1239,7 @@ void Pip::updatePlayPauseResumeState(const Player::TrackState &state) {
auto showPause = Player::ShowPauseIcon(state.state); auto showPause = Player::ShowPauseIcon(state.state);
if (showPause != _showPause) { if (showPause != _showPause) {
_showPause = showPause; _showPause = showPause;
_panel.widget()->update(); _panel.update();
} }
} }
@ -1397,7 +1404,7 @@ void Pip::handleStreamingUpdate(Streaming::Update &&update) {
}, [&](const PreloadedVideo &update) { }, [&](const PreloadedVideo &update) {
updatePlaybackState(); updatePlaybackState();
}, [&](const UpdateVideo &update) { }, [&](const UpdateVideo &update) {
_panel.widget()->update(); _panel.update();
Core::App().updateNonIdle(); Core::App().updateNonIdle();
updatePlaybackState(); updatePlaybackState();
}, [&](const PreloadedAudio &update) { }, [&](const PreloadedAudio &update) {

View file

@ -60,6 +60,9 @@ public:
[[nodiscard]] not_null<QWidget*> widget() const; [[nodiscard]] not_null<QWidget*> widget() const;
[[nodiscard]] not_null<Ui::RpWidgetWrap*> rp() const; [[nodiscard]] not_null<Ui::RpWidgetWrap*> rp() const;
void update();
void setGeometry(QRect geometry);
void setAspectRatio(QSize ratio); void setAspectRatio(QSize ratio);
[[nodiscard]] Position countPosition() const; [[nodiscard]] Position countPosition() const;
void setPosition(Position position); void setPosition(Position position);