diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-07-01 02:03:41 -0400 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-07-01 02:03:41 -0400 |
commit | cbc65bf766c1241980961bcca999adf69c80dba0 (patch) | |
tree | 5c383a6201258e33ac72fa8e9b9690bcf5f7c5e6 /components | |
parent | 220aa6d13a9cb12687139305c6f68eb9cf6f73a1 (diff) | |
download | abaddon-portaudio-cbc65bf766c1241980961bcca999adf69c80dba0.tar.gz abaddon-portaudio-cbc65bf766c1241980961bcca999adf69c80dba0.zip |
re-add suppport for static (a)png stickers
Diffstat (limited to 'components')
-rw-r--r-- | components/chatmessage.cpp | 31 | ||||
-rw-r--r-- | components/chatmessage.hpp | 7 |
2 files changed, 34 insertions, 4 deletions
diff --git a/components/chatmessage.cpp b/components/chatmessage.cpp index 727b64a..e61ba3f 100644 --- a/components/chatmessage.cpp +++ b/components/chatmessage.cpp @@ -9,6 +9,7 @@ constexpr static int AvatarSize = 32; constexpr static int EmbedImageWidth = 400; constexpr static int EmbedImageHeight = 300; constexpr static int ThumbnailSize = 100; +constexpr static int StickerComponentSize = 160; ChatMessageItemContainer::ChatMessageItemContainer() { m_main = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); @@ -68,6 +69,8 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(const Message &d } // only 1? + /* + DEPRECATED if (data.Stickers.has_value()) { const auto &sticker = data.Stickers.value()[0]; // todo: lottie, proper apng @@ -75,6 +78,11 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(const Message &d auto *widget = container->CreateStickerComponent(sticker); container->m_main->add(*widget); } + }*/ + + if (data.StickerItems.has_value()) { + auto *widget = container->CreateStickersComponent(*data.StickerItems); + container->m_main->add(*widget); } if (data.Reactions.has_value() && data.Reactions->size() > 0) { @@ -479,7 +487,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateAttachmentComponent(const Attachmen return ev; } -Gtk::Widget *ChatMessageItemContainer::CreateStickerComponent(const StickerData &data) { +Gtk::Widget *ChatMessageItemContainer::CreateStickerComponentDeprecated(const StickerData &data) { auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *imgw = Gtk::manage(new Gtk::Image); box->add(*imgw); @@ -496,6 +504,27 @@ Gtk::Widget *ChatMessageItemContainer::CreateStickerComponent(const StickerData return box; } +Gtk::Widget *ChatMessageItemContainer::CreateStickersComponent(const std::vector<StickerItem> &data) { + auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_VERTICAL)); + + for (const auto &sticker : data) { + // no lottie + if (sticker.FormatType != StickerFormatType::PNG && sticker.FormatType != StickerFormatType::APNG) continue; + auto *ev = Gtk::manage(new Gtk::EventBox); + auto *img = Gtk::manage(new LazyImage(sticker.GetURL(), StickerComponentSize, StickerComponentSize, false)); + img->set_size_request(StickerComponentSize, StickerComponentSize); // should this go in LazyImage ? + img->show(); + ev->show(); + ev->add(*img); + box->add(*ev); + } + + box->show(); + + AttachEventHandlers(*box); + return box; +} + Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message &data) { auto *flow = Gtk::manage(new Gtk::FlowBox); flow->set_orientation(Gtk::ORIENTATION_HORIZONTAL); diff --git a/components/chatmessage.hpp b/components/chatmessage.hpp index 7bc050d..3868094 100644 --- a/components/chatmessage.hpp +++ b/components/chatmessage.hpp @@ -25,7 +25,8 @@ protected: Gtk::Widget *CreateEmbedComponent(const EmbedData &data); // Message.Embeds[0] Gtk::Widget *CreateImageComponent(const std::string &proxy_url, const std::string &url, int inw, int inh); Gtk::Widget *CreateAttachmentComponent(const AttachmentData &data); // non-image attachments - Gtk::Widget *CreateStickerComponent(const StickerData &data); + Gtk::Widget *CreateStickerComponentDeprecated(const StickerData &data); + Gtk::Widget *CreateStickersComponent(const std::vector<StickerItem> &data); Gtk::Widget *CreateReactionsComponent(const Message &data); Gtk::Widget *CreateReplyComponent(const Message &data); @@ -89,14 +90,14 @@ public: ChatMessageHeader(const Message &data); void AddContent(Gtk::Widget *widget, bool prepend); void UpdateNameColor(); - std::vector<Gtk::Widget*> GetChildContent(); + std::vector<Gtk::Widget *> GetChildContent(); protected: void AttachUserMenuHandler(Gtk::Widget &widget); bool on_author_button_press(GdkEventButton *ev); - std::vector<Gtk::Widget*> m_content_widgets; + std::vector<Gtk::Widget *> m_content_widgets; Gtk::Box *m_main_box; Gtk::Box *m_content_box; |