diff --git a/Telegram/SourceFiles/calls/calls.style b/Telegram/SourceFiles/calls/calls.style index d4134c5f2f..006c31ff8d 100644 --- a/Telegram/SourceFiles/calls/calls.style +++ b/Telegram/SourceFiles/calls/calls.style @@ -262,8 +262,8 @@ callReDial: IconButton { width: 40px; height: 56px; - icon: mainMenuCalls; - iconOver: mainMenuCallsOver; + icon: icon {{ "call_answer", menuIconFg }}; + iconOver: icon {{ "call_answer", menuIconFgOver }}; iconPosition: point(-1px, -1px); ripple: defaultRippleAnimation; @@ -271,6 +271,11 @@ callReDial: IconButton { rippleAreaSize: 40px; } +callCameraReDial: IconButton(callReDial) { + icon: icon {{ "call_camera_active", menuIconFg }}; + iconOver: icon {{ "call_camera_active", menuIconFgOver }}; +} + callRatingPadding: margins(24px, 12px, 24px, 0px); callRatingStar: IconButton { width: 36px; diff --git a/Telegram/SourceFiles/calls/calls_box_controller.cpp b/Telegram/SourceFiles/calls/calls_box_controller.cpp index 6f8781c546..935a58643f 100644 --- a/Telegram/SourceFiles/calls/calls_box_controller.cpp +++ b/Telegram/SourceFiles/calls/calls_box_controller.cpp @@ -42,6 +42,11 @@ public: Missed, }; + enum class CallType { + Voice, + Video, + }; + bool canAddItem(not_null item) const { return (ComputeType(item) == _type) && (ItemDateTime(item).date() == _date); @@ -90,7 +95,7 @@ public: return 0; } QSize actionSize() const override { - return peer()->isUser() ? QSize(st::callReDial.width, st::callReDial.height) : QSize(); + return peer()->isUser() ? QSize(_st->width, _st->height) : QSize(); } QMargins actionMargins() const override { return QMargins( @@ -110,10 +115,12 @@ public: private: void refreshStatus() override; static Type ComputeType(not_null item); + static CallType ComputeCallType(not_null item); std::vector> _items; QDate _date; Type _type; + not_null _st; std::unique_ptr _actionRipple; @@ -123,7 +130,10 @@ BoxController::Row::Row(not_null item) : PeerListRow(item->history()->peer, item->id) , _items(1, item) , _date(ItemDateTime(item).date()) -, _type(ComputeType(item)) { +, _type(ComputeType(item)) +, _st(ComputeCallType(item) == CallType::Voice + ? &st::callReDial + : &st::callCameraReDial) { refreshStatus(); } @@ -153,12 +163,18 @@ void BoxController::Row::paintAction( bool actionSelected) { auto size = actionSize(); if (_actionRipple) { - _actionRipple->paint(p, x + st::callReDial.rippleAreaPosition.x(), y + st::callReDial.rippleAreaPosition.y(), outerWidth); + _actionRipple->paint( + p, + x + _st->rippleAreaPosition.x(), + y + _st->rippleAreaPosition.y(), + outerWidth); if (_actionRipple->empty()) { _actionRipple.reset(); } } - st::callReDial.icon.paintInCenter(p, style::rtlrect(x, y, size.width(), size.height(), outerWidth)); + _st->icon.paintInCenter( + p, + style::rtlrect(x, y, size.width(), size.height(), outerWidth)); } void BoxController::Row::refreshStatus() { @@ -201,12 +217,28 @@ BoxController::Row::Type BoxController::Row::ComputeType( return Type::In; } +BoxController::Row::CallType BoxController::Row::ComputeCallType( + not_null item) { + if (auto media = item->media()) { + if (const auto call = media->call()) { + if (call->video) { + return CallType::Video; + } + } + } + return CallType::Voice; +} + void BoxController::Row::addActionRipple(QPoint point, Fn updateCallback) { if (!_actionRipple) { - auto mask = Ui::RippleAnimation::ellipseMask(QSize(st::callReDial.rippleAreaSize, st::callReDial.rippleAreaSize)); - _actionRipple = std::make_unique(st::callReDial.ripple, std::move(mask), std::move(updateCallback)); + auto mask = Ui::RippleAnimation::ellipseMask( + QSize(_st->rippleAreaSize, _st->rippleAreaSize)); + _actionRipple = std::make_unique( + _st->ripple, + std::move(mask), + std::move(updateCallback)); } - _actionRipple->add(point - st::callReDial.rippleAreaPosition); + _actionRipple->add(point - _st->rippleAreaPosition); } void BoxController::Row::stopLastActionRipple() {