change some prototypes

This commit is contained in:
ouwou
2021-01-01 02:47:03 -05:00
parent 6985448eb9
commit 03f80263db
2 changed files with 42 additions and 42 deletions

View File

@@ -47,12 +47,12 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(Snowflake id) {
if (data->Content.size() > 0 || data->Type != MessageType::DEFAULT) { if (data->Content.size() > 0 || data->Type != MessageType::DEFAULT) {
container->m_text_component = container->CreateTextComponent(&*data); container->m_text_component = container->CreateTextComponent(&*data);
container->AttachEventHandlers(container->m_text_component); container->AttachEventHandlers(*container->m_text_component);
container->m_main->add(*container->m_text_component); container->m_main->add(*container->m_text_component);
} }
if (data->MessageReference.has_value()) { if (data->MessageReference.has_value()) {
auto *widget = container->CreateReplyComponent(&*data); auto *widget = container->CreateReplyComponent(*data);
container->m_main->add(*widget); container->m_main->add(*widget);
container->m_main->child_property_position(*widget) = 0; // eek container->m_main->child_property_position(*widget) = 0; // eek
} }
@@ -62,11 +62,11 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(Snowflake id) {
const auto &embed = data->Embeds[0]; const auto &embed = data->Embeds[0];
if (IsEmbedImageOnly(embed)) { if (IsEmbedImageOnly(embed)) {
auto *widget = container->CreateImageComponent(*embed.Thumbnail->ProxyURL, *embed.Thumbnail->URL, *embed.Thumbnail->Width, *embed.Thumbnail->Height); auto *widget = container->CreateImageComponent(*embed.Thumbnail->ProxyURL, *embed.Thumbnail->URL, *embed.Thumbnail->Width, *embed.Thumbnail->Height);
container->AttachEventHandlers(widget); container->AttachEventHandlers(*widget);
container->m_main->add(*widget); container->m_main->add(*widget);
} else { } else {
container->m_embed_component = container->CreateEmbedComponent(embed); container->m_embed_component = container->CreateEmbedComponent(embed);
container->AttachEventHandlers(container->m_embed_component); container->AttachEventHandlers(*container->m_embed_component);
container->m_main->add(*container->m_embed_component); container->m_main->add(*container->m_embed_component);
} }
} }
@@ -94,7 +94,7 @@ ChatMessageItemContainer *ChatMessageItemContainer::FromMessage(Snowflake id) {
} }
if (data->Reactions.has_value() && data->Reactions->size() > 0) { if (data->Reactions.has_value() && data->Reactions->size() > 0) {
container->m_reactions_component = container->CreateReactionsComponent(&*data); container->m_reactions_component = container->CreateReactionsComponent(*data);
container->m_main->add(*container->m_reactions_component); container->m_main->add(*container->m_reactions_component);
} }
@@ -119,7 +119,7 @@ void ChatMessageItemContainer::UpdateContent() {
if (m_embed_imgurl.size() > 0) { if (m_embed_imgurl.size() > 0) {
m_signal_image_load.emit(m_embed_imgurl); m_signal_image_load.emit(m_embed_imgurl);
} }
AttachEventHandlers(m_embed_component); AttachEventHandlers(*m_embed_component);
m_main->add(*m_embed_component); m_main->add(*m_embed_component);
} }
} }
@@ -151,7 +151,7 @@ void ChatMessageItemContainer::UpdateReactions() {
const auto data = Abaddon::Get().GetDiscordClient().GetMessage(ID); const auto data = Abaddon::Get().GetDiscordClient().GetMessage(ID);
if (data->Reactions.has_value() && data->Reactions->size() > 0) { if (data->Reactions.has_value() && data->Reactions->size() > 0) {
m_reactions_component = CreateReactionsComponent(&*data); m_reactions_component = CreateReactionsComponent(*data);
m_reactions_component->show_all(); m_reactions_component->show_all();
m_main->add(*m_reactions_component); m_main->add(*m_reactions_component);
} }
@@ -224,9 +224,9 @@ void ChatMessageItemContainer::UpdateTextComponent(Gtk::TextView *tv) {
case MessageType::INLINE_REPLY: case MessageType::INLINE_REPLY:
b->insert(s, data->Content); b->insert(s, data->Content);
HandleUserMentions(b); HandleUserMentions(b);
HandleLinks(tv); HandleLinks(*tv);
HandleChannelMentions(tv); HandleChannelMentions(tv);
HandleEmojis(tv); HandleEmojis(*tv);
break; break;
case MessageType::GUILD_MEMBER_JOIN: case MessageType::GUILD_MEMBER_JOIN:
b->insert_markup(s, "<span color='#999999'><i>[user joined]</i></span>"); b->insert_markup(s, "<span color='#999999'><i>[user joined]</i></span>");
@@ -415,9 +415,9 @@ Gtk::Widget *ChatMessageItemContainer::CreateImageComponent(const std::string &p
widget->set_halign(Gtk::ALIGN_START); widget->set_halign(Gtk::ALIGN_START);
widget->set_size_request(w, h); widget->set_size_request(w, h);
AttachEventHandlers(ev); AttachEventHandlers(*ev);
AddClickHandler(ev, url); AddClickHandler(ev, url);
HandleImage(w, h, widget, proxy_url); HandleImage(w, h, *widget, proxy_url);
return ev; return ev;
} }
@@ -430,7 +430,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateAttachmentComponent(const Attachmen
ev->get_style_context()->add_class("message-attachment-box"); ev->get_style_context()->add_class("message-attachment-box");
ev->add(*btn); ev->add(*btn);
AttachEventHandlers(ev); AttachEventHandlers(*ev);
AddClickHandler(ev, data.URL); AddClickHandler(ev, data.URL);
return ev; return ev;
@@ -450,11 +450,11 @@ Gtk::Widget *ChatMessageItemContainer::CreateStickerComponent(const Sticker &dat
// clang-format on // clang-format on
} }
AttachEventHandlers(box); AttachEventHandlers(*box);
return box; return box;
} }
Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message *data) { Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message &data) {
auto *flow = Gtk::manage(new Gtk::FlowBox); auto *flow = Gtk::manage(new Gtk::FlowBox);
flow->set_orientation(Gtk::ORIENTATION_HORIZONTAL); flow->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
flow->set_min_children_per_line(5); flow->set_min_children_per_line(5);
@@ -468,7 +468,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message *d
auto &emojis = Abaddon::Get().GetEmojis(); auto &emojis = Abaddon::Get().GetEmojis();
const auto &placeholder = imgr.GetPlaceholder(16); const auto &placeholder = imgr.GetPlaceholder(16);
for (const auto &reaction : *data->Reactions) { for (const auto &reaction : *data.Reactions) {
auto *ev = Gtk::manage(new Gtk::EventBox); auto *ev = Gtk::manage(new Gtk::EventBox);
auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL)); auto *box = Gtk::manage(new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL));
box->get_style_context()->add_class("reaction-box"); box->get_style_context()->add_class("reaction-box");
@@ -537,7 +537,7 @@ Gtk::Widget *ChatMessageItemContainer::CreateReactionsComponent(const Message *d
return flow; return flow;
} }
Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message *data) { Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message &data) {
auto *box = Gtk::manage(new Gtk::Box); auto *box = Gtk::manage(new Gtk::Box);
auto *lbl = Gtk::manage(new Gtk::Label); auto *lbl = Gtk::manage(new Gtk::Label);
lbl->set_single_line_mode(true); lbl->set_single_line_mode(true);
@@ -548,11 +548,11 @@ Gtk::Widget *ChatMessageItemContainer::CreateReplyComponent(const Message *data)
lbl->get_style_context()->add_class("message-reply"); lbl->get_style_context()->add_class("message-reply");
box->add(*lbl); box->add(*lbl);
if (data->ReferencedMessage.has_value()) { if (data.ReferencedMessage.has_value()) {
if (data->ReferencedMessage.value().get() == nullptr) { if (data.ReferencedMessage.value().get() == nullptr) {
lbl->set_markup("<i>deleted message</i>"); lbl->set_markup("<i>deleted message</i>");
} else { } else {
const auto &referenced = *data->ReferencedMessage.value().get(); const auto &referenced = *data.ReferencedMessage.value().get();
Glib::ustring text; Glib::ustring text;
if (referenced.Content == "") { if (referenced.Content == "") {
if (referenced.Attachments.size() > 0) { if (referenced.Attachments.size() > 0) {
@@ -610,8 +610,8 @@ void ChatMessageItemContainer::ReactionUpdateImage(Gtk::Image *img, const Glib::
img->property_pixbuf() = pb->scale_simple(16, 16, Gdk::INTERP_BILINEAR); img->property_pixbuf() = pb->scale_simple(16, 16, Gdk::INTERP_BILINEAR);
} }
void ChatMessageItemContainer::HandleImage(int w, int h, Gtk::Image *img, std::string url) { void ChatMessageItemContainer::HandleImage(int w, int h, Gtk::Image &img, std::string url) {
m_img_loadmap[url] = { img, { w, h } }; m_img_loadmap[url] = { &img, { w, h } };
// ask the chatwindow to call UpdateImage because dealing with lifetimes sucks // ask the chatwindow to call UpdateImage because dealing with lifetimes sucks
Glib::signal_idle().connect(sigc::bind(sigc::mem_fun(*this, &ChatMessageItemContainer::EmitImageLoad), url)); Glib::signal_idle().connect(sigc::bind(sigc::mem_fun(*this, &ChatMessageItemContainer::EmitImageLoad), url));
} }
@@ -688,16 +688,16 @@ void ChatMessageItemContainer::HandleUserMentions(Glib::RefPtr<Gtk::TextBuffer>
} }
} }
void ChatMessageItemContainer::HandleStockEmojis(Gtk::TextView *tv) { void ChatMessageItemContainer::HandleStockEmojis(Gtk::TextView &tv) {
Abaddon::Get().GetEmojis().ReplaceEmojis(tv->get_buffer(), EmojiSize); Abaddon::Get().GetEmojis().ReplaceEmojis(tv.get_buffer(), EmojiSize);
} }
void ChatMessageItemContainer::HandleCustomEmojis(Gtk::TextView *tv) { void ChatMessageItemContainer::HandleCustomEmojis(Gtk::TextView &tv) {
static auto rgx = Glib::Regex::create(R"(<a?:([\w\d_]+):(\d+)>)"); static auto rgx = Glib::Regex::create(R"(<a?:([\w\d_]+):(\d+)>)");
auto &img = Abaddon::Get().GetImageManager(); auto &img = Abaddon::Get().GetImageManager();
auto buf = tv->get_buffer(); auto buf = tv.get_buffer();
auto text = GetText(buf); auto text = GetText(buf);
Glib::MatchInfo match; Glib::MatchInfo match;
@@ -725,12 +725,12 @@ void ChatMessageItemContainer::HandleCustomEmojis(Gtk::TextView *tv) {
const auto anchor = buf->create_child_anchor(it); const auto anchor = buf->create_child_anchor(it);
auto img = Gtk::manage(new Gtk::Image(pixbuf)); auto img = Gtk::manage(new Gtk::Image(pixbuf));
img->show(); img->show();
tv->add_child_at_anchor(*img, anchor); tv.add_child_at_anchor(*img, anchor);
} else { } else {
const auto mark_start = buf->create_mark(start_it, false); const auto mark_start = buf->create_mark(start_it, false);
end_it.backward_char(); end_it.backward_char();
const auto mark_end = buf->create_mark(end_it, false); const auto mark_end = buf->create_mark(end_it, false);
const auto cb = [this, tv, buf, mark_start, mark_end](const Glib::RefPtr<Gdk::PixbufAnimation> &pixbuf) { const auto cb = [this, &tv, buf, mark_start, mark_end](const Glib::RefPtr<Gdk::PixbufAnimation> &pixbuf) {
auto start_it = mark_start->get_iter(); auto start_it = mark_start->get_iter();
auto end_it = mark_end->get_iter(); auto end_it = mark_end->get_iter();
end_it.forward_char(); end_it.forward_char();
@@ -740,7 +740,7 @@ void ChatMessageItemContainer::HandleCustomEmojis(Gtk::TextView *tv) {
const auto anchor = buf->create_child_anchor(it); const auto anchor = buf->create_child_anchor(it);
auto img = Gtk::manage(new Gtk::Image(pixbuf)); auto img = Gtk::manage(new Gtk::Image(pixbuf));
img->show(); img->show();
tv->add_child_at_anchor(*img, anchor); tv.add_child_at_anchor(*img, anchor);
}; };
img.LoadAnimationFromURL(Emoji::URLFromID(match.fetch(2), "gif"), EmojiSize, EmojiSize, sigc::track_obj(cb, tv)); img.LoadAnimationFromURL(Emoji::URLFromID(match.fetch(2), "gif"), EmojiSize, EmojiSize, sigc::track_obj(cb, tv));
} }
@@ -775,7 +775,7 @@ void ChatMessageItemContainer::HandleCustomEmojis(Gtk::TextView *tv) {
} }
} }
void ChatMessageItemContainer::HandleEmojis(Gtk::TextView *tv) { void ChatMessageItemContainer::HandleEmojis(Gtk::TextView &tv) {
static bool emojis = Abaddon::Get().GetSettings().GetShowEmojis(); static bool emojis = Abaddon::Get().GetSettings().GetShowEmojis();
if (emojis) { if (emojis) {
HandleStockEmojis(tv); HandleStockEmojis(tv);
@@ -890,12 +890,12 @@ void ChatMessageItemContainer::on_link_menu_copy() {
Gtk::Clipboard::get()->set_text(m_selected_link); Gtk::Clipboard::get()->set_text(m_selected_link);
} }
void ChatMessageItemContainer::HandleLinks(Gtk::TextView *tv) { void ChatMessageItemContainer::HandleLinks(Gtk::TextView &tv) {
const auto rgx = Glib::Regex::create(R"(\bhttps?:\/\/[^\s]+\.[^\s]+\b)"); const auto rgx = Glib::Regex::create(R"(\bhttps?:\/\/[^\s]+\.[^\s]+\b)");
tv->signal_button_press_event().connect(sigc::mem_fun(*this, &ChatMessageItemContainer::OnLinkClick), false); tv.signal_button_press_event().connect(sigc::mem_fun(*this, &ChatMessageItemContainer::OnLinkClick), false);
auto buf = tv->get_buffer(); auto buf = tv.get_buffer();
Glib::ustring text = GetText(buf); Glib::ustring text = GetText(buf);
// i'd like to let this be done thru css like .message-link { color: #bitch; } but idk how // i'd like to let this be done thru css like .message-link { color: #bitch; } but idk how
@@ -1015,7 +1015,7 @@ ChatMessageItemContainer::type_signal_image_load ChatMessageItemContainer::signa
return m_signal_image_load; return m_signal_image_load;
} }
void ChatMessageItemContainer::AttachEventHandlers(Gtk::Widget *widget) { void ChatMessageItemContainer::AttachEventHandlers(Gtk::Widget &widget) {
const auto on_button_press_event = [this](GdkEventButton *event) -> bool { const auto on_button_press_event = [this](GdkEventButton *event) -> bool {
if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) { if (event->type == GDK_BUTTON_PRESS && event->button == GDK_BUTTON_SECONDARY) {
ShowMenu(reinterpret_cast<GdkEvent *>(event)); ShowMenu(reinterpret_cast<GdkEvent *>(event));
@@ -1024,7 +1024,7 @@ void ChatMessageItemContainer::AttachEventHandlers(Gtk::Widget *widget) {
return false; return false;
}; };
widget->signal_button_press_event().connect(on_button_press_event, false); widget.signal_button_press_event().connect(on_button_press_event, false);
} }
ChatMessageHeader::ChatMessageHeader(const Message *data) { ChatMessageHeader::ChatMessageHeader(const Message *data) {

View File

@@ -26,10 +26,10 @@ protected:
Gtk::Widget *CreateImageComponent(const std::string &proxy_url, const std::string &url, int inw, int inh); 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 *CreateAttachmentComponent(const AttachmentData &data); // non-image attachments
Gtk::Widget *CreateStickerComponent(const Sticker &data); Gtk::Widget *CreateStickerComponent(const Sticker &data);
Gtk::Widget *CreateReactionsComponent(const Message *data); Gtk::Widget *CreateReactionsComponent(const Message &data);
Gtk::Widget *CreateReplyComponent(const Message *data); Gtk::Widget *CreateReplyComponent(const Message &data);
void ReactionUpdateImage(Gtk::Image *img, const Glib::RefPtr<Gdk::Pixbuf> &pb); void ReactionUpdateImage(Gtk::Image *img, const Glib::RefPtr<Gdk::Pixbuf> &pb);
void HandleImage(int w, int h, Gtk::Image *img, std::string url); void HandleImage(int w, int h, Gtk::Image &img, std::string url);
void OnEmbedImageLoad(const Glib::RefPtr<Gdk::Pixbuf> &pixbuf); void OnEmbedImageLoad(const Glib::RefPtr<Gdk::Pixbuf> &pixbuf);
@@ -38,9 +38,9 @@ protected:
static bool IsEmbedImageOnly(const EmbedData &data); static bool IsEmbedImageOnly(const EmbedData &data);
void HandleUserMentions(Glib::RefPtr<Gtk::TextBuffer> buf); void HandleUserMentions(Glib::RefPtr<Gtk::TextBuffer> buf);
void HandleStockEmojis(Gtk::TextView *tv); void HandleStockEmojis(Gtk::TextView &tv);
void HandleCustomEmojis(Gtk::TextView *tv); void HandleCustomEmojis(Gtk::TextView &tv);
void HandleEmojis(Gtk::TextView *tv); void HandleEmojis(Gtk::TextView &tv);
void CleanupEmojis(Glib::RefPtr<Gtk::TextBuffer> buf); void CleanupEmojis(Glib::RefPtr<Gtk::TextBuffer> buf);
void HandleChannelMentions(Glib::RefPtr<Gtk::TextBuffer> buf); void HandleChannelMentions(Glib::RefPtr<Gtk::TextBuffer> buf);
@@ -54,14 +54,14 @@ protected:
void on_link_menu_copy(); void on_link_menu_copy();
Glib::ustring m_selected_link; Glib::ustring m_selected_link;
void HandleLinks(Gtk::TextView *tv); void HandleLinks(Gtk::TextView &tv);
bool OnLinkClick(GdkEventButton *ev); bool OnLinkClick(GdkEventButton *ev);
std::map<Glib::RefPtr<Gtk::TextTag>, std::string> m_link_tagmap; std::map<Glib::RefPtr<Gtk::TextTag>, std::string> m_link_tagmap;
std::map<Glib::RefPtr<Gtk::TextTag>, Snowflake> m_channel_tagmap; std::map<Glib::RefPtr<Gtk::TextTag>, Snowflake> m_channel_tagmap;
std::unordered_map<std::string, std::pair<Gtk::Image *, std::pair<int, int>>> m_img_loadmap; // url -> [img, [w, h]] std::unordered_map<std::string, std::pair<Gtk::Image *, std::pair<int, int>>> m_img_loadmap; // url -> [img, [w, h]]
void AttachEventHandlers(Gtk::Widget *widget); void AttachEventHandlers(Gtk::Widget &widget);
void ShowMenu(GdkEvent *event); void ShowMenu(GdkEvent *event);
Gtk::Menu m_menu; Gtk::Menu m_menu;