Showing
3 changed files
with
32 additions
and
8 deletions
@@ -104,8 +104,11 @@ class Page extends BasePage { | @@ -104,8 +104,11 @@ class Page extends BasePage { | ||
104 | final Theme calculatedTheme = theme ?? document.theme ?? Theme.base(); | 104 | final Theme calculatedTheme = theme ?? document.theme ?? Theme.base(); |
105 | final Map<Type, Inherited> inherited = <Type, Inherited>{}; | 105 | final Map<Type, Inherited> inherited = <Type, Inherited>{}; |
106 | inherited[calculatedTheme.runtimeType] = calculatedTheme; | 106 | inherited[calculatedTheme.runtimeType] = calculatedTheme; |
107 | - final Context context = | ||
108 | - Context(page: pdfPage, canvas: canvas, inherited: inherited); | 107 | + final Context context = Context( |
108 | + document: document.document, | ||
109 | + page: pdfPage, | ||
110 | + canvas: canvas, | ||
111 | + inherited: inherited); | ||
109 | if (_build != null) { | 112 | if (_build != null) { |
110 | final Widget child = _build(context); | 113 | final Widget child = _build(context); |
111 | layout(child, context, constraints); | 114 | layout(child, context, constraints); |
@@ -187,7 +190,9 @@ class MultiPage extends Page { | @@ -187,7 +190,9 @@ class MultiPage extends Page { | ||
187 | double offsetEnd; | 190 | double offsetEnd; |
188 | double offsetStart; | 191 | double offsetStart; |
189 | int index = 0; | 192 | int index = 0; |
190 | - final List<Widget> children = _buildList(Context(inherited: inherited)); | 193 | + final Context baseContext = |
194 | + Context(document: document.document, inherited: inherited); | ||
195 | + final List<Widget> children = _buildList(baseContext); | ||
191 | WidgetContext widgetContext; | 196 | WidgetContext widgetContext; |
192 | 197 | ||
193 | while (index < children.length) { | 198 | while (index < children.length) { |
@@ -197,7 +202,7 @@ class MultiPage extends Page { | @@ -197,7 +202,7 @@ class MultiPage extends Page { | ||
197 | final PdfPage pdfPage = | 202 | final PdfPage pdfPage = |
198 | PdfPage(document.document, pageFormat: pageFormat); | 203 | PdfPage(document.document, pageFormat: pageFormat); |
199 | final PdfGraphics canvas = pdfPage.getGraphics(); | 204 | final PdfGraphics canvas = pdfPage.getGraphics(); |
200 | - context = Context(page: pdfPage, canvas: canvas, inherited: inherited); | 205 | + context = baseContext.copyWith(page: pdfPage, canvas: canvas); |
201 | assert(() { | 206 | assert(() { |
202 | if (Document.debug) { | 207 | if (Document.debug) { |
203 | debugPaint(context); | 208 | debugPaint(context); |
@@ -125,7 +125,7 @@ class Font { | @@ -125,7 +125,7 @@ class Font { | ||
125 | 125 | ||
126 | PdfFont getFont(Context context) { | 126 | PdfFont getFont(Context context) { |
127 | if (_pdfFont == null) { | 127 | if (_pdfFont == null) { |
128 | - final PdfDocument pdfDocument = context.page.pdfDocument; | 128 | + final PdfDocument pdfDocument = context.document; |
129 | _pdfFont = buildFont(pdfDocument); | 129 | _pdfFont = buildFont(pdfDocument); |
130 | } | 130 | } |
131 | 131 |
@@ -18,7 +18,13 @@ part of widget; | @@ -18,7 +18,13 @@ part of widget; | ||
18 | 18 | ||
19 | @immutable | 19 | @immutable |
20 | class Context { | 20 | class Context { |
21 | - const Context({this.page, this.canvas, this.inherited}); | 21 | + const Context({ |
22 | + @required this.document, | ||
23 | + this.page, | ||
24 | + this.canvas, | ||
25 | + @required this.inherited, | ||
26 | + }) : assert(document != null), | ||
27 | + assert(inherited != null); | ||
22 | 28 | ||
23 | final PdfPage page; | 29 | final PdfPage page; |
24 | 30 | ||
@@ -26,11 +32,19 @@ class Context { | @@ -26,11 +32,19 @@ class Context { | ||
26 | 32 | ||
27 | final Map<Type, Inherited> inherited; | 33 | final Map<Type, Inherited> inherited; |
28 | 34 | ||
29 | - int get pageNumber => page.pdfDocument.pdfPageList.pages.indexOf(page) + 1; | 35 | + final PdfDocument document; |
36 | + | ||
37 | + int get pageNumber => document.pdfPageList.pages.indexOf(page) + 1; | ||
38 | + | ||
39 | + int get pagesCount => document.pdfPageList.pages.length; | ||
30 | 40 | ||
31 | Context copyWith( | 41 | Context copyWith( |
32 | - {PdfPage page, PdfGraphics canvas, Map<Type, Inherited> inherited}) { | 42 | + {PdfPage page, |
43 | + PdfGraphics canvas, | ||
44 | + Matrix4 ctm, | ||
45 | + Map<Type, Inherited> inherited}) { | ||
33 | return Context( | 46 | return Context( |
47 | + document: document, | ||
34 | page: page ?? this.page, | 48 | page: page ?? this.page, |
35 | canvas: canvas ?? this.canvas, | 49 | canvas: canvas ?? this.canvas, |
36 | inherited: inherited ?? this.inherited); | 50 | inherited: inherited ?? this.inherited); |
@@ -48,12 +62,17 @@ class Inherited {} | @@ -48,12 +62,17 @@ class Inherited {} | ||
48 | abstract class Widget { | 62 | abstract class Widget { |
49 | Widget(); | 63 | Widget(); |
50 | 64 | ||
65 | + /// The bounding box of this widget, calculated at layout time | ||
51 | PdfRect box; | 66 | PdfRect box; |
52 | 67 | ||
68 | + /// First widget pass to calculate the children layout and | ||
69 | + /// bounding [box] | ||
53 | @protected | 70 | @protected |
54 | void layout(Context context, BoxConstraints constraints, | 71 | void layout(Context context, BoxConstraints constraints, |
55 | {bool parentUsesSize = false}); | 72 | {bool parentUsesSize = false}); |
56 | 73 | ||
74 | + /// Draw itself and its children, according to the calculated | ||
75 | + /// [box.offset] | ||
57 | @protected | 76 | @protected |
58 | void paint(Context context) { | 77 | void paint(Context context) { |
59 | assert(() { | 78 | assert(() { |
-
Please register or login to post a comment