Improve full screen RTMP streams.

This commit is contained in:
John Preston 2022-03-04 16:31:04 +04:00
parent 8678eef9e8
commit d36315104e
4 changed files with 16 additions and 8 deletions

View File

@ -92,7 +92,7 @@ Panel::Panel(not_null<GroupCall*> call)
#ifndef Q_OS_MAC #ifndef Q_OS_MAC
, _controls(Ui::Platform::SetupSeparateTitleControls( , _controls(Ui::Platform::SetupSeparateTitleControls(
window(), window(),
st::groupCallTitle)) st::callTitle))
#endif // !Q_OS_MAC #endif // !Q_OS_MAC
, _powerSaveBlocker(std::make_unique<base::PowerSaveBlocker>( , _powerSaveBlocker(std::make_unique<base::PowerSaveBlocker>(
base::PowerSaveBlockType::PreventDisplaySleep, base::PowerSaveBlockType::PreventDisplaySleep,
@ -1163,6 +1163,7 @@ void Panel::createPinOnTop() {
_hideControlsTimerLifetime.destroy(); _hideControlsTimerLifetime.destroy();
_hideControlsTimer.cancel(); _hideControlsTimer.cancel();
} }
updateMembersGeometry();
}, _pinOnTop->lifetime()); }, _pinOnTop->lifetime());
_pinOnTop->setClickedCallback([=] { _pinOnTop->setClickedCallback([=] {
@ -2220,9 +2221,10 @@ void Panel::updateMembersGeometry() {
_members->setVisible(!_call->rtmp()); _members->setVisible(!_call->rtmp());
const auto desiredHeight = _members->desiredHeight(); const auto desiredHeight = _members->desiredHeight();
if (mode() == PanelMode::Wide) { if (mode() == PanelMode::Wide) {
const auto skip = st::groupCallNarrowSkip; const auto full = _fullScreenOrMaximized.current();
const auto skip = full ? 0 : st::groupCallNarrowSkip;
const auto membersWidth = st::groupCallNarrowMembersWidth; const auto membersWidth = st::groupCallNarrowMembersWidth;
const auto top = st::groupCallWideVideoTop; const auto top = full ? 0 : st::groupCallWideVideoTop;
_members->setGeometry( _members->setGeometry(
widget()->width() - skip - membersWidth, widget()->width() - skip - membersWidth,
top, top,
@ -2231,7 +2233,7 @@ void Panel::updateMembersGeometry() {
const auto viewportSkip = _call->rtmp() const auto viewportSkip = _call->rtmp()
? 0 ? 0
: (skip + membersWidth); : (skip + membersWidth);
_viewport->setGeometry({ _viewport->setGeometry(full, {
skip, skip,
top, top,
widget()->width() - viewportSkip - 2 * skip, widget()->width() - viewportSkip - 2 * skip,

View File

@ -104,13 +104,17 @@ void Viewport::setup() {
}, lifetime()); }, lifetime());
} }
void Viewport::setGeometry(QRect geometry) { void Viewport::setGeometry(bool fullscreen, QRect geometry) {
Expects(wide()); Expects(wide());
const auto changed = (_fullscreen != fullscreen);
if (changed) {
_fullscreen = fullscreen;
}
if (widget()->geometry() != geometry) { if (widget()->geometry() != geometry) {
_geometryStaleAfterModeChange = false; _geometryStaleAfterModeChange = false;
widget()->setGeometry(geometry); widget()->setGeometry(geometry);
} else if (_geometryStaleAfterModeChange) { } else if (_geometryStaleAfterModeChange || changed) {
_geometryStaleAfterModeChange = false; _geometryStaleAfterModeChange = false;
updateTilesGeometry(); updateTilesGeometry();
} }

View File

@ -71,7 +71,7 @@ public:
void setMode(PanelMode mode, not_null<QWidget*> parent); void setMode(PanelMode mode, not_null<QWidget*> parent);
void setControlsShown(float64 shown); void setControlsShown(float64 shown);
void setGeometry(QRect geometry); void setGeometry(bool fullscreen, QRect geometry);
void resizeToWidth(int newWidth); void resizeToWidth(int newWidth);
void setScrollTop(int scrollTop); void setScrollTop(int scrollTop);
@ -175,6 +175,7 @@ private:
std::vector<not_null<VideoTile*>> _tilesForOrder; std::vector<not_null<VideoTile*>> _tilesForOrder;
rpl::variable<int> _fullHeight = 0; rpl::variable<int> _fullHeight = 0;
bool _hasTwoOrMore = false; bool _hasTwoOrMore = false;
bool _fullscreen = false;
int _scrollTop = 0; int _scrollTop = 0;
QImage _shadow; QImage _shadow;
rpl::event_stream<VideoEndpoint> _clicks; rpl::event_stream<VideoEndpoint> _clicks;

View File

@ -498,6 +498,7 @@ void Viewport::RendererGL::paintTile(
const auto height = geometry.height(); const auto height = geometry.height();
const auto &st = st::groupCallVideoTile; const auto &st = st::groupCallVideoTile;
const auto shown = _owner->_controlsShownRatio; const auto shown = _owner->_controlsShownRatio;
const auto fullscreen = _owner->_fullscreen;
const auto fullNameShift = st.namePosition.y() + st::normalFont->height; const auto fullNameShift = st.namePosition.y() + st::normalFont->height;
const auto nameShift = anim::interpolate(fullNameShift, 0, shown); const auto nameShift = anim::interpolate(fullNameShift, 0, shown);
const auto row = tile->row(); const auto row = tile->row();
@ -781,7 +782,7 @@ void Viewport::RendererGL::paintTile(
program->setUniformValue("viewport", uniformViewport); program->setUniformValue("viewport", uniformViewport);
program->setUniformValue("frameBg", st::groupCallBg->c); program->setUniformValue("frameBg", st::groupCallBg->c);
program->setUniformValue("radiusOutline", QVector2D( program->setUniformValue("radiusOutline", QVector2D(
GLfloat(st::roundRadiusLarge * _factor), GLfloat(st::roundRadiusLarge * _factor * (fullscreen ? 0. : 1.)),
(outline > 0) ? (st::groupCallOutline * _factor) : 0.f)); (outline > 0) ? (st::groupCallOutline * _factor) : 0.f));
program->setUniformValue("roundRect", Uniform(rect)); program->setUniformValue("roundRect", Uniform(rect));
program->setUniformValue("roundBg", st::groupCallBg->c); program->setUniformValue("roundBg", st::groupCallBg->c);