multiple text-decoration values support added

This commit is contained in:
Vladimir Enchev
2015-11-06 15:04:47 +02:00
parent 7796c24967
commit a651db8501
5 changed files with 72 additions and 35 deletions

View File

@ -0,0 +1,29 @@
<Page>
<ScrollView>
<StackLayout>
<Label text="Label" style="text-decoration:none" />
<Label text="Label" style="text-decoration:underline" />
<Label text="Label" style="text-decoration:line-through" />
<Label text="Label" style="text-decoration:line-through underline" />
<Label text="Label" style="text-decoration:line-through underline none" />
<TextField text="TextField" style="text-decoration:none" />
<TextField text="TextField" style="text-decoration:underline" />
<TextField text="TextField" style="text-decoration:line-through" />
<TextField text="TextField" style="text-decoration:underline line-through" />
<TextField text="TextField" style="text-decoration:underline line-through none" />
<TextView text="TextView" style="text-decoration:none" />
<TextView text="TextView" style="text-decoration:underline" />
<TextView text="TextView" style="text-decoration:line-through" />
<TextView text="TextView" style="text-decoration:line-through underline" />
<TextView text="TextView" style="text-decoration:line-through underline none" />
<Button text="Button" style="text-decoration:none" />
<Button text="Button" style="text-decoration:underline" />
<Button text="Button" style="text-decoration:line-through" />
<Button text="Button" style="text-decoration:underline line-through" />
<Button text="Button" style="text-decoration:underline line-through none" />
</StackLayout>
</ScrollView>
</Page>

View File

@ -23,12 +23,11 @@ export function textAlignConverter(value: string): string {
} }
export function textDecorationConverter(value: string): string { export function textDecorationConverter(value: string): string {
switch (value) { var values = (value + "").split(" ");
case enums.TextDecoration.none:
case enums.TextDecoration.underline: if (values.indexOf(enums.TextDecoration.underline) !== -1 || values.indexOf(enums.TextDecoration.lineThrough) !== -1) {
case enums.TextDecoration.lineThrough:
return value; return value;
default: } else {
throw new Error("CSS text-decoration \"" + value + "\" is not supported."); throw new Error("CSS text-decoration \"" + value + "\" is not supported.");
} }
} }

View File

@ -240,7 +240,9 @@ function isVisibilityValid(value: string): boolean {
} }
function isTextDecorationValid(value: string): boolean { function isTextDecorationValid(value: string): boolean {
return value === enums.TextDecoration.none || value === enums.TextDecoration.underline || value === enums.TextDecoration.lineThrough; var values = (value + "").split(" ");
return values.indexOf(enums.TextDecoration.none) !== -1 || values.indexOf(enums.TextDecoration.underline) !== -1 || values.indexOf(enums.TextDecoration.lineThrough) !== -1;
} }
function onVisibilityChanged(data: PropertyChangeData) { function onVisibilityChanged(data: PropertyChangeData) {

View File

@ -469,18 +469,22 @@ export class TextViewStyler implements definition.stylers.Styler {
} }
function setTextDecoration(view: android.widget.TextView, value: string) { function setTextDecoration(view: android.widget.TextView, value: string) {
switch (value) { var flags = view.getPaintFlags();
case enums.TextDecoration.none:
view.setPaintFlags(view.getPaintFlags()); var values = (value + "").split(" ");
break;
case enums.TextDecoration.underline: if (values.indexOf(enums.TextDecoration.underline) !== -1) {
view.setPaintFlags(view.getPaintFlags() | android.graphics.Paint.UNDERLINE_TEXT_FLAG); flags = flags | android.graphics.Paint.UNDERLINE_TEXT_FLAG;
break; }
case enums.TextDecoration.lineThrough:
view.setPaintFlags(view.getPaintFlags() | android.graphics.Paint.STRIKE_THRU_TEXT_FLAG); if (values.indexOf(enums.TextDecoration.lineThrough) !== -1) {
break; flags = flags | android.graphics.Paint.STRIKE_THRU_TEXT_FLAG;
default: }
break;
if (values.indexOf(enums.TextDecoration.none) === -1) {
view.setPaintFlags(flags);
} else {
view.setPaintFlags(0);
} }
} }

View File

@ -910,29 +910,32 @@ function setTextAlignment(view: TextUIView, value: string) {
} }
function setTextDecoration(view: TextUIView, value: string) { function setTextDecoration(view: TextUIView, value: string) {
switch (value) { var attributes: NSMutableDictionary = NSMutableDictionary.alloc().init();
case enums.TextDecoration.none: var values = (value + "").split(" ");
view.text = view.attributedText ? view.attributedText.string : view.text;
break; if (values.indexOf(enums.TextDecoration.underline) !== -1) {
case enums.TextDecoration.underline: attributes.setObjectForKey(NSUnderlineStyle.NSUnderlineStyleSingle, NSUnderlineStyleAttributeName);
setTextDecorationNative(view, view.text || view.attributedText, NSUnderlineStyleAttributeName); }
break;
case enums.TextDecoration.lineThrough: if (values.indexOf(enums.TextDecoration.lineThrough) !== -1) {
setTextDecorationNative(view, view.text || view.attributedText, NSStrikethroughStyleAttributeName); attributes.setObjectForKey(NSUnderlineStyle.NSUnderlineStyleSingle, NSStrikethroughStyleAttributeName);
break; }
default:
break; if (values.indexOf(enums.TextDecoration.none) === -1) {
setTextDecorationNative(view, view.text || view.attributedText, attributes);
} else {
setTextDecorationNative(view, view.text || view.attributedText, NSMutableDictionary.alloc().init());
} }
} }
function setTextDecorationNative(view: TextUIView, value: string | NSAttributedString, attribute: string) { function setTextDecorationNative(view: TextUIView, value: string | NSAttributedString, attributes: NSMutableDictionary) {
var attributedString: NSMutableAttributedString; var attributedString: NSMutableAttributedString;
if (value instanceof NSAttributedString) { if (value instanceof NSAttributedString) {
attributedString = NSMutableAttributedString.alloc().initWithAttributedString(value); attributedString = NSMutableAttributedString.alloc().initWithAttributedString(value);
attributedString.addAttributesRange(<any>{ [attribute]: NSUnderlineStyle.NSUnderlineStyleSingle }, NSRangeFromString(attributedString.string)); attributedString.addAttributesRange(attributes, NSRangeFromString(attributedString.string));
} else { } else {
view.attributedText = NSAttributedString.alloc().initWithStringAttributes(<string>value, <any>{ [attribute]: NSUnderlineStyle.NSUnderlineStyleSingle }); view.attributedText = NSAttributedString.alloc().initWithStringAttributes(<string>value, attributes);
} }
} }