Ui::DynamicImage / Ui::CustomEmoji::DynamicImageEmoji.
This commit is contained in:
parent
7328e27862
commit
d424751135
4 changed files with 98 additions and 0 deletions
|
|
@ -273,6 +273,7 @@ PRIVATE
|
|||
ui/delayed_activation.h
|
||||
ui/dragging_scroll_manager.cpp
|
||||
ui/dragging_scroll_manager.h
|
||||
ui/dynamic_image.h
|
||||
ui/emoji_config.cpp
|
||||
ui/emoji_config.h
|
||||
ui/focus_persister.h
|
||||
|
|
|
|||
19
ui/dynamic_image.h
Normal file
19
ui/dynamic_image.h
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
// 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
|
||||
|
||||
namespace Ui {
|
||||
|
||||
class DynamicImage {
|
||||
public:
|
||||
virtual ~DynamicImage() = default;
|
||||
|
||||
[[nodiscard]] virtual QImage image(int size) = 0;
|
||||
virtual void subscribeToUpdates(Fn<void()> callback) = 0;
|
||||
};
|
||||
|
||||
} // namespace Ui
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "ui/effects/animation_value.h"
|
||||
#include "ui/effects/frame_generator.h"
|
||||
#include "ui/dynamic_image.h"
|
||||
#include "ui/ui_utility.h"
|
||||
#include "ui/painter.h"
|
||||
|
||||
|
|
@ -903,4 +904,54 @@ bool Internal::readyInDefaultState() {
|
|||
return true;
|
||||
}
|
||||
|
||||
DynamicImageEmoji::DynamicImageEmoji(
|
||||
QString entityData,
|
||||
std::shared_ptr<DynamicImage> image,
|
||||
Fn<void()> repaint,
|
||||
QMargins padding,
|
||||
int size)
|
||||
: _entityData(entityData)
|
||||
, _image(std::move(image))
|
||||
, _repaint(std::move(repaint))
|
||||
, _padding(padding)
|
||||
, _size(size) {
|
||||
}
|
||||
|
||||
int DynamicImageEmoji::width() {
|
||||
return _padding.left() + _size + _padding.right();
|
||||
}
|
||||
|
||||
QString DynamicImageEmoji::entityData() {
|
||||
return _entityData;
|
||||
}
|
||||
|
||||
void DynamicImageEmoji::paint(QPainter &p, const Context &context) {
|
||||
if (!_subscribed) {
|
||||
_subscribed = true;
|
||||
_image->subscribeToUpdates(_repaint);
|
||||
}
|
||||
|
||||
const auto rect = QRect(
|
||||
context.position + QPoint(_padding.left(), _padding.top()),
|
||||
QSize(_size, _size));
|
||||
auto image = _image->image(_size);
|
||||
context.internal.colorized = false;
|
||||
PaintScaledImage(p, rect, { &image }, context);
|
||||
}
|
||||
|
||||
void DynamicImageEmoji::unload() {
|
||||
if (_subscribed) {
|
||||
_subscribed = false;
|
||||
_image->subscribeToUpdates(nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
bool DynamicImageEmoji::ready() {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DynamicImageEmoji::readyInDefaultState() {
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace Ui::CustomEmoji
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ class QColor;
|
|||
class QPainter;
|
||||
|
||||
namespace Ui {
|
||||
class DynamicImage;
|
||||
class FrameGenerator;
|
||||
} // namespace Ui
|
||||
|
||||
|
|
@ -296,4 +297,30 @@ private:
|
|||
|
||||
};
|
||||
|
||||
class DynamicImageEmoji final : public Ui::Text::CustomEmoji {
|
||||
public:
|
||||
DynamicImageEmoji(
|
||||
QString entityData,
|
||||
std::shared_ptr<DynamicImage> image,
|
||||
Fn<void()> repaint,
|
||||
QMargins padding,
|
||||
int size);
|
||||
|
||||
int width() override;
|
||||
QString entityData() override;
|
||||
void paint(QPainter &p, const Context &context) override;
|
||||
void unload() override;
|
||||
bool ready() override;
|
||||
bool readyInDefaultState() override;
|
||||
|
||||
private:
|
||||
const QString _entityData;
|
||||
const std::shared_ptr<DynamicImage> _image;
|
||||
const Fn<void()> _repaint;
|
||||
const QMargins _padding;
|
||||
const int _size = 0;
|
||||
bool _subscribed = false;
|
||||
|
||||
};
|
||||
|
||||
} // namespace Ui::CustomEmoji
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue