116 lines
2.4 KiB
C++
116 lines
2.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
|
|
//
|
|
#include "ui/text/text_custom_emoji.h"
|
|
|
|
namespace Ui::Text {
|
|
|
|
int AdjustCustomEmojiSize(int emojiSize) {
|
|
return base::SafeRound(emojiSize * 1.12);
|
|
}
|
|
|
|
ShiftedEmoji::ShiftedEmoji(
|
|
std::unique_ptr<Ui::Text::CustomEmoji> wrapped,
|
|
QPoint shift)
|
|
: _wrapped(std::move(wrapped))
|
|
, _shift(shift) {
|
|
}
|
|
|
|
QString ShiftedEmoji::entityData() {
|
|
return _wrapped->entityData();
|
|
}
|
|
|
|
void ShiftedEmoji::paint(QPainter &p, const Context &context) {
|
|
auto copy = context;
|
|
copy.position += _shift;
|
|
_wrapped->paint(p, copy);
|
|
}
|
|
|
|
void ShiftedEmoji::unload() {
|
|
_wrapped->unload();
|
|
}
|
|
|
|
bool ShiftedEmoji::ready() {
|
|
return _wrapped->ready();
|
|
}
|
|
|
|
bool ShiftedEmoji::readyInDefaultState() {
|
|
return _wrapped->readyInDefaultState();
|
|
}
|
|
|
|
FirstFrameEmoji::FirstFrameEmoji(std::unique_ptr<CustomEmoji> wrapped)
|
|
: _wrapped(std::move(wrapped)) {
|
|
}
|
|
|
|
QString FirstFrameEmoji::entityData() {
|
|
return _wrapped->entityData();
|
|
}
|
|
|
|
void FirstFrameEmoji::paint(QPainter &p, const Context &context) {
|
|
auto copy = context;
|
|
copy.firstFrameOnly = true;
|
|
_wrapped->paint(p, copy);
|
|
}
|
|
|
|
void FirstFrameEmoji::unload() {
|
|
_wrapped->unload();
|
|
}
|
|
|
|
bool FirstFrameEmoji::ready() {
|
|
return _wrapped->ready();
|
|
}
|
|
|
|
bool FirstFrameEmoji::readyInDefaultState() {
|
|
return _wrapped->readyInDefaultState();
|
|
}
|
|
|
|
LimitedLoopsEmoji::LimitedLoopsEmoji(
|
|
std::unique_ptr<CustomEmoji> wrapped,
|
|
int limit)
|
|
: _wrapped(std::move(wrapped))
|
|
, _limit(limit) {
|
|
}
|
|
|
|
QString LimitedLoopsEmoji::entityData() {
|
|
return _wrapped->entityData();
|
|
}
|
|
|
|
void LimitedLoopsEmoji::paint(QPainter &p, const Context &context) {
|
|
if (_played < _limit) {
|
|
if (_wrapped->readyInDefaultState()) {
|
|
if (_inLoop) {
|
|
_inLoop = false;
|
|
++_played;
|
|
}
|
|
} else if (_wrapped->ready()) {
|
|
_inLoop = true;
|
|
}
|
|
}
|
|
if (_played == _limit) {
|
|
const auto was = context.firstFrameOnly;
|
|
context.firstFrameOnly = true;
|
|
_wrapped->paint(p, context);
|
|
context.firstFrameOnly = was;
|
|
} else {
|
|
_wrapped->paint(p, context);
|
|
}
|
|
}
|
|
|
|
void LimitedLoopsEmoji::unload() {
|
|
_wrapped->unload();
|
|
_inLoop = false;
|
|
_played = 0;
|
|
}
|
|
|
|
bool LimitedLoopsEmoji::ready() {
|
|
return _wrapped->ready();
|
|
}
|
|
|
|
bool LimitedLoopsEmoji::readyInDefaultState() {
|
|
return _wrapped->readyInDefaultState();
|
|
}
|
|
|
|
} // namespace Ui::Text
|