Some checks failed
CI / Windows build (push) Has been cancelled
Add pdfrx 2.4.4. PenCaptureRegion routes stylus to ink (arena-bypass via PenCaptureBinding) while touch falls through to pdfrx scroll/zoom. Spike pane hosts PdfViewer with page-overlay ink at normalized coords + frame-time HUD; reachable from home screen for on-device testing. Bench/coordinate harness under integration_test. Generated assets are gitignored (regenerate via tool/gen_*.dart).
63 lines
2.2 KiB
Dart
63 lines
2.2 KiB
Dart
// 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<String> 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 = <String>[
|
|
_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;
|
|
}
|