allow toxidenticons for everyone with ID, avatar in chat log

This commit is contained in:
Green Sky 2024-04-23 10:52:57 +02:00
parent 05b0a2f514
commit cf697622cb
No known key found for this signature in database
3 changed files with 19 additions and 1 deletions

View File

@ -17,6 +17,13 @@ enum class ThemeCol_Contact {
icon_backdrop, icon_backdrop,
}; };
void renderAvatar(
const Theme& th,
ContactTextureCache& contact_tc,
const Contact3Handle c,
ImVec2 box
);
// returns true if clicked, if selectable, will highlight on hover and respect selected // returns true if clicked, if selectable, will highlight on hover and respect selected
// TODO: refine // TODO: refine
// +------+ // +------+

View File

@ -386,6 +386,10 @@ float ChatGui4::render(float time_delta) {
// name // name
if (ImGui::TableNextColumn()) { if (ImGui::TableNextColumn()) {
const float img_y {TEXT_BASE_HEIGHT - ImGui::GetStyle().FramePadding.y*2};
renderAvatar(_theme, _contact_tc, {_cr, c_from.c}, {img_y, img_y});
ImGui::SameLine();
if (_cr.all_of<Contact::Components::Name>(c_from.c)) { if (_cr.all_of<Contact::Components::Name>(c_from.c)) {
ImGui::TextUnformatted(_cr.get<Contact::Components::Name>(c_from.c).name.c_str()); ImGui::TextUnformatted(_cr.get<Contact::Components::Name>(c_from.c).name.c_str());
} else { } else {

View File

@ -187,7 +187,8 @@ std::optional<TextureEntry> ToxAvatarLoader::load(TextureUploaderI& tu, Contact3
if (!_cr.any_of< if (!_cr.any_of<
Contact::Components::ToxFriendPersistent, Contact::Components::ToxFriendPersistent,
Contact::Components::ToxGroupPersistent, Contact::Components::ToxGroupPersistent,
Contact::Components::ToxGroupPeerPersistent Contact::Components::ToxGroupPeerPersistent,
Contact::Components::ID
>(c)) { >(c)) {
return std::nullopt; return std::nullopt;
} }
@ -199,6 +200,12 @@ std::optional<TextureEntry> ToxAvatarLoader::load(TextureUploaderI& tu, Contact3
pixels = generateToxIdenticon(_cr.get<Contact::Components::ToxGroupPersistent>(c).chat_id); pixels = generateToxIdenticon(_cr.get<Contact::Components::ToxGroupPersistent>(c).chat_id);
} else if (_cr.all_of<Contact::Components::ToxGroupPeerPersistent>(c)) { } else if (_cr.all_of<Contact::Components::ToxGroupPeerPersistent>(c)) {
pixels = generateToxIdenticon(_cr.get<Contact::Components::ToxGroupPeerPersistent>(c).peer_key); pixels = generateToxIdenticon(_cr.get<Contact::Components::ToxGroupPeerPersistent>(c).peer_key);
} else if (_cr.all_of<Contact::Components::ID>(c)) {
// TODO: should we really use toxidenticons for other protocols?
// (this is required for self)
auto id_copy = _cr.get<Contact::Components::ID>(c).data;
id_copy.resize(32);
pixels = generateToxIdenticon(id_copy);
} }
TextureEntry new_entry; TextureEntry new_entry;