Este proyecto es educativo y Open Source. No se copia código de otros emuladores. Implementación basada únicamente en documentación técnica y tests permitidas.
Configuración del Icono de Aplicación
Resumen
Se configuró el icono personalizado de la aplicación Viboy Color en lugar del icono por defecto de Python.
El icono se carga desde el archivo viboycolor-icon.png ubicado en la raíz del proyecto y se establece
en la ventana de Pygame usando pygame.display.set_icon(). La implementación utiliza rutas portables
con pathlib.Path para garantizar compatibilidad entre Windows, Linux y macOS.
Concepto de Hardware
Aunque el icono de aplicación no es parte del hardware de la Game Boy original, es un aspecto importante de la experiencia de usuario en el emulador. El icono aparece en la barra de tareas, en el título de la ventana (en algunos sistemas operativos) y ayuda a identificar visualmente la aplicación.
Pygame permite establecer un icono personalizado para la ventana mediante la función
pygame.display.set_icon(), que acepta una superficie de Pygame cargada desde una imagen.
El icono debe establecerse después de inicializar Pygame pero puede hacerse antes o después de crear la ventana.
Implementación
Se modificó el método __init__ de la clase Renderer en src/gpu/renderer.py
para cargar y establecer el icono personalizado.
Componentes modificados
src/gpu/renderer.py: Se añadió la importación dePathdepathliby la lógica para cargar el icono.
Decisiones de diseño
- Ruta portable: Se utiliza
Path(__file__).parent.parent.parentpara construir la ruta al icono de forma relativa al módulo, garantizando portabilidad entre sistemas operativos. - Manejo de errores: Se verifica que el archivo exista antes de intentar cargarlo, y se capturan excepciones durante la carga para evitar que un icono faltante o corrupto rompa la inicialización del renderer.
- Logging: Se registra un mensaje informativo cuando el icono se carga correctamente, y un warning si no se encuentra o hay un error al cargarlo.
Código implementado
# Cargar y establecer el icono de la aplicación
# El icono está en la raíz del proyecto
icon_path = Path(__file__).parent.parent.parent / "viboycolor-icon.png"
if icon_path.exists():
try:
icon_surface = pygame.image.load(str(icon_path))
pygame.display.set_icon(icon_surface)
logger.info(f"Icono de aplicación cargado: {icon_path}")
except Exception as e:
logger.warning(f"No se pudo cargar el icono {icon_path}: {e}")
else:
logger.warning(f"Icono no encontrado: {icon_path}")
Archivos Afectados
src/gpu/renderer.py- Añadida importación dePathy lógica para cargar y establecer el icono de la aplicación.
Tests y Verificación
La verificación se realizó mediante ejecución manual de la aplicación:
- Verificación visual: Se ejecutó el emulador y se comprobó que el icono personalizado aparece en la barra de tareas de Windows en lugar del icono por defecto de Python.
- Ruta portable: La implementación utiliza
pathlib.Pathpara construir la ruta de forma portable, garantizando que funcione en Windows, Linux y macOS. - Manejo de errores: Se verificó que si el archivo del icono no existe, la aplicación continúa funcionando normalmente con un warning en los logs.
Resultado: Verified - El icono se carga correctamente y aparece en la barra de tareas.
Fuentes Consultadas
- Documentación de Pygame:
pygame.display.set_icon()- https://www.pygame.org/docs/ref/display.html#pygame.display.set_icon - Documentación de Python:
pathlib.Path- https://docs.python.org/3/library/pathlib.html
Integridad Educativa
Lo que Entiendo Ahora
- Iconos en Pygame: Pygame permite establecer un icono personalizado para la ventana usando
pygame.display.set_icon(), que acepta una superficie cargada desde una imagen. - Rutas portables: El uso de
pathlib.Pathpermite construir rutas relativas de forma portable, evitando problemas con separadores de directorio entre sistemas operativos. - Manejo de errores: Es importante verificar la existencia de archivos y capturar excepciones al cargar recursos externos para evitar que errores menores rompan la inicialización de componentes críticos.
Lo que Falta Confirmar
- No hay aspectos pendientes de confirmar en esta implementación. El comportamiento es directo y está bien documentado en la API de Pygame.
Hipótesis y Suposiciones
No hay suposiciones en esta implementación. El comportamiento de pygame.display.set_icon()
está documentado oficialmente y la implementación sigue las mejores prácticas de Python para manejo de rutas.
Próximos Pasos
- [ ] Continuar con mejoras de rendimiento y funcionalidad del emulador
- [ ] Implementar características adicionales según necesidades del proyecto