compile method

CompiledIcons compile({
  1. required Directory inputDir,
  2. required Directory outputDir,
  3. required String bundleName,
})

Implementation

CompiledIcons compile({
  required Directory inputDir,
  required Directory outputDir,
  required String bundleName,
}) {
  outputDir.createSync(recursive: true);
  final buffer = StringBuffer()
    ..write('#include "$bundleName.h"\n\n#include <gui/icon_i.h>\n\n');
  final icons = <_IconEntry>[];

  _walk(inputDir, buffer, icons);

  for (final icon in icons) {
    buffer.write(
      'const Icon ${icon.name} = {.width=${icon.width},'
      '.height=${icon.height},.frame_count=${icon.frameCount},'
      '.frame_rate=${icon.frameRate},.frames=_${icon.name}};\n',
    );
  }
  buffer.write('\n');

  final source = File(UfbtPaths.join(outputDir.path, '$bundleName.c'))
    ..writeAsStringSync(buffer.toString());

  final headerBuffer = StringBuffer(
    '#pragma once\n\n#include <gui/icon.h>\n\n',
  );
  for (final icon in icons) {
    headerBuffer.write('extern const Icon ${icon.name};\n');
  }
  final header = File(UfbtPaths.join(outputDir.path, '$bundleName.h'))
    ..writeAsStringSync(headerBuffer.toString());

  return CompiledIcons(source: source, header: header);
}