Files
NativeScript/ui/text-base/text-base-styler.android.ts
2016-01-11 11:24:07 +02:00

170 lines
7.0 KiB
TypeScript

import view = require("ui/core/view");
import utils = require("utils/utils");
import types = require("utils/types");
import style = require("ui/styling/style");
import font = require("ui/styling/font");
import styling = require("ui/styling");
import enums = require("ui/enums");
export class TextBaseStyler implements style.Styler {
// color
private static setColorProperty(view: view.View, newValue: any) {
(<android.widget.TextView>view._nativeView).setTextColor(newValue);
}
private static resetColorProperty(view: view.View, nativeValue: any) {
(<android.widget.TextView>view._nativeView).setTextColor(nativeValue);
}
private static getNativeColorValue(view: view.View): any {
return (<android.widget.TextView>view._nativeView).getTextColors().getDefaultColor();
}
// font
private static setFontInternalProperty(view: view.View, newValue: any, nativeValue?: any) {
var tv = <android.widget.TextView>view._nativeView;
var fontValue = <font.Font>newValue;
var typeface = fontValue.getAndroidTypeface();
if (typeface) {
tv.setTypeface(typeface);
}
else {
tv.setTypeface(nativeValue.typeface);
}
if (fontValue.fontSize) {
tv.setTextSize(fontValue.fontSize);
}
else {
tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
}
}
private static resetFontInternalProperty(view: view.View, nativeValue: any) {
var tv: android.widget.TextView = <android.widget.TextView>view._nativeView;
if (tv && nativeValue) {
tv.setTypeface(nativeValue.typeface);
tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
}
}
private static getNativeFontInternalValue(view: view.View): any {
var tv: android.widget.TextView = <android.widget.TextView>view._nativeView;
return {
typeface: tv.getTypeface(),
size: tv.getTextSize()
};
}
// text-align
private static setTextAlignmentProperty(view: view.View, newValue: any) {
var verticalGravity = view._nativeView.getGravity() & android.view.Gravity.VERTICAL_GRAVITY_MASK;
switch (newValue) {
case enums.TextAlignment.left:
view._nativeView.setGravity(android.view.Gravity.LEFT | verticalGravity);
break;
case enums.TextAlignment.center:
view._nativeView.setGravity(android.view.Gravity.CENTER_HORIZONTAL | verticalGravity);
break;
case enums.TextAlignment.right:
view._nativeView.setGravity(android.view.Gravity.RIGHT | verticalGravity);
break;
default:
break;
}
}
private static resetTextAlignmentProperty(view: view.View, nativeValue: any) {
view._nativeView.setGravity(nativeValue);
}
private static getNativeTextAlignmentValue(view: view.View): any {
return view._nativeView.getGravity();
}
// text-decoration
private static setTextDecorationProperty(view: view.View, newValue: any) {
utils.ad.setTextDecoration(view._nativeView, newValue);
}
private static resetTextDecorationProperty(view: view.View, nativeValue: any) {
utils.ad.setTextDecoration(view._nativeView, enums.TextDecoration.none);
}
// text-transform
private static setTextTransformProperty(view: view.View, newValue: any) {
utils.ad.setTextTransform(view, newValue);
}
private static resetTextTransformProperty(view: view.View, nativeValue: any) {
utils.ad.setTextTransform(view, enums.TextTransform.none);
}
// white-space
private static setWhiteSpaceProperty(view: view.View, newValue: any) {
utils.ad.setWhiteSpace(view._nativeView, newValue);
}
private static resetWhiteSpaceProperty(view: view.View, nativeValue: any) {
utils.ad.setWhiteSpace(view._nativeView, enums.WhiteSpace.normal);
}
public static registerHandlers() {
style.registerHandler(style.colorProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setColorProperty,
TextBaseStyler.resetColorProperty,
TextBaseStyler.getNativeColorValue), "TextBase");
style.registerHandler(style.fontInternalProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setFontInternalProperty,
TextBaseStyler.resetFontInternalProperty,
TextBaseStyler.getNativeFontInternalValue), "TextBase");
style.registerHandler(style.textAlignmentProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextAlignmentProperty,
TextBaseStyler.resetTextAlignmentProperty,
TextBaseStyler.getNativeTextAlignmentValue), "TextBase");
style.registerHandler(style.textDecorationProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextDecorationProperty,
TextBaseStyler.resetTextDecorationProperty), "TextBase");
style.registerHandler(style.textTransformProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextTransformProperty,
TextBaseStyler.resetTextTransformProperty), "TextBase");
style.registerHandler(style.whiteSpaceProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setWhiteSpaceProperty,
TextBaseStyler.resetWhiteSpaceProperty), "TextBase");
// Register the same stylers for Button.
// It also derives from TextView but is not under TextBase in our View hierarchy.
style.registerHandler(style.colorProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setColorProperty,
TextBaseStyler.resetColorProperty,
TextBaseStyler.getNativeColorValue), "Button");
style.registerHandler(style.fontInternalProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setFontInternalProperty,
TextBaseStyler.resetFontInternalProperty,
TextBaseStyler.getNativeFontInternalValue), "Button");
style.registerHandler(style.textAlignmentProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextAlignmentProperty,
TextBaseStyler.resetTextAlignmentProperty,
TextBaseStyler.getNativeTextAlignmentValue), "Button");
style.registerHandler(style.textDecorationProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextDecorationProperty,
TextBaseStyler.resetTextDecorationProperty), "Button");
style.registerHandler(style.textTransformProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setTextTransformProperty,
TextBaseStyler.resetTextTransformProperty), "Button");
style.registerHandler(style.whiteSpaceProperty, new style.StylePropertyChangedHandler(
TextBaseStyler.setWhiteSpaceProperty,
TextBaseStyler.resetWhiteSpaceProperty), "Button");
}
}