| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*
- This file is part of Telegram Desktop,
- the official desktop application for the Telegram messaging service.
- For license and copyright information please follow this link:
- https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
- */
- #include "ui/controls/send_as_button.h"
- #include "ui/effects/cross_animation.h"
- #include "ui/painter.h"
- #include "styles/style_chat.h"
- namespace Ui {
- SendAsButton::SendAsButton(QWidget *parent, const style::SendAsButton &st)
- : AbstractButton(parent)
- , _st(st) {
- resize(_st.width, _st.height);
- }
- void SendAsButton::setUserpic(QImage userpic) {
- _userpic = std::move(userpic);
- update();
- }
- void SendAsButton::setActive(bool active) {
- if (_active == active) {
- return;
- }
- _active = active;
- _activeAnimation.start(
- [=] { update(); },
- _active ? 0. : 1.,
- _active ? 1. : 0.,
- _st.duration);
- }
- void SendAsButton::paintEvent(QPaintEvent *e) {
- auto p = QPainter(this);
- const auto left = (width() - _st.size) / 2;
- const auto top = (height() - _st.size) / 2;
- const auto active = _activeAnimation.value(_active ? 1. : 0.);
- if (active < 1. && !_userpic.isNull()) {
- p.drawImage(QRect(left, top, _st.size, _st.size), _userpic);
- }
- if (active > 0.) {
- p.setOpacity(active);
- p.setPen(Qt::NoPen);
- p.setBrush(_st.activeBg);
- {
- PainterHighQualityEnabler hq(p);
- p.drawEllipse(left, top, _st.size, _st.size);
- }
- CrossAnimation::paint(
- p,
- _st.cross,
- _st.activeFg,
- left,
- top,
- width(),
- active);
- }
- }
- } // namespace Ui
|