Replaced main blob in mute button with circle.

This commit is contained in:
23rd 2020-12-16 11:48:42 +03:00
parent dd4ddd69fd
commit 9eef2289a7
2 changed files with 18 additions and 19 deletions

View file

@ -51,16 +51,6 @@ constexpr auto kShiftDuration = crl::time(300);
auto MuteBlobs() { auto MuteBlobs() {
return std::vector<Paint::Blobs::BlobData>{ return std::vector<Paint::Blobs::BlobData>{
{
.segmentsCount = 6,
.minScale = 1.,
.minRadius = st::callMuteMainBlobMinRadius
* kMainRadiusFactor,
.maxRadius = st::callMuteMainBlobMaxRadius
* kMainRadiusFactor,
.speedScale = .4,
.alpha = 1.,
},
{ {
.segmentsCount = 9, .segmentsCount = 9,
.minScale = kScaleSmallMin / kScaleSmallMax, .minScale = kScaleSmallMin / kScaleSmallMax,
@ -141,10 +131,11 @@ private:
Paint::Blobs _blobs; Paint::Blobs _blobs;
const float _circleRaidus;
QBrush _blobBrush; QBrush _blobBrush;
QBrush _glowBrush; QBrush _glowBrush;
int _center = 0; int _center = 0;
QRectF _inner; QRectF _circleRect;
crl::time _blobsLastTime = 0; crl::time _blobsLastTime = 0;
crl::time _blobsHideLastTime = 0; crl::time _blobsHideLastTime = 0;
@ -158,6 +149,7 @@ BlobsWidget::BlobsWidget(
rpl::producer<bool> &&hideBlobs) rpl::producer<bool> &&hideBlobs)
: RpWidget(parent) : RpWidget(parent)
, _blobs(MuteBlobs(), kLevelDuration, kMaxLevel) , _blobs(MuteBlobs(), kLevelDuration, kMaxLevel)
, _circleRaidus(st::callMuteMainBlobMinRadius * kMainRadiusFactor)
, _blobBrush(Qt::transparent) , _blobBrush(Qt::transparent)
, _glowBrush(Qt::transparent) , _glowBrush(Qt::transparent)
, _blobsLastTime(crl::now()) { , _blobsLastTime(crl::now()) {
@ -201,9 +193,11 @@ void BlobsWidget::init() {
) | rpl::start_with_next([=](QSize size) { ) | rpl::start_with_next([=](QSize size) {
_center = size.width() / 2; _center = size.width() / 2;
const auto w = (size.width() - _blobs.maxRadius() * 2) / 2.; {
const auto margins = QMarginsF(w, w, w, w); const auto &r = _circleRaidus;
_inner = QRectF(QPoint(), size).marginsRemoved(margins); const auto left = (size.width() - r * 2.) / 2.;
_circleRect = QRectF(left, left, r * 2, r * 2);
}
}, lifetime()); }, lifetime());
paintRequest( paintRequest(
@ -223,6 +217,11 @@ void BlobsWidget::init() {
// Blobs. // Blobs.
p.translate(_center, _center); p.translate(_center, _center);
_blobs.paint(p, _blobBrush); _blobs.paint(p, _blobBrush);
// Main circle.
p.setPen(Qt::NoPen);
p.setBrush(_blobBrush);
p.drawEllipse(QPointF(), _circleRaidus, _circleRaidus);
}, lifetime()); }, lifetime());
_animation.init([=](crl::time now) { _animation.init([=](crl::time now) {
@ -248,7 +247,7 @@ void BlobsWidget::init() {
} }
QRectF BlobsWidget::innerRect() const { QRectF BlobsWidget::innerRect() const {
return _inner; return _circleRect;
} }
void BlobsWidget::setBlobBrush(QBrush brush) { void BlobsWidget::setBlobBrush(QBrush brush) {
@ -406,7 +405,7 @@ void CallMuteButton::init() {
: anim::interpolateF(crossFrom, crossTo, value); : anim::interpolateF(crossFrom, crossTo, value);
if (crossProgress != _crossLineProgress) { if (crossProgress != _crossLineProgress) {
_crossLineProgress = crossProgress; _crossLineProgress = crossProgress;
_content->update(_muteIconPosition); _content->update(_muteIconRect);
} }
const auto radialShowProgress = (radialShowFrom == radialShowTo) const auto radialShowProgress = (radialShowFrom == radialShowTo)
@ -434,7 +433,7 @@ void CallMuteButton::init() {
const auto &icon = _st.button.icon; const auto &icon = _st.button.icon;
const auto &pos = _st.button.iconPosition; const auto &pos = _st.button.iconPosition;
_muteIconPosition = QRect( _muteIconRect = QRect(
(pos.x() < 0) ? ((size.width() - icon.width()) / 2) : pos.x(), (pos.x() < 0) ? ((size.width() - icon.width()) / 2) : pos.x(),
(pos.y() < 0) ? ((size.height() - icon.height()) / 2) : pos.y(), (pos.y() < 0) ? ((size.height() - icon.height()) / 2) : pos.y(),
icon.width(), icon.width(),
@ -448,7 +447,7 @@ void CallMuteButton::init() {
_crossLineMuteAnimation.paint( _crossLineMuteAnimation.paint(
p, p,
_muteIconPosition.topLeft(), _muteIconRect.topLeft(),
1. - _crossLineProgress); 1. - _crossLineProgress);
if (_radial) { if (_radial) {

View file

@ -88,7 +88,7 @@ private:
float _level = 0.; float _level = 0.;
float64 _crossLineProgress = 0.; float64 _crossLineProgress = 0.;
rpl::variable<float64> _radialShowProgress = 0.; rpl::variable<float64> _radialShowProgress = 0.;
QRect _muteIconPosition; QRect _muteIconRect;
HandleMouseState _handleMouseState = HandleMouseState::Enabled; HandleMouseState _handleMouseState = HandleMouseState::Enabled;
const style::CallButton &_st; const style::CallButton &_st;