Show unmute button tooltip about space bar.

This commit is contained in:
John Preston 2021-05-28 14:47:41 +04:00
parent cb630c69f0
commit d659200a42
5 changed files with 45 additions and 11 deletions

View file

@ -2006,7 +2006,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_group_call_unmute_small" = "Unmute"; "lng_group_call_unmute_small" = "Unmute";
"lng_group_call_more" = "More"; "lng_group_call_more" = "More";
"lng_group_call_unmute" = "Unmute"; "lng_group_call_unmute" = "Unmute";
"lng_group_call_unmute_sub" = "or hold spacebar to talk"; "lng_group_call_unmute_sub" = "Hold space bar to temporarily unmute.";
"lng_group_call_you_are_live" = "You are Live"; "lng_group_call_you_are_live" = "You are Live";
"lng_group_call_force_muted" = "Muted by admin"; "lng_group_call_force_muted" = "Muted by admin";
"lng_group_call_force_muted_sub" = "You are in Listen Only mode"; "lng_group_call_force_muted_sub" = "You are in Listen Only mode";

View file

@ -1254,3 +1254,9 @@ groupCallLargeVideo: GroupCallLargeVideo {
groupCallVideoSmallSkip: 4px; groupCallVideoSmallSkip: 4px;
groupCallVideoLargeSkip: 6px; groupCallVideoLargeSkip: 6px;
groupCallTooltip: Tooltip(defaultTooltip) {
textBg: groupCallMembersBg;
textFg: groupCallMembersFg;
textBorder: groupCallMembersBgOver;
}

View file

@ -871,15 +871,7 @@ void Panel::setupRealMuteButtonState(not_null<Data::GroupCall*> real) {
: mute == MuteState::Muted : mute == MuteState::Muted
? tr::lng_group_call_unmute(tr::now) ? tr::lng_group_call_unmute(tr::now)
: tr::lng_group_call_you_are_live(tr::now)), : tr::lng_group_call_you_are_live(tr::now)),
.subtext = ((scheduleDate || wide) .tooltip = ((!scheduleDate && mute == MuteState::Muted)
? QString()
: state == GroupCall::InstanceState::Disconnected
? QString()
: mute == MuteState::ForceMuted
? tr::lng_group_call_raise_hand_tip(tr::now)
: mute == MuteState::RaisedHand
? tr::lng_group_call_raised_hand_sub(tr::now)
: mute == MuteState::Muted
? tr::lng_group_call_unmute_sub(tr::now) ? tr::lng_group_call_unmute_sub(tr::now)
: QString()), : QString()),
.type = (scheduleDate .type = (scheduleDate

View file

@ -696,6 +696,17 @@ void CallMuteButton::init() {
const auto &button = _st->active.button; const auto &button = _st->active.button;
_content->resize(button.width, button.height); _content->resize(button.width, button.height);
_content->events(
) | rpl::start_with_next([=](not_null<QEvent*> e) {
if (e->type() == QEvent::MouseMove) {
if (!_state.current().tooltip.isEmpty()) {
Ui::Tooltip::Show(1000, this);
}
} else if (e->type() == QEvent::Leave) {
Ui::Tooltip::Hide();
}
}, _content->lifetime());
rpl::combine( rpl::combine(
_radialInfo.rawShowProgress.value(), _radialInfo.rawShowProgress.value(),
anim::Disables() anim::Disables()
@ -922,6 +933,24 @@ void CallMuteButton::iconAnimationCallback() {
} }
} }
QString CallMuteButton::tooltipText() const {
return _state.current().tooltip;
}
QPoint CallMuteButton::tooltipPos() const {
return QCursor::pos();
}
bool CallMuteButton::tooltipWindowActive() const {
return Ui::AppInFocus()
&& Ui::InFocusChain(_content->window())
&& _content->mapToGlobal(_content->rect()).contains(QCursor::pos());
}
const style::Tooltip *CallMuteButton::tooltipSt() const {
return &st::groupCallTooltip;
}
void CallMuteButton::updateLabelsGeometry() { void CallMuteButton::updateLabelsGeometry() {
updateLabelGeometry(_content->geometry(), _label->size()); updateLabelGeometry(_content->geometry(), _label->size());
updateCenterLabelGeometry(_content->geometry(), _centerLabel->size()); updateCenterLabelGeometry(_content->geometry(), _centerLabel->size());

View file

@ -11,6 +11,7 @@
#include "ui/effects/cross_line.h" #include "ui/effects/cross_line.h"
#include "ui/effects/gradient.h" #include "ui/effects/gradient.h"
#include "ui/effects/radial_animation.h" #include "ui/effects/radial_animation.h"
#include "ui/widgets/tooltip.h"
#include "lottie/lottie_icon.h" #include "lottie/lottie_icon.h"
namespace style { namespace style {
@ -46,10 +47,11 @@ enum class CallMuteButtonType {
struct CallMuteButtonState { struct CallMuteButtonState {
QString text; QString text;
QString subtext; QString subtext;
QString tooltip;
CallMuteButtonType type = CallMuteButtonType::Connecting; CallMuteButtonType type = CallMuteButtonType::Connecting;
}; };
class CallMuteButton final { class CallMuteButton final : private AbstractTooltipShower {
public: public:
explicit CallMuteButton( explicit CallMuteButton(
not_null<RpWidget*> parent, not_null<RpWidget*> parent,
@ -143,6 +145,11 @@ private:
void startIconState(const IconState &state); void startIconState(const IconState &state);
void iconAnimationCallback(); void iconAnimationCallback();
QString tooltipText() const override;
QPoint tooltipPos() const override;
bool tooltipWindowActive() const override;
const style::Tooltip *tooltipSt() const override;
[[nodiscard]] static HandleMouseState HandleMouseStateFromType( [[nodiscard]] static HandleMouseState HandleMouseStateFromType(
CallMuteButtonType type); CallMuteButtonType type);