David PHAM-VAN

Fix TextStyle constructor

  1 +# 1.3.12
  2 +* Fix TextStyle constructor
  3 +
1 # 1.3.11 4 # 1.3.11
2 * Update Readme 5 * Update Readme
3 6
@@ -179,7 +179,7 @@ class RichText extends Widget { @@ -179,7 +179,7 @@ class RichText extends Widget {
179 return true; 179 return true;
180 } 180 }
181 181
182 - final PdfFont font = style.paintFont.getFont(context); 182 + final PdfFont font = style.font.getFont(context);
183 183
184 final PdfFontMetrics space = 184 final PdfFontMetrics space =
185 font.stringMetrics(' ') * (style.fontSize * textScaleFactor); 185 font.stringMetrics(' ') * (style.fontSize * textScaleFactor);
@@ -322,7 +322,7 @@ class RichText extends Widget { @@ -322,7 +322,7 @@ class RichText extends Widget {
322 } 322 }
323 323
324 context.canvas.drawString( 324 context.canvas.drawString(
325 - currentStyle.paintFont.getFont(context), 325 + currentStyle.font.getFont(context),
326 currentStyle.fontSize * textScaleFactor, 326 currentStyle.fontSize * textScaleFactor,
327 word.text, 327 word.text,
328 box.x + word.offset.x, 328 box.x + word.offset.x,
@@ -25,10 +25,11 @@ class TextStyle { @@ -25,10 +25,11 @@ class TextStyle {
25 const TextStyle({ 25 const TextStyle({
26 this.inherit = true, 26 this.inherit = true,
27 this.color, 27 this.color,
28 - this.font,  
29 - this.fontBold,  
30 - this.fontItalic,  
31 - this.fontBoldItalic, 28 + Font font,
  29 + Font fontNormal,
  30 + Font fontBold,
  31 + Font fontItalic,
  32 + Font fontBoldItalic,
32 this.fontSize, 33 this.fontSize,
33 this.fontWeight, 34 this.fontWeight,
34 this.fontStyle, 35 this.fontStyle,
@@ -45,12 +46,28 @@ class TextStyle { @@ -45,12 +46,28 @@ class TextStyle {
45 assert(inherit || letterSpacing != null), 46 assert(inherit || letterSpacing != null),
46 assert(inherit || wordSpacing != null), 47 assert(inherit || wordSpacing != null),
47 assert(inherit || lineSpacing != null), 48 assert(inherit || lineSpacing != null),
48 - assert(inherit || height != null); 49 + assert(inherit || height != null),
  50 + fontNormal = fontNormal ??
  51 + (fontStyle != FontStyle.italic && fontWeight != FontWeight.bold
  52 + ? font
  53 + : null),
  54 + fontBold = fontBold ??
  55 + (fontStyle != FontStyle.italic && fontWeight == FontWeight.bold
  56 + ? font
  57 + : null),
  58 + fontItalic = fontItalic ??
  59 + (fontStyle == FontStyle.italic && fontWeight != FontWeight.bold
  60 + ? font
  61 + : null),
  62 + fontBoldItalic = fontBoldItalic ??
  63 + (fontStyle == FontStyle.italic && fontWeight == FontWeight.bold
  64 + ? font
  65 + : null);
49 66
50 factory TextStyle.defaultStyle() { 67 factory TextStyle.defaultStyle() {
51 return TextStyle( 68 return TextStyle(
52 color: PdfColors.black, 69 color: PdfColors.black,
53 - font: Font.helvetica(), 70 + fontNormal: Font.helvetica(),
54 fontBold: Font.helveticaBold(), 71 fontBold: Font.helveticaBold(),
55 fontItalic: Font.helveticaOblique(), 72 fontItalic: Font.helveticaOblique(),
56 fontBoldItalic: Font.helveticaBoldOblique(), 73 fontBoldItalic: Font.helveticaBoldOblique(),
@@ -68,7 +85,7 @@ class TextStyle { @@ -68,7 +85,7 @@ class TextStyle {
68 85
69 final PdfColor color; 86 final PdfColor color;
70 87
71 - final Font font; 88 + final Font fontNormal;
72 89
73 final Font fontBold; 90 final Font fontBold;
74 91
@@ -103,6 +120,7 @@ class TextStyle { @@ -103,6 +120,7 @@ class TextStyle {
103 TextStyle copyWith({ 120 TextStyle copyWith({
104 PdfColor color, 121 PdfColor color,
105 Font font, 122 Font font,
  123 + Font fontNormal,
106 Font fontBold, 124 Font fontBold,
107 Font fontItalic, 125 Font fontItalic,
108 Font fontBoldItalic, 126 Font fontBoldItalic,
@@ -119,6 +137,7 @@ class TextStyle { @@ -119,6 +137,7 @@ class TextStyle {
119 inherit: inherit, 137 inherit: inherit,
120 color: color ?? this.color, 138 color: color ?? this.color,
121 font: font ?? this.font, 139 font: font ?? this.font,
  140 + fontNormal: fontNormal ?? this.fontNormal,
122 fontBold: fontBold ?? this.fontBold, 141 fontBold: fontBold ?? this.fontBold,
123 fontItalic: fontItalic ?? this.fontItalic, 142 fontItalic: fontItalic ?? this.fontItalic,
124 fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic, 143 fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic,
@@ -138,6 +157,7 @@ class TextStyle { @@ -138,6 +157,7 @@ class TextStyle {
138 TextStyle apply({ 157 TextStyle apply({
139 PdfColor color, 158 PdfColor color,
140 Font font, 159 Font font,
  160 + Font fontNormal,
141 Font fontBold, 161 Font fontBold,
142 Font fontItalic, 162 Font fontItalic,
143 Font fontBoldItalic, 163 Font fontBoldItalic,
@@ -169,6 +189,7 @@ class TextStyle { @@ -169,6 +189,7 @@ class TextStyle {
169 inherit: inherit, 189 inherit: inherit,
170 color: color ?? this.color, 190 color: color ?? this.color,
171 font: font ?? this.font, 191 font: font ?? this.font,
  192 + fontNormal: fontNormal ?? this.fontNormal,
172 fontBold: fontBold ?? this.fontBold, 193 fontBold: fontBold ?? this.fontBold,
173 fontItalic: fontItalic ?? this.fontItalic, 194 fontItalic: fontItalic ?? this.fontItalic,
174 fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic, 195 fontBoldItalic: fontBoldItalic ?? this.fontBoldItalic,
@@ -201,6 +222,8 @@ class TextStyle { @@ -201,6 +222,8 @@ class TextStyle {
201 return copyWith( 222 return copyWith(
202 color: other.color, 223 color: other.color,
203 font: other.font, 224 font: other.font,
  225 + fontNormal: other.fontNormal,
  226 + fontBold: other.fontBold,
204 fontItalic: other.fontItalic, 227 fontItalic: other.fontItalic,
205 fontBoldItalic: other.fontBoldItalic, 228 fontBoldItalic: other.fontBoldItalic,
206 fontSize: other.fontSize, 229 fontSize: other.fontSize,
@@ -214,25 +237,32 @@ class TextStyle { @@ -214,25 +237,32 @@ class TextStyle {
214 ); 237 );
215 } 238 }
216 239
217 - Font get paintFont {  
218 - if (fontWeight == FontWeight.normal) {  
219 - if (fontStyle == FontStyle.normal) {  
220 - return font; 240 + @Deprecated('use font instead')
  241 + Font get paintFont => font;
  242 +
  243 + Font get font {
  244 + if (fontWeight != FontWeight.bold) {
  245 + if (fontStyle != FontStyle.italic) {
  246 + // normal
  247 + return fontNormal ?? fontBold ?? fontItalic ?? fontBoldItalic;
221 } else { 248 } else {
222 - return fontItalic ?? font; 249 + // italic
  250 + return fontItalic ?? fontNormal ?? fontBold ?? fontBoldItalic;
223 } 251 }
224 } else { 252 } else {
225 - if (fontStyle == FontStyle.normal) {  
226 - return fontBold ?? font; 253 + if (fontStyle != FontStyle.italic) {
  254 + // bold
  255 + return fontBold ?? fontNormal ?? fontItalic ?? fontBoldItalic;
227 } else { 256 } else {
228 - return fontBoldItalic ?? fontBold ?? fontItalic ?? font; 257 + // bold + italic
  258 + return fontBoldItalic ?? fontBold ?? fontItalic ?? fontNormal;
229 } 259 }
230 } 260 }
231 } 261 }
232 262
233 @override 263 @override
234 String toString() => 264 String toString() =>
235 - 'TextStyle(color:$color font:$paintFont size:$fontSize weight:$fontWeight style:$fontStyle letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background)'; 265 + 'TextStyle(color:$color font:$font size:$fontSize weight:$fontWeight style:$fontStyle letterSpacing:$letterSpacing wordSpacing:$wordSpacing lineSpacing:$lineSpacing height:$height background:$background)';
236 } 266 }
237 267
238 @immutable 268 @immutable
@@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl @@ -4,7 +4,7 @@ description: A pdf producer for Dart. It can create pdf files for both web or fl
4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf 4 homepage: https://github.com/DavBfr/dart_pdf/tree/master/pdf
5 repository: https://github.com/DavBfr/dart_pdf 5 repository: https://github.com/DavBfr/dart_pdf
6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues 6 issue_tracker: https://github.com/DavBfr/dart_pdf/issues
7 -version: 1.3.11 7 +version: 1.3.12
8 8
9 environment: 9 environment:
10 sdk: ">=2.1.0 <3.0.0" 10 sdk: ">=2.1.0 <3.0.0"
@@ -31,11 +31,13 @@ import 'widget_container_test.dart' as widget_container; @@ -31,11 +31,13 @@ import 'widget_container_test.dart' as widget_container;
31 import 'widget_table_test.dart' as widget_table; 31 import 'widget_table_test.dart' as widget_table;
32 import 'widget_test.dart' as widget; 32 import 'widget_test.dart' as widget;
33 import 'widget_text_test.dart' as widget_text; 33 import 'widget_text_test.dart' as widget_text;
  34 +import 'widget_theme_test.dart' as widget_theme;
34 35
35 void main() { 36 void main() {
36 annotations.main(); 37 annotations.main();
37 colors.main(); 38 colors.main();
38 complex.main(); 39 complex.main();
  40 + example.main();
39 jpeg.main(); 41 jpeg.main();
40 metrics.main(); 42 metrics.main();
41 minimal.main(); 43 minimal.main();
@@ -46,6 +48,6 @@ void main() { @@ -46,6 +48,6 @@ void main() {
46 widget_container.main(); 48 widget_container.main();
47 widget_table.main(); 49 widget_table.main();
48 widget_text.main(); 50 widget_text.main();
  51 + widget_theme.main();
49 widget.main(); 52 widget.main();
50 - example.main();  
51 } 53 }
@@ -175,7 +175,7 @@ void main() { @@ -175,7 +175,7 @@ void main() {
175 text: 'Hello ', 175 text: 'Hello ',
176 style: Theme.of(context).defaultTextStyle, 176 style: Theme.of(context).defaultTextStyle,
177 children: <TextSpan>[ 177 children: <TextSpan>[
178 - const TextSpan( 178 + TextSpan(
179 text: 'bold', 179 text: 'bold',
180 style: TextStyle( 180 style: TextStyle(
181 fontWeight: FontWeight.bold, 181 fontWeight: FontWeight.bold,
  1 +/*
  2 + * Copyright (C) 2017, David PHAM-VAN <dev.nfet.net@gmail.com>
  3 + *
  4 + * Licensed under the Apache License, Version 2.0 (the "License");
  5 + * you may not use this file except in compliance with the License.
  6 + * You may obtain a copy of the License at
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  10 + * Unless required by applicable law or agreed to in writing, software
  11 + * distributed under the License is distributed on an "AS IS" BASIS,
  12 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13 + * See the License for the specific language governing permissions and
  14 + * limitations under the License.
  15 + */
  16 +
  17 +import 'dart:io';
  18 +import 'dart:typed_data';
  19 +
  20 +import 'package:pdf/pdf.dart';
  21 +import 'package:test/test.dart';
  22 +import 'package:pdf/widgets.dart';
  23 +
  24 +Document pdf;
  25 +Font openSans;
  26 +Font openSansBold;
  27 +Font roboto;
  28 +Font notoSans;
  29 +Font genyomintw;
  30 +
  31 +Font loadFont(String filename) {
  32 + final Uint8List data = File(filename).readAsBytesSync();
  33 + return Font.ttf(data.buffer.asByteData());
  34 +}
  35 +
  36 +void main() {
  37 + setUpAll(() {
  38 + Document.debug = true;
  39 + RichText.debug = true;
  40 +
  41 + openSans = loadFont('open-sans.ttf');
  42 + openSansBold = loadFont('open-sans-bold.ttf');
  43 + roboto = loadFont('roboto.ttf');
  44 + notoSans = loadFont('noto-sans.ttf');
  45 + genyomintw = loadFont('genyomintw.ttf');
  46 +
  47 + pdf = Document();
  48 + });
  49 +
  50 + test('Theme FontStyle', () {
  51 + final TextStyle style = TextStyle(
  52 + font: roboto,
  53 + fontBold: openSansBold,
  54 + fontNormal: openSans,
  55 + fontItalic: notoSans,
  56 + fontBoldItalic: genyomintw,
  57 + fontWeight: FontWeight.bold,
  58 + fontSize: 20,
  59 + color: PdfColors.blue);
  60 +
  61 + pdf.addPage(Page(
  62 + build: (Context context) => ListView(
  63 + children: <Widget>[
  64 + Text(
  65 + style.font.fontName,
  66 + style: style,
  67 + ),
  68 + ],
  69 + ),
  70 + ));
  71 + });
  72 +
  73 + tearDownAll(() {
  74 + final File file = File('widgets-theme.pdf');
  75 + file.writeAsBytesSync(pdf.save());
  76 + });
  77 +}