summaryrefslogtreecommitdiff
path: root/windows
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-02-11 23:37:13 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-02-11 23:37:13 -0500
commit921a3c25f8846c3a896745e87f554c7af807a1ad (patch)
treea65d283598fb12ee8edcef595cdbe87bf71a7e3d /windows
parentbab9abf4af10919a2a432dc73fec27f6ef89948d (diff)
downloadabaddon-portaudio-921a3c25f8846c3a896745e87f554c7af807a1ad.tar.gz
abaddon-portaudio-921a3c25f8846c3a896745e87f554c7af807a1ad.zip
update some stuff with the guild icon in the info window
- fix tooltip showing up when it shouldnt - allow clicking on it to open icon url - refactorino
Diffstat (limited to 'windows')
-rw-r--r--windows/guildsettings/infopane.cpp57
-rw-r--r--windows/guildsettings/infopane.hpp4
2 files changed, 39 insertions, 22 deletions
diff --git a/windows/guildsettings/infopane.cpp b/windows/guildsettings/infopane.cpp
index 7ab672d..d0e8fe7 100644
--- a/windows/guildsettings/infopane.cpp
+++ b/windows/guildsettings/infopane.cpp
@@ -30,30 +30,19 @@ GuildSettingsInfoPane::GuildSettingsInfoPane(Snowflake id)
m_guild_name.show();
m_guild_name_label.show();
- auto load_icon_cb = [this](const Glib::RefPtr<Gdk::Pixbuf> &pixbuf) {
- m_guild_icon.property_pixbuf() = pixbuf->scale_simple(64, 64, Gdk::INTERP_BILINEAR);
- };
-
- auto guild_update_cb = [this, load_icon_cb](Snowflake id) {
+ auto guild_update_cb = [this](Snowflake id) {
if (id != GuildID) return;
const auto guild = *Abaddon::Get().GetDiscordClient().GetGuild(id);
- if (guild.HasIcon())
- Abaddon::Get().GetImageManager().LoadFromURL(guild.GetIconURL("png", "64"), sigc::track_obj(load_icon_cb, *this));
+ FetchGuildIcon(guild);
};
discord.signal_guild_update().connect(sigc::track_obj(guild_update_cb, *this));
+ FetchGuildIcon(guild);
+
+ AddPointerCursor(m_guild_icon_ev);
- m_guild_icon.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(32);
- if (guild.HasIcon()) {
- Abaddon::Get().GetImageManager().LoadFromURL(guild.GetIconURL("png", "64"), sigc::track_obj(load_icon_cb, *this));
- }
m_guild_icon.set_margin_bottom(10);
if (can_modify) {
- m_guild_icon_ev.signal_realize().connect([this]() {
- auto window = m_guild_icon_ev.get_window();
- auto display = window->get_display();
- auto cursor = Gdk::Cursor::create(display, "pointer");
- window->set_cursor(cursor);
- });
+ m_guild_icon_ev.set_tooltip_text("Click to choose a file, right click to paste");
m_guild_icon_ev.signal_button_press_event().connect([this](GdkEventButton *event) -> bool {
if (event->type == GDK_BUTTON_PRESS)
@@ -64,19 +53,45 @@ GuildSettingsInfoPane::GuildSettingsInfoPane(Snowflake id)
return false;
});
+ } else if (guild.HasIcon()) {
+ std::string guild_icon_url;
+ if (guild.HasAnimatedIcon())
+ guild_icon_url = guild.GetIconURL("gif", "512");
+ else
+ guild_icon_url = guild.GetIconURL("png", "512");
+ m_guild_icon_ev.signal_button_press_event().connect([this, guild_icon_url](GdkEventButton *event) -> bool {
+ if (event->type == GDK_BUTTON_PRESS)
+ if (event->button == GDK_BUTTON_PRIMARY)
+ LaunchBrowser(guild_icon_url);
+
+ return false;
+ });
}
- m_guild_icon_ev.set_tooltip_text("Click to choose a file, right click to paste");
m_guild_icon.show();
m_guild_icon_ev.show();
- //m_guild_icon_label.show();
m_guild_icon_ev.add(m_guild_icon);
attach(m_guild_icon_ev, 0, 0, 1, 1);
attach(m_guild_name_label, 0, 1, 1, 1);
attach_next_to(m_guild_name, m_guild_name_label, Gtk::POS_RIGHT, 1, 1);
- //attach(m_guild_icon_label, 0, 1, 1, 1);
- //attach_next_to(m_guild_icon, m_guild_icon_label, Gtk::POS_RIGHT, 1, 1);
+}
+
+void GuildSettingsInfoPane::FetchGuildIcon(const GuildData &guild) {
+ m_guild_icon.property_pixbuf() = Abaddon::Get().GetImageManager().GetPlaceholder(32);
+ if (guild.HasIcon()) {
+ if (Abaddon::Get().GetSettings().GetShowAnimations() && guild.HasAnimatedIcon()) {
+ auto cb = [this](const Glib::RefPtr<Gdk::PixbufAnimation> &pixbuf) {
+ m_guild_icon.property_pixbuf_animation() = pixbuf;
+ };
+ Abaddon::Get().GetImageManager().LoadAnimationFromURL(guild.GetIconURL("gif", "64"), 64, 64, sigc::track_obj(cb, *this));
+ }
+
+ auto cb = [this](const Glib::RefPtr<Gdk::Pixbuf> &pixbuf) {
+ m_guild_icon.property_pixbuf() = pixbuf->scale_simple(64, 64, Gdk::INTERP_BILINEAR);
+ };
+ Abaddon::Get().GetImageManager().LoadFromURL(guild.GetIconURL("png", "64"), sigc::track_obj(cb, *this));
+ }
}
void GuildSettingsInfoPane::UpdateGuildName() {
diff --git a/windows/guildsettings/infopane.hpp b/windows/guildsettings/infopane.hpp
index 8e7be82..829fa3b 100644
--- a/windows/guildsettings/infopane.hpp
+++ b/windows/guildsettings/infopane.hpp
@@ -1,12 +1,14 @@
#pragma once
#include <gtkmm.h>
-#include "../../discord/snowflake.hpp"
+#include "../../discord/guild.hpp"
class GuildSettingsInfoPane : public Gtk::Grid {
public:
GuildSettingsInfoPane(Snowflake id);
private:
+ void FetchGuildIcon(const GuildData &guild);
+
void UpdateGuildName();
void UpdateGuildIconFromData(const std::vector<uint8_t> &data, const std::string &mime);
void UpdateGuildIconFromPixbuf(Glib::RefPtr<Gdk::Pixbuf> pixbuf);