import 'package:flutter/material.dart'; import 'package:wolf_dart/classes/color_palette.dart'; import 'package:wolf_dart/classes/matrix.dart'; class SpriteGallery extends StatelessWidget { final List> sprites; const SpriteGallery({super.key, required this.sprites}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("VSWAP Sprite Gallery")), backgroundColor: Colors.black, body: GridView.builder( gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 8, // 8 sprites per row ), itemCount: sprites.length, itemBuilder: (context, index) { return Column( children: [ Text( "Idx: $index", style: const TextStyle(color: Colors.white, fontSize: 10), ), Expanded( child: CustomPaint( painter: SingleSpritePainter(sprite: sprites[index]), size: const Size(64, 64), ), ), ], ); }, ), ); } } class SingleSpritePainter extends CustomPainter { final Matrix sprite; SingleSpritePainter({required this.sprite}); @override void paint(Canvas canvas, Size size) { double pixelSize = size.width / 64; for (int x = 0; x < 64; x++) { for (int y = 0; y < 64; y++) { int colorByte = sprite[x][y]; if (colorByte != 255) { // Skip transparency canvas.drawRect( Rect.fromLTWH(x * pixelSize, y * pixelSize, pixelSize, pixelSize), Paint()..color = ColorPalette.vga[colorByte], ); } } } } @override bool shouldRepaint(CustomPainter oldDelegate) => false; }