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

Unified Diff: sky/sdk/lib/painting/text_style.dart

Issue 1201503003: Turn on wavy underlines. The waves aren't very pretty yet (they are too short somehow), I'll fix th… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: sky/sdk/lib/painting/text_style.dart
diff --git a/sky/sdk/lib/painting/text_style.dart b/sky/sdk/lib/painting/text_style.dart
index c9fda03bff783713d042ac24ff597c6b81a094e7..19d3c547e0447c9560d92de91ce36220cb91490f 100644
--- a/sky/sdk/lib/painting/text_style.dart
+++ b/sky/sdk/lib/painting/text_style.dart
@@ -39,9 +39,9 @@ enum TextDecoration {
lineThrough
}
-const underline = const <TextDecoration> [TextDecoration.underline];
-const overline = const <TextDecoration> [TextDecoration.overline];
-const lineThrough = const <TextDecoration> [TextDecoration.lineThrough];
+const underline = const <TextDecoration>[TextDecoration.underline];
+const overline = const <TextDecoration>[TextDecoration.overline];
+const lineThrough = const <TextDecoration>[TextDecoration.lineThrough];
enum TextDecorationStyle {
solid,
@@ -58,7 +58,7 @@ class TextStyle {
this.fontSize,
this.fontWeight,
this.textAlign,
- List<TextDecoration> this.decoration,
+ this.decoration,
this.decorationColor,
this.decorationStyle
});
@@ -68,21 +68,10 @@ class TextStyle {
final double fontSize; // in pixels
final FontWeight fontWeight;
final TextAlign textAlign;
- final List<TextDecoration> decoration;
+ final List<TextDecoration> decoration; // TODO(ianh): Switch this to a Set<> once Dart supports constant Sets
final Color decorationColor;
final TextDecorationStyle decorationStyle;
- String _decorationToString() {
- assert(decoration != null);
- const toCSS = const {
- TextDecoration.none: 'none',
- TextDecoration.underline: 'underline',
- TextDecoration.overline: 'overline',
- TextDecoration.lineThrough: 'lineThrough'
- };
- return decoration.map((d) => toCSS[d]).join(' ');
- }
-
TextStyle copyWith({
Color color,
double fontSize,
@@ -104,41 +93,44 @@ class TextStyle {
);
}
- bool operator ==(other) {
- if (identical(this, other))
- return true;
- return other is TextStyle &&
- color == other.color &&
- fontFamily == other.fontFamily &&
- fontSize == other.fontSize &&
- fontWeight == other.fontWeight &&
- textAlign == other.textAlign &&
- decoration == other.decoration &&
- decorationColor == other.decorationColor &&
- decorationStyle == other.decorationStyle;
+ static String _colorToCSSString(Color color) {
+ return 'rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha / 255.0})';
}
- int get hashCode {
- // Use Quiver: https://github.com/domokit/mojo/issues/236
- int value = 373;
- value = 37 * value + color.hashCode;
- value = 37 * value + fontFamily.hashCode;
- value = 37 * value + fontSize.hashCode;
- value = 37 * value + fontWeight.hashCode;
- value = 37 * value + textAlign.hashCode;
- value = 37 * value + decoration.hashCode;
- value = 37 * value + decorationColor.hashCode;
- value = 37 * value + decorationStyle.hashCode;
- return value;
+ static String _fontFamilyToCSSString(String fontFamily) {
+ // TODO(hansmuller): escape the fontFamily string.
+ return fontFamily;
+ }
+
+ static String _decorationToCSSString(List<TextDecoration> decoration) {
+ assert(decoration != null);
+ const toCSS = const <TextDecoration, String>{
+ TextDecoration.none: 'none',
+ TextDecoration.underline: 'underline',
+ TextDecoration.overline: 'overline',
+ TextDecoration.lineThrough: 'lineThrough'
+ };
+ return decoration.map((d) => toCSS[d]).join(' ');
+ }
+
+ static String _decorationStyleToCSSString(TextDecorationStyle decorationStyle) {
+ assert(decorationStyle != null);
+ const toCSS = const <TextDecorationStyle, String>{
+ TextDecorationStyle.solid: 'solid',
+ TextDecorationStyle.double: 'double',
+ TextDecorationStyle.dotted: 'dotted',
+ TextDecorationStyle.dashed: 'dashed',
+ TextDecorationStyle.wavy: 'wavy'
+ };
+ return toCSS[decorationStyle];
}
void applyToCSSStyle(CSSStyleDeclaration cssStyle) {
if (color != null) {
- cssStyle['color'] = 'rgba(${color.red}, ${color.green}, ${color.blue}, ${color.alpha / 255.0})';
+ cssStyle['color'] = _colorToCSSString(color);
}
- // TODO(hansmuller): escape the fontFamily string.
if (fontFamily != null) {
- cssStyle['font-family'] = fontFamily;
+ cssStyle['font-family'] = _fontFamilyToCSSString(fontFamily);
}
if (fontSize != null) {
cssStyle['font-size'] = "${fontSize}px";
@@ -164,9 +156,40 @@ class TextStyle {
}[textAlign];
}
if (decoration != null) {
- cssStyle['text-decoration'] = _decorationToString();
+ cssStyle['text-decoration'] = _decorationToCSSString(decoration);
+ if (decorationColor != null)
+ cssStyle['text-decoration-color'] = _colorToCSSString(decorationColor);
+ if (decorationStyle != null)
+ cssStyle['text-decoration-style'] = _decorationStyleToCSSString(decorationStyle);
}
- // TODO(hansmuller): add support for decoration color and style.
+ }
+
+ bool operator ==(other) {
+ if (identical(this, other))
+ return true;
+ return other is TextStyle &&
+ color == other.color &&
+ fontFamily == other.fontFamily &&
+ fontSize == other.fontSize &&
+ fontWeight == other.fontWeight &&
+ textAlign == other.textAlign &&
+ decoration == other.decoration &&
+ decorationColor == other.decorationColor &&
+ decorationStyle == other.decorationStyle;
+ }
+
+ int get hashCode {
+ // Use Quiver: https://github.com/domokit/mojo/issues/236
+ int value = 373;
+ value = 37 * value + color.hashCode;
+ value = 37 * value + fontFamily.hashCode;
+ value = 37 * value + fontSize.hashCode;
+ value = 37 * value + fontWeight.hashCode;
+ value = 37 * value + textAlign.hashCode;
+ value = 37 * value + decoration.hashCode;
+ value = 37 * value + decorationColor.hashCode;
+ value = 37 * value + decorationStyle.hashCode;
+ return value;
}
String toString([String prefix = '']) {
@@ -183,7 +206,7 @@ class TextStyle {
if (textAlign != null)
result.add('${prefix}textAlign: $textAlign');
if (decoration != null)
- result.add('${prefix}decoration: ${_decorationToString()}');
+ result.add('${prefix}decoration: $decoration');
if (decorationColor != null)
result.add('${prefix}decorationColor: $decorationColor');
if (decorationStyle != null)
« sky/engine/core/rendering/InlineTextBox.cpp ('K') | « sky/examples/widgets/styled_text.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698