tns-core-modules
Version:
Telerik NativeScript Core Modules
102 lines (101 loc) • 4.87 kB
JavaScript
var spanCommon = require("./span-common");
var enums = require("ui/enums");
var utils = require("utils/utils");
var fontModule = require("ui/styling/font");
global.moduleMerge(spanCommon, exports);
var CustomTypefaceSpanClass;
function ensureCustomTypefaceSpanClass() {
if (CustomTypefaceSpanClass) {
return;
}
var CustomTypefaceSpan = (function (_super) {
__extends(CustomTypefaceSpan, _super);
function CustomTypefaceSpan(family, typeface) {
_super.call(this, family);
this.typeface = typeface;
return global.__native(this);
}
CustomTypefaceSpan.prototype.updateDrawState = function (ds) {
CustomTypefaceSpan.applyCustomTypeFace(ds, this.typeface);
};
CustomTypefaceSpan.prototype.updateMeasureState = function (paint) {
CustomTypefaceSpan.applyCustomTypeFace(paint, this.typeface);
};
CustomTypefaceSpan.applyCustomTypeFace = function (paint, tf) {
var oldStyle;
var old = paint.getTypeface();
if (old === null) {
oldStyle = 0;
}
else {
oldStyle = old.getStyle();
}
var fake = oldStyle & ~tf.getStyle();
if ((fake & android.graphics.Typeface.BOLD) !== 0) {
paint.setFakeBoldText(true);
}
if ((fake & android.graphics.Typeface.ITALIC) !== 0) {
paint.setTextSkewX(-0.25);
}
paint.setTypeface(tf);
};
return CustomTypefaceSpan;
}(android.text.style.TypefaceSpan));
CustomTypefaceSpanClass = CustomTypefaceSpan;
}
var Span = (function (_super) {
__extends(Span, _super);
function Span() {
_super.apply(this, arguments);
}
Span.prototype.updateSpanModifiers = function (parent) {
_super.prototype.updateSpanModifiers.call(this, parent);
var realFontFamily = this.fontFamily || (parent ? parent.fontFamily : undefined);
if (realFontFamily) {
var font = new fontModule.Font(realFontFamily, 0, (realFontAttributes & enums.FontAttributes.Italic) ? enums.FontStyle.italic : enums.FontStyle.normal, (realFontAttributes & enums.FontAttributes.Bold) ? enums.FontWeight.bold : enums.FontWeight.normal);
ensureCustomTypefaceSpanClass();
var typefaceSpan = new CustomTypefaceSpanClass(realFontFamily, font.getAndroidTypeface());
this.spanModifiers.push(typefaceSpan);
}
var realFontSize = this.fontSize ||
(parent ? parent.fontSize : undefined) ||
(parent && parent.parent ? parent.parent.style.fontSize : undefined);
if (realFontSize) {
this.spanModifiers.push(new android.text.style.AbsoluteSizeSpan(realFontSize * utils.layout.getDisplayDensity()));
}
var realForegroundColor = this.foregroundColor ||
(parent ? parent.foregroundColor : undefined) ||
(parent && parent.parent ? parent.parent.style.color : undefined);
if (realForegroundColor) {
this.spanModifiers.push(new android.text.style.ForegroundColorSpan(realForegroundColor.android));
}
var realBackgroundColor = this.backgroundColor ||
(parent ? parent.backgroundColor : undefined) ||
(parent && parent.parent ? parent.parent.style.backgroundColor : undefined);
if (realBackgroundColor) {
this.spanModifiers.push(new android.text.style.BackgroundColorSpan(realBackgroundColor.android));
}
var realFontAttributes = this.fontAttributes || (parent ? parent.fontAttributes : undefined);
if (realFontAttributes) {
if ((realFontAttributes & enums.FontAttributes.Bold) && (realFontAttributes & enums.FontAttributes.Italic)) {
this.spanModifiers.push(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC));
}
else if (realFontAttributes & enums.FontAttributes.Bold) {
this.spanModifiers.push(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD));
}
else if (realFontAttributes & enums.FontAttributes.Italic) {
this.spanModifiers.push(new android.text.style.StyleSpan(android.graphics.Typeface.ITALIC));
}
}
var realUnderline = this.underline || (parent ? parent.underline : undefined);
if (realUnderline) {
this.spanModifiers.push(new android.text.style.UnderlineSpan());
}
var realStrikethrough = this.strikethrough || (parent ? parent.strikethrough : undefined);
if (realStrikethrough) {
this.spanModifiers.push(new android.text.style.StrikethroughSpan());
}
};
return Span;
}(spanCommon.Span));
exports.Span = Span;