Improve full screen RTMP streams.
This commit is contained in:
parent
8678eef9e8
commit
d36315104e
|
@ -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,
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue