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/delayed_activation.h
|
||||||
ui/dragging_scroll_manager.cpp
|
ui/dragging_scroll_manager.cpp
|
||||||
ui/dragging_scroll_manager.h
|
ui/dragging_scroll_manager.h
|
||||||
|
ui/dynamic_image.h
|
||||||
ui/emoji_config.cpp
|
ui/emoji_config.cpp
|
||||||
ui/emoji_config.h
|
ui/emoji_config.h
|
||||||
ui/focus_persister.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/animation_value.h"
|
||||||
#include "ui/effects/frame_generator.h"
|
#include "ui/effects/frame_generator.h"
|
||||||
|
#include "ui/dynamic_image.h"
|
||||||
#include "ui/ui_utility.h"
|
#include "ui/ui_utility.h"
|
||||||
#include "ui/painter.h"
|
#include "ui/painter.h"
|
||||||
|
|
||||||
|
|
@ -903,4 +904,54 @@ bool Internal::readyInDefaultState() {
|
||||||
return true;
|
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
|
} // namespace Ui::CustomEmoji
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ class QColor;
|
||||||
class QPainter;
|
class QPainter;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
class DynamicImage;
|
||||||
class FrameGenerator;
|
class FrameGenerator;
|
||||||
} // namespace Ui
|
} // 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
|
} // namespace Ui::CustomEmoji
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue