65 lines
1.8 KiB
Dart
65 lines
1.8 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:pdf/pdf.dart';
|
|
import 'package:pdf/widgets.dart';
|
|
|
|
class DocumentTheme {
|
|
DocumentTheme({
|
|
required this.primaryHex,
|
|
required this.accentHex,
|
|
required this.backgroundHex,
|
|
required this.fontPath,
|
|
required this.bulletPoint,
|
|
});
|
|
|
|
factory DocumentTheme.fromToml(Map<String, dynamic> toml) => DocumentTheme(
|
|
primaryHex: (toml['theme'] as Map)['primary_hex'] as String,
|
|
accentHex: (toml['theme'] as Map)['accent_hex'] as String,
|
|
backgroundHex: (toml['theme'] as Map)['background_hex'] as String,
|
|
fontPath: (toml['theme'] as Map)['font'] as String,
|
|
bulletPoint: (toml['theme'] as Map)['bullet_point'] as String? ?? '-',
|
|
);
|
|
|
|
factory DocumentTheme.retro() => DocumentTheme(
|
|
primaryHex: "00AA00",
|
|
accentHex: "44EE66",
|
|
backgroundHex: "FFFFFF",
|
|
fontPath: "nerd.ttf",
|
|
bulletPoint: '-',
|
|
);
|
|
|
|
static const double inch = 72.0;
|
|
static const double cm = inch / 2.54;
|
|
static const double mm = inch / 25.4;
|
|
|
|
static const width = 21.0 * cm;
|
|
static const height = 29.7 * cm;
|
|
static const margin = 2.0 * cm;
|
|
|
|
final String primaryHex;
|
|
final String accentHex;
|
|
final String backgroundHex;
|
|
final String fontPath;
|
|
final String bulletPoint;
|
|
Font? _font;
|
|
|
|
PdfColor get primaryColor => PdfColor.fromHex(primaryHex);
|
|
PdfColor get accentColor => PdfColor.fromHex(accentHex);
|
|
PdfColor get backgroundColor => PdfColor.fromHex(backgroundHex);
|
|
|
|
Font get font {
|
|
_font ??= Font.ttf(File(fontPath).readAsBytesSync().buffer.asByteData());
|
|
return _font!;
|
|
}
|
|
|
|
@override
|
|
int get hashCode {
|
|
return Object.hashAll([primaryHex, accentHex, backgroundHex, fontPath, bulletPoint]);
|
|
}
|
|
|
|
@override
|
|
bool operator ==(Object other) {
|
|
return super.hashCode == other.hashCode;
|
|
}
|
|
}
|