// lib/editor/pdf/spike_main.dart // // Standalone entry point for the THROWAWAY M1 pdfrx spike (plan §10). // // Launch on the Windows tablet (or any desktop with a display): // flutter run -t lib/editor/pdf/spike_main.dart // // It opens test/assets/large_300p.pdf in [SpikeEditorPane] with the // frame-timing HUD and ink-load toggle, so the M1 perf/pen gates are // observable on-device. // // IMPORTANT: pen capture requires the kind-aware [PenCaptureBinding] (installed // below before pdfrx init). pdfrx itself is initialized via // pdfrxFlutterInitialize() — confirmed from pdfrx 2.4.4 example/pdf_combine. import 'dart:io'; import 'package:flutter/material.dart'; import 'package:pdfrx/pdfrx.dart'; import 'pen_capture_region.dart'; import 'spike_app.dart'; /// Default benchmark asset (300-page PDF generated by tool/gen_bench_pdf.dart). const String _kDefaultPdfRelPath = 'test/assets/large_300p.pdf'; /// Filesystem path for the synthetic ink load (regenerate via /// tool/gen_dense_strokes.dart; not bundled — read from disk at the project root). const String _kDenseStrokesAsset = 'test/assets/dense_strokes.json'; void main(List args) { // Kind-aware binding MUST be installed before runApp so PenCaptureRegion can // gate hit-testing by pointer kind (see pen_capture_region.dart header). PenCaptureBinding.ensureInitialized(); // pdfrx native engine init (pdfrx 2.4.4 example pattern). pdfrxFlutterInitialize(); // Allow overriding the PDF path as the first CLI arg (otherwise the default // 300-page bench asset relative to the project root / cwd). final pdfPath = args.isNotEmpty ? args.first : _resolvePdfPath(); runApp( SpikeApp( pdfPath: pdfPath, denseStrokesAsset: _kDenseStrokesAsset, ), ); } /// Resolve the bench PDF path. `flutter run` sets cwd to the project root, so /// the relative asset path works on desktop; we also try a couple of fallbacks. String _resolvePdfPath() { final candidates = [ _kDefaultPdfRelPath, '${Directory.current.path}/$_kDefaultPdfRelPath', ]; for (final c in candidates) { if (File(c).existsSync()) return c; } // Return the primary path anyway; pdfrx will surface a clear load error. return _kDefaultPdfRelPath; }