Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(336)

Side by Side Diff: sky/sdk/lib/rendering/paragraph.dart

Issue 1173323004: Add TextStyle fontFamily:, extend support for fontWeight: (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Changes per review feedback Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « sky/sdk/lib/painting/text_style.dart ('k') | sky/sdk/lib/theme2/typography.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 import 'dart:sky' as sky; 5 import 'dart:sky' as sky;
6 6
7 import 'box.dart'; 7 import 'box.dart';
8 import 'object.dart'; 8 import 'object.dart';
9 9 import '../painting/text_style.dart';
10 enum FontWeight {
11 light, // 300
12 regular, // 400
13 medium, // 500
14 }
15
16 enum TextAlign {
17 left,
18 right,
19 center
20 }
21
22 class TextStyle {
23 const TextStyle({
24 this.color,
25 this.fontSize,
26 this.fontWeight,
27 this.textAlign
28 });
29
30 final Color color;
31 final double fontSize; // in pixels
32 final FontWeight fontWeight;
33 final TextAlign textAlign;
34
35 TextStyle copyWith({
36 Color color,
37 double fontSize,
38 FontWeight fontWeight,
39 TextAlign textAlign
40 }) {
41 return new TextStyle(
42 color: color != null ? color : this.color,
43 fontSize: fontSize != null ? fontSize : this.fontSize,
44 fontWeight: fontWeight != null ? fontWeight : this.fontWeight,
45 textAlign: textAlign != null ? textAlign : this.textAlign
46 );
47 }
48
49 bool operator ==(other) {
50 return other is TextStyle &&
51 color == other.color &&
52 fontSize == other.fontSize &&
53 fontWeight == other.fontWeight &&
54 textAlign == other.textAlign;
55 }
56
57 int get hashCode {
58 // Use Quiver: https://github.com/domokit/mojo/issues/236
59 int value = 373;
60 value = 37 * value + color.hashCode;
61 value = 37 * value + fontSize.hashCode;
62 value = 37 * value + fontWeight.hashCode;
63 value = 37 * value + textAlign.hashCode;
64 return value;
65 }
66
67 void _applyToCSSStyle(sky.CSSStyleDeclaration cssStyle) {
68 if (color != null) {
69 cssStyle['color'] = 'rgba(${color.red}, ${color.green}, ${color.blue}, ${c olor.alpha / 255.0})';
70 }
71 if (fontSize != null) {
72 cssStyle['font-size'] = "${fontSize}px";
73 }
74 if (fontWeight != null) {
75 cssStyle['font-weight'] = const {
76 FontWeight.light: '300',
77 FontWeight.regular: '400',
78 FontWeight.medium: '500',
79 }[fontWeight];
80 }
81 if (textAlign != null) {
82 cssStyle['text-align'] = const {
83 TextAlign.left: 'left',
84 TextAlign.right: 'right',
85 TextAlign.center: 'center',
86 }[textAlign];
87 }
88 }
89
90 String toString([String prefix = '']) {
91 List<String> result = [];
92 if (color != null)
93 result.add('${prefix}color: $color');
94 if (fontSize != null)
95 result.add('${prefix}fontSize: $fontSize');
96 if (fontWeight != null)
97 result.add('${prefix}fontWeight: $fontWeight');
98 if (textAlign != null)
99 result.add('${prefix}textAlign: $textAlign');
100 if (result.isEmpty)
101 return '${prefix}<no style specified>';
102 return result.join('\n');
103 }
104 }
105 10
106 abstract class InlineBase { 11 abstract class InlineBase {
107 sky.Node _toDOM(sky.Document owner); 12 sky.Node _toDOM(sky.Document owner);
108 String toString([String prefix = '']); 13 String toString([String prefix = '']);
109 } 14 }
110 15
111 class InlineText extends InlineBase { 16 class InlineText extends InlineBase {
112 InlineText(this.text) { 17 InlineText(this.text) {
113 assert(text != null); 18 assert(text != null);
114 } 19 }
(...skipping 11 matching lines...) Expand all
126 InlineStyle(this.style, this.children) { 31 InlineStyle(this.style, this.children) {
127 assert(style != null); 32 assert(style != null);
128 assert(children != null); 33 assert(children != null);
129 } 34 }
130 35
131 final TextStyle style; 36 final TextStyle style;
132 final List<InlineBase> children; 37 final List<InlineBase> children;
133 38
134 sky.Node _toDOM(sky.Document owner) { 39 sky.Node _toDOM(sky.Document owner) {
135 sky.Element parent = owner.createElement('t'); 40 sky.Element parent = owner.createElement('t');
136 style._applyToCSSStyle(parent.style); 41 style.applyToCSSStyle(parent.style);
137 for (InlineBase child in children) { 42 for (InlineBase child in children) {
138 parent.appendChild(child._toDOM(owner)); 43 parent.appendChild(child._toDOM(owner));
139 } 44 }
140 return parent; 45 return parent;
141 } 46 }
142 47
143 String toString([String prefix = '']) { 48 String toString([String prefix = '']) {
144 List<String> result = []; 49 List<String> result = [];
145 result.add('${prefix}InlineStyle:'); 50 result.add('${prefix}InlineStyle:');
146 var indent = '${prefix} '; 51 var indent = '${prefix} ';
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 } 146 }
242 147
243 // we should probably expose a way to do precise (inter-glpyh) hit testing 148 // we should probably expose a way to do precise (inter-glpyh) hit testing
244 149
245 String debugDescribeSettings(String prefix) { 150 String debugDescribeSettings(String prefix) {
246 String result = '${super.debugDescribeSettings(prefix)}'; 151 String result = '${super.debugDescribeSettings(prefix)}';
247 result += '${prefix}inline: ${inline}\n'; 152 result += '${prefix}inline: ${inline}\n';
248 return result; 153 return result;
249 } 154 }
250 } 155 }
OLDNEW
« no previous file with comments | « sky/sdk/lib/painting/text_style.dart ('k') | sky/sdk/lib/theme2/typography.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698