Files
tdesktop/Telegram/lib_ui/ui/effects/ripple_animation.h
allhaileris afb81b8278
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
init
2026-02-16 15:50:16 +03:00

73 lines
1.4 KiB
C++

// This file is part of Desktop App Toolkit,
// a set of libraries for developing nice desktop applications.
//
// For license and copyright information please follow this link:
// https://github.com/desktop-app/legal/blob/master/LEGAL
//
#pragma once
#include <deque>
namespace Images {
struct CornersMaskRef;
} // namespace Images
namespace style {
struct RippleAnimation;
} // namespace style
namespace Ui {
class RippleAnimation {
public:
// White upon transparent mask,
// like colorizeImage(black-white-mask, white).
RippleAnimation(
const style::RippleAnimation &st,
QImage mask,
Fn<void()> update);
void add(QPoint origin, int startRadius = 0);
void addFading();
void lastStop();
void lastUnstop();
void lastFinish();
void forceRepaint();
void paint(
QPainter &p,
int x,
int y,
int outerWidth,
const QColor *colorOverride = nullptr);
bool empty() const {
return _ripples.empty();
}
static QImage MaskByDrawer(
QSize size,
bool filled,
Fn<void(QPainter &p)> drawer);
static QImage RectMask(QSize size);
static QImage RoundRectMask(QSize size, int radius);
static QImage RoundRectMask(QSize size, Images::CornersMaskRef corners);
static QImage EllipseMask(QSize size);
~RippleAnimation();
private:
void clear();
void clearFinished();
const style::RippleAnimation &_st;
QPixmap _mask;
Fn<void()> _update;
class Ripple;
std::deque<std::unique_ptr<Ripple>> _ripples;
};
} // namespace Ui