Added resize handler of volume menu item in group calls.

This commit is contained in:
23rd 2021-01-16 18:18:03 +03:00
parent 1cbb217210
commit 1d3e76e1fe
2 changed files with 19 additions and 13 deletions

View file

@ -36,16 +36,22 @@ MenuVolumeItem::MenuVolumeItem(
st::mediaPlayerPanelPlayback)) st::mediaPlayerPanelPlayback))
, _dummyAction(new QAction(parent)) , _dummyAction(new QAction(parent))
, _st(st) , _st(st)
, _font(st.itemStyle.font)
, _stCross(st::groupCallMuteCrossLine) , _stCross(st::groupCallMuteCrossLine)
, _crossLineMute(std::make_unique<Ui::CrossLineAnimation>(_stCross, true)) { , _crossLineMute(std::make_unique<Ui::CrossLineAnimation>(_stCross, true)) {
initResizeHook(parent->sizeValue()); initResizeHook(parent->sizeValue());
enableMouseSelecting(); enableMouseSelecting();
const auto itemRect = rect() - st.itemPadding; sizeValue(
const auto speakerRect = QRect(itemRect.topLeft(), _stCross.icon.size()); ) | rpl::start_with_next([=](const QSize &size) {
const auto volumeRect = speakerRect.translated(_stCross.icon.width(), 0); const auto geometry = QRect(QPoint(), size);
_itemRect = geometry - _st.itemPadding;
_speakerRect = QRect(_itemRect.topLeft(), _stCross.icon.size());
_volumeRect = _speakerRect.translated(_stCross.icon.width(), 0);
_slider->setGeometry(_itemRect
- style::margins(0, contentHeight() / 2, 0, 0));
}, lifetime());
paintRequest( paintRequest(
) | rpl::start_with_next([=](const QRect &clip) { ) | rpl::start_with_next([=](const QRect &clip) {
@ -59,13 +65,13 @@ MenuVolumeItem::MenuVolumeItem(
: selected : selected
? st.itemFgOver ? st.itemFgOver
: (enabled ? st.itemFg : st.itemFgDisabled)); : (enabled ? st.itemFg : st.itemFgDisabled));
p.setFont(_font); p.setFont(_st.itemStyle.font);
const auto volume = std::round(_slider->value() * kMaxVolumePercent); const auto volume = std::round(_slider->value() * kMaxVolumePercent);
p.drawText(volumeRect, u"%1%"_q.arg(volume), style::al_center); p.drawText(_volumeRect, u"%1%"_q.arg(volume), style::al_center);
_crossLineMute->paint( _crossLineMute->paint(
p, p,
speakerRect.topLeft(), _speakerRect.topLeft(),
_crossLineAnimation.value(_localMuted ? 1. : 0.)); _crossLineAnimation.value(_localMuted ? 1. : 0.));
}, lifetime()); }, lifetime());
@ -78,7 +84,7 @@ MenuVolumeItem::MenuVolumeItem(
_toggleMuteLocallyRequests.fire_copy(newMuted); _toggleMuteLocallyRequests.fire_copy(newMuted);
_crossLineAnimation.start( _crossLineAnimation.start(
[=] { update(speakerRect); }, [=] { update(_speakerRect); },
_localMuted ? 0. : 1., _localMuted ? 0. : 1.,
_localMuted ? 1. : 0., _localMuted ? 1. : 0.,
st::callPanelDuration); st::callPanelDuration);
@ -86,7 +92,7 @@ MenuVolumeItem::MenuVolumeItem(
if (value > 0) { if (value > 0) {
_changeVolumeLocallyRequests.fire(value * _maxVolume); _changeVolumeLocallyRequests.fire(value * _maxVolume);
} }
update(volumeRect); update(_volumeRect);
}); });
const auto returnVolume = [=] { const auto returnVolume = [=] {
@ -141,9 +147,6 @@ MenuVolumeItem::MenuVolumeItem(
} }
_waitingForUpdateVolume = false; _waitingForUpdateVolume = false;
}, lifetime()); }, lifetime());
_slider->setGeometry(itemRect
- style::margins(0, contentHeight() / 2, 0, 0));
} }
void MenuVolumeItem::setCloudVolume(int volume) { void MenuVolumeItem::setCloudVolume(int volume) {

View file

@ -54,10 +54,13 @@ private:
bool _cloudMuted = false; bool _cloudMuted = false;
bool _localMuted = false; bool _localMuted = false;
QRect _itemRect;
QRect _speakerRect;
QRect _volumeRect;
const base::unique_qptr<Ui::MediaSlider> _slider; const base::unique_qptr<Ui::MediaSlider> _slider;
const not_null<QAction*> _dummyAction; const not_null<QAction*> _dummyAction;
const style::Menu &_st; const style::Menu &_st;
const style::font &_font;
const style::CrossLineAnimation &_stCross; const style::CrossLineAnimation &_stCross;
const std::unique_ptr<Ui::CrossLineAnimation> _crossLineMute; const std::unique_ptr<Ui::CrossLineAnimation> _crossLineMute;