mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-04-16 06:07:06 +02:00
Pin RTMP stream on top.
This commit is contained in:
parent
282b3592c2
commit
4b93f58d2f
4 changed files with 66 additions and 4 deletions
|
@ -2364,6 +2364,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||
"lng_group_call_unpinned_camera" = "{user}'s video is unpinned.";
|
||||
"lng_group_call_unpinned_screen" = "{user}'s screencast is unpinned.";
|
||||
"lng_group_call_sure_screencast" = "{user} is screensharing. This action will make your screencast pinned for all participants.";
|
||||
"lng_group_call_pinned_on_top" = "Live stream pinned on top.";
|
||||
"lng_group_call_unpinned_on_top" = "Live stream unpinned from top.";
|
||||
"lng_group_call_recording_start_sure" = "Participants will see the chat is being recorded.";
|
||||
"lng_group_call_recording_stop_sure" = "Do you want to stop recording this chat?";
|
||||
"lng_group_call_recording_start_field" = "Recording Title";
|
||||
|
|
|
@ -1117,6 +1117,11 @@ groupCallTitle: WindowTitle(defaultWindowTitle) {
|
|||
closeIconActive: groupCallTitleCloseIcon;
|
||||
closeIconActiveOver: groupCallTitleCloseIconOver;
|
||||
}
|
||||
groupCallPinOnTop: IconButton(groupCallTitleButton) {
|
||||
icon: icon{{ "dialogs/dialogs_pinned", groupCallMemberNotJoinedStatus }};
|
||||
iconOver: icon{{ "dialogs/dialogs_pinned", groupCallMembersFg }};
|
||||
iconPosition: point(8px, 2px);
|
||||
}
|
||||
|
||||
groupCallMajorBlobIdleRadius: 2px;
|
||||
groupCallMajorBlobMaxRadius: 4px;
|
||||
|
|
|
@ -935,6 +935,9 @@ void Panel::raiseControls() {
|
|||
if (_recordingMark) {
|
||||
_recordingMark->raise();
|
||||
}
|
||||
if (_pinOnTop) {
|
||||
_pinOnTop->raise();
|
||||
}
|
||||
_layerBg->raise();
|
||||
if (_niceTooltip) {
|
||||
_niceTooltip->raise();
|
||||
|
@ -1142,7 +1145,44 @@ void Panel::subscribeToChanges(not_null<Data::GroupCall*> real) {
|
|||
updateControlsGeometry();
|
||||
}
|
||||
|
||||
void Panel::createPinOnTop() {
|
||||
_pinOnTop.create(window(), st::groupCallPinOnTop);
|
||||
const auto pinned = [=] {
|
||||
const auto handle = window()->windowHandle();
|
||||
return handle && (handle->flags() & Qt::WindowStaysOnTopHint);
|
||||
};
|
||||
const auto pin = [=](bool pin) {
|
||||
if (const auto handle = window()->windowHandle()) {
|
||||
handle->setFlag(Qt::WindowStaysOnTopHint, pin);
|
||||
_pinOnTop->setIconOverride(
|
||||
pin ? &st::groupCallPinOnTop.iconOver : nullptr,
|
||||
nullptr);
|
||||
if (!_pinOnTop->isHidden()) {
|
||||
showToast({ pin
|
||||
? tr::lng_group_call_pinned_on_top(tr::now)
|
||||
: tr::lng_group_call_unpinned_on_top(tr::now) });
|
||||
}
|
||||
}
|
||||
};
|
||||
_fullScreen.value(
|
||||
) | rpl::start_with_next([=](bool fullscreen) {
|
||||
_pinOnTop->setVisible(!fullscreen);
|
||||
if (fullscreen) {
|
||||
pin(false);
|
||||
}
|
||||
}, _pinOnTop->lifetime());
|
||||
|
||||
_pinOnTop->setClickedCallback([=] {
|
||||
pin(!pinned());
|
||||
});
|
||||
|
||||
updateControlsGeometry();
|
||||
}
|
||||
|
||||
void Panel::refreshTopButton() {
|
||||
if (_call->rtmp() && !_pinOnTop) {
|
||||
createPinOnTop();
|
||||
}
|
||||
if (_mode.current() == PanelMode::Wide) {
|
||||
_menuToggle.destroy();
|
||||
_joinAsToggle.destroy();
|
||||
|
@ -1458,10 +1498,15 @@ void Panel::initGeometry() {
|
|||
|
||||
QRect Panel::computeTitleRect() const {
|
||||
const auto skip = st::groupCallTitleTop;
|
||||
const auto remove = skip + (_menuToggle
|
||||
? (_menuToggle->width() + st::groupCallMenuTogglePosition.x())
|
||||
: 0) + (_joinAsToggle
|
||||
const auto remove = skip
|
||||
+ (_menuToggle
|
||||
? (_menuToggle->width() + st::groupCallMenuTogglePosition.x())
|
||||
: 0)
|
||||
+ (_joinAsToggle
|
||||
? (_joinAsToggle->width() + st::groupCallMenuTogglePosition.x())
|
||||
: 0)
|
||||
+ (_pinOnTop
|
||||
? (_pinOnTop->width() + skip)
|
||||
: 0);
|
||||
const auto width = widget()->width();
|
||||
#ifdef Q_OS_MAC
|
||||
|
@ -1939,20 +1984,28 @@ void Panel::updateControlsGeometry() {
|
|||
|
||||
#ifdef Q_OS_MAC
|
||||
const auto controlsOnTheLeft = true;
|
||||
const auto controlsPadding = 0;
|
||||
#else // Q_OS_MAC
|
||||
const auto center = _controls->controls.geometry().center();
|
||||
const auto controlsOnTheLeft = center.x()
|
||||
< widget()->width() / 2;
|
||||
const auto controlsPadding = _controls->wrap.y();
|
||||
#endif // Q_OS_MAC
|
||||
const auto menux = st::groupCallMenuTogglePosition.x();
|
||||
const auto menuy = st::groupCallMenuTogglePosition.y();
|
||||
if (controlsOnTheLeft) {
|
||||
if (_pinOnTop) {
|
||||
_pinOnTop->moveToRight(controlsPadding, controlsPadding);
|
||||
}
|
||||
if (_menuToggle) {
|
||||
_menuToggle->moveToRight(menux, menuy);
|
||||
} else if (_joinAsToggle) {
|
||||
_joinAsToggle->moveToRight(menux, menuy);
|
||||
}
|
||||
} else {
|
||||
if (_pinOnTop) {
|
||||
_pinOnTop->moveToLeft(controlsPadding, controlsPadding);
|
||||
}
|
||||
if (_menuToggle) {
|
||||
_menuToggle->moveToLeft(menux, menuy);
|
||||
} else if (_joinAsToggle) {
|
||||
|
|
|
@ -160,6 +160,7 @@ private:
|
|||
void refreshVideoButtons(
|
||||
std::optional<bool> overrideWideMode = std::nullopt);
|
||||
void refreshTopButton();
|
||||
void createPinOnTop();
|
||||
void toggleWideControls(bool shown);
|
||||
void updateWideControlsVisibility();
|
||||
[[nodiscard]] bool videoButtonInNarrowMode() const;
|
||||
|
@ -201,7 +202,7 @@ private:
|
|||
rpl::variable<bool> _fullScreen = false;
|
||||
|
||||
#ifndef Q_OS_MAC
|
||||
std::unique_ptr<Ui::Platform::SeparateTitleControls> _controls;
|
||||
const std::unique_ptr<Ui::Platform::SeparateTitleControls> _controls;
|
||||
#endif // !Q_OS_MAC
|
||||
|
||||
const std::unique_ptr<base::PowerSaveBlocker> _powerSaveBlocker;
|
||||
|
@ -212,6 +213,7 @@ private:
|
|||
object_ptr<Ui::FlatLabel> _subtitle = { nullptr };
|
||||
object_ptr<Ui::AbstractButton> _recordingMark = { nullptr };
|
||||
object_ptr<Ui::IconButton> _menuToggle = { nullptr };
|
||||
object_ptr<Ui::IconButton> _pinOnTop = { nullptr };
|
||||
object_ptr<Ui::DropdownMenu> _menu = { nullptr };
|
||||
rpl::variable<bool> _wideMenuShown = false;
|
||||
object_ptr<Ui::AbstractButton> _joinAsToggle = { nullptr };
|
||||
|
|
Loading…
Add table
Reference in a new issue