feat(contacts): animated avatars (GIF/WebP) with a Settings toggle
Animate contact avatars end to end:
- texture_loader gains LoadAnimatedRGBA: decodes an image into a downscaled
RGBA frame sequence + per-frame durations — animated GIF via stb
(stbi_load_gif_from_memory) and animated WebP via libwebp's WebPAnimDecoder;
stills (and APNG, which stb reads as one image) return a single frame. Frames
are box-downscaled (smaller cap for animations) to bound VRAM, capped at 300.
- The contacts avatar cache now holds a frame sequence; currentAvatarFrame()
advances animated avatars by the ImGui clock and is used everywhere avatars
draw (list, cards, table, grid, preview). When a live animated frame is drawn
it flags the render loop (ConsumeContactsAvatarAnimation, clear-on-read) so
main.cpp keeps producing frames while animation plays and idles when it stops
or the contacts view is hidden.
- New animate_avatars setting (default on) + a Settings appearance toggle
("Animate avatars"); off shows the first frame only. currentAvatarFrame
honors it. +i18n (8 langs, CJK subset rebuilt for 帧/播/첫).
Verified: a 3-frame GIF and a 3-frame animated WebP both decode to 3 frames
with correct 120ms delays through the exact libwebp/stb calls used here.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -54,6 +54,7 @@
|
||||
"amount_details": "DETALLES DE CANTIDAD",
|
||||
"amount_exceeds_balance": "La cantidad excede el saldo",
|
||||
"amount_label": "Cantidad:",
|
||||
"animate_avatars": "Animar avatares",
|
||||
"appearance": "APARIENCIA",
|
||||
"auto_shield": "Auto-proteger minería",
|
||||
"av_intro": "El software de minería suele marcarse como potencialmente no deseado. Sigue estos pasos para habilitar la minería en pool:",
|
||||
@@ -1329,6 +1330,7 @@
|
||||
"try_again": "Reintentar",
|
||||
"tt_addr_url": "URL base para ver direcciones en un explorador de bloques",
|
||||
"tt_address_book": "Administrar direcciones guardadas para envío rápido",
|
||||
"tt_animate_avatars": "Reproduce avatares de contacto animados (GIF / WebP); desactivado muestra solo el primer fotograma",
|
||||
"tt_auto_lock": "Bloquear billetera después de este tiempo de inactividad",
|
||||
"tt_auto_shield": "Mover automáticamente el saldo transparente a direcciones blindadas para privacidad",
|
||||
"tt_backup": "Crear una copia de seguridad de su wallet.dat",
|
||||
|
||||
Reference in New Issue
Block a user