put tooltips on reactions

This commit is contained in:
ouwou 2021-01-17 23:24:44 -05:00
parent 744e42892d
commit 4fd7f9d75e
3 changed files with 16 additions and 0 deletions

View File

@ -475,6 +475,10 @@ Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message &d
// image
if (is_stock) { // unicode/stock
const auto shortcode = emojis.GetShortCodeForPattern(reaction.Emoji.Name);
if (shortcode != "")
ev->set_tooltip_text(shortcode);
const auto &pb = emojis.GetPixBuf(reaction.Emoji.Name);
Gtk::Image *img;
if (pb)
@ -484,6 +488,8 @@ Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message &d
img->set_can_focus(false);
box->add(*img);
} else { // custom
ev->set_tooltip_text(reaction.Emoji.Name);
auto img = Gtk::manage(new LazyImage(reaction.Emoji.GetURL(), 16, 16));
img->set_can_focus(false);
box->add(*img);

View File

@ -25,6 +25,7 @@ bool EmojiResource::Load() {
if (shortcode_strlen > 0) {
std::fread(shortcode.data(), shortcode_strlen, 1, m_fp);
m_shortcode_index[shortcode] = pattern_hex;
m_pattern_shortcode_index[pattern_hex] = shortcode;
}
std::fread(&len, 4, 1, m_fp);
@ -120,6 +121,13 @@ void EmojiResource::ReplaceEmojis(Glib::RefPtr<Gtk::TextBuffer> buf, int size) {
}
}
std::string EmojiResource::GetShortCodeForPattern(const Glib::ustring &pattern) {
auto it = m_pattern_shortcode_index.find(pattern);
if (it != m_pattern_shortcode_index.end())
return it->second;
return "";
}
const std::vector<Glib::ustring> &EmojiResource::GetPatterns() const {
return m_patterns;
}

View File

@ -17,8 +17,10 @@ public:
const std::vector<Glib::ustring> &GetPatterns() const;
const std::map<std::string, std::string> &GetShortCodes() const;
void ReplaceEmojis(Glib::RefPtr<Gtk::TextBuffer> buf, int size = 24);
std::string GetShortCodeForPattern(const Glib::ustring &pattern);
private:
std::unordered_map<std::string, std::string> m_pattern_shortcode_index;
std::map<std::string, std::string> m_shortcode_index; // shortcode -> pattern
std::unordered_map<std::string, std::pair<int, int>> m_index; // pattern -> [pos, len]
FILE *m_fp = nullptr;