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

View File

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

View File

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

View File

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