David PHAM-VAN

Add SVG Color filter

... ... @@ -5,6 +5,7 @@
- Fix documentation
- Add Positioned.fill()
- Improve GraphicState
- Add SVG Color filter
## 3.1.0
... ...
... ... @@ -38,6 +38,10 @@ class SvgColor {
return none;
}
if (painter.parser.colorFilter != null) {
return SvgColor(color: painter.parser.colorFilter);
}
if (svgColors.containsKey(color)) {
return SvgColor(color: svgColors[color]);
}
... ...
... ... @@ -15,6 +15,7 @@
*/
import 'package:pdf/pdf.dart';
import 'package:pdf/src/svg/color.dart';
import 'package:pdf/widgets.dart';
import 'brush.dart';
... ... @@ -38,11 +39,12 @@ class SvgPainter {
final PdfRect boundingBox;
void paint() {
SvgGroup.fromXml(
parser.root,
this,
SvgBrush.defaultContext,
).paint(_canvas!);
final brush = parser.colorFilter == null
? SvgBrush.defaultContext
: SvgBrush.defaultContext
.copyWith(fill: SvgColor(color: parser.colorFilter));
SvgGroup.fromXml(parser.root, this, brush).paint(_canvas!);
}
final _fontCache = <String, Font>{};
... ...
... ... @@ -22,7 +22,10 @@ import 'brush.dart';
class SvgParser {
/// Create an SVG parser
factory SvgParser({required XmlDocument xml}) {
factory SvgParser({
required XmlDocument xml,
PdfColor? colorFilter,
}) {
final root = xml.rootElement;
final vbattr = root.getAttribute('viewBox');
... ... @@ -45,10 +48,22 @@ class SvgParser {
final viewBox = PdfRect(fvb[0], fvb[1], fvb[2], fvb[3]);
return SvgParser._(width, height, viewBox, root);
return SvgParser._(
width,
height,
viewBox,
root,
colorFilter,
);
}
SvgParser._(this.width, this.height, this.viewBox, this.root);
SvgParser._(
this.width,
this.height,
this.viewBox,
this.root,
this.colorFilter,
);
final PdfRect viewBox;
... ... @@ -58,6 +73,8 @@ class SvgParser {
final XmlElement root;
final PdfColor? colorFilter;
static final _transformParameterRegExp =
RegExp(r'[\w.-]+(px|pt|em|cm|mm|in|%|)');
... ...
... ... @@ -31,9 +31,13 @@ class SvgImage extends Widget {
bool clip = true,
double? width,
double? height,
PdfColor? colorFilter,
}) {
final xml = XmlDocument.parse(svg);
final parser = SvgParser(xml: xml);
final parser = SvgParser(
xml: xml,
colorFilter: colorFilter,
);
return SvgImage._fromParser(
parser,
... ...