From 87f7b9a294bb4b9d3d97d2261ea6b6945e6d2108 Mon Sep 17 00:00:00 2001 From: Nedyalko Nikolov Date: Wed, 28 Oct 2015 17:50:22 +0200 Subject: [PATCH] Added font related properties for SegmentedBar. --- ui/styling/stylers.android.ts | 48 ++++++++++++++++++++++++ ui/styling/stylers.ios.ts | 69 +++++++++++++++++++++++++++++++++-- 2 files changed, 113 insertions(+), 4 deletions(-) diff --git a/ui/styling/stylers.android.ts b/ui/styling/stylers.android.ts index 5dca5419b..7568f0847 100644 --- a/ui/styling/stylers.android.ts +++ b/ui/styling/stylers.android.ts @@ -497,11 +497,59 @@ export class SegmentedBarStyler implements definition.stylers.Styler { return textView.getCurrentTextColor(); } + //Font methods + private static setFontInternalProperty(view: view.View, newValue: any, nativeValue: any) { + let tabHost = view._nativeView; + let fontValue = newValue; + + for (let tabIndex = 0; tabIndex < tabHost.getTabWidget().getTabCount(); tabIndex++) { + let tab = tabHost.getTabWidget().getChildTabViewAt(tabIndex); + let t = tab.getChildAt(1); + let typeface = fontValue.getAndroidTypeface(); + if (typeface) { + t.setTypeface(typeface); + } + else { + t.setTypeface(nativeValue.typeface); + } + + if (fontValue.fontSize) { + t.setTextSize(fontValue.fontSize); + } + else { + t.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size); + } + } + } + + private static resetFontInternalProperty(view: view.View, nativeValue: any) { + let tabHost = view._nativeView; + for (let tabIndex = 0; tabIndex < tabHost.getTabWidget().getTabCount(); tabIndex++) { + let tab = tabHost.getTabWidget().getChildTabViewAt(tabIndex); + let t = tab.getChildAt(1); + t.setTypeface(nativeValue.typeface); + t.setTextSize(nativeValue.size); + } + } + + private static getFontInternalProperty(view: view.View): any { + let tabHost = view._nativeView; + var textView = new android.widget.TextView(tabHost.getContext()); + return { + typeface: textView.getTypeface(), + size: textView.getTextSize() + }; + } + public static registerHandlers() { style.registerHandler(style.colorProperty, new stylersCommon.StylePropertyChangedHandler( SegmentedBarStyler.setColorProperty, SegmentedBarStyler.resetColorProperty, SegmentedBarStyler.getColorProperty), "SegmentedBar"); + style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler( + SegmentedBarStyler.setFontInternalProperty, + SegmentedBarStyler.resetFontInternalProperty, + SegmentedBarStyler.getFontInternalProperty), "SegmentedBar"); } } diff --git a/ui/styling/stylers.ios.ts b/ui/styling/stylers.ios.ts index 45f39dbe9..ec4d24df2 100644 --- a/ui/styling/stylers.ios.ts +++ b/ui/styling/stylers.ios.ts @@ -374,23 +374,84 @@ export class TextViewStyler implements definition.stylers.Styler { export class SegmentedBarStyler implements definition.stylers.Styler { //Text color methods private static setColorProperty(view: view.View, newValue: any) { - var bar = view.ios; - var attrs = NSMutableDictionary.new(); + let bar = view.ios; + let currentAttrs = bar.titleTextAttributesForState(UIControlState.UIControlStateNormal); + let attrs; + if (currentAttrs) { + attrs = currentAttrs.mutableCopy(); + } + else { + attrs = NSMutableDictionary.new(); + } attrs.setValueForKey(newValue, NSForegroundColorAttributeName); bar.setTitleTextAttributesForState(attrs, UIControlState.UIControlStateNormal); } private static resetColorProperty(view: view.View, nativeValue: any) { - var bar = view.ios; - var attrs = NSMutableDictionary.new(); + let bar = view.ios; + let currentAttrs = bar.titleTextAttributesForState(UIControlState.UIControlStateNormal); + let attrs; + if (currentAttrs) { + attrs = currentAttrs.mutableCopy(); + } + else { + attrs = NSMutableDictionary.new(); + } attrs.setValueForKey(nativeValue, NSForegroundColorAttributeName); bar.setTitleTextAttributesForState(attrs, UIControlState.UIControlStateNormal); } + //Text fonts methods + private static setFontInternalProperty(view: view.View, newValue: any) { + let bar = view.ios; + let currentAttrs = bar.titleTextAttributesForState(UIControlState.UIControlStateNormal); + let attrs; + if (currentAttrs) { + attrs = currentAttrs.mutableCopy(); + } + else { + attrs = NSMutableDictionary.new(); + } + let newFont = (newValue).getUIFont(UIFont.systemFontOfSize(UIFont.labelFontSize())); + attrs.setValueForKey(newFont, NSFontAttributeName); + bar.setTitleTextAttributesForState(attrs, UIControlState.UIControlStateNormal); + } + + private static resetFontInternalProperty(view: view.View, nativeValue: any) { + let bar = view.ios; + let currentAttrs = bar.titleTextAttributesForState(UIControlState.UIControlStateNormal); + let attrs; + if (currentAttrs) { + attrs = currentAttrs.mutableCopy(); + } + else { + attrs = NSMutableDictionary.new(); + } + attrs.setValueForKey(nativeValue, NSFontAttributeName); + bar.setTitleTextAttributesForState(attrs, UIControlState.UIControlStateNormal); + } + + private static getNativeFontValue(view: view.View) { + let bar = view.ios; + let currentAttrs = bar.titleTextAttributesForState(UIControlState.UIControlStateNormal); + let currentFont; + if (currentAttrs) { + currentFont = currentAttrs.objectForKey(NSFontAttributeName); + } + if (!currentFont) { + currentFont = UIFont.systemFontOfSize(UIFont.labelFontSize()); + } + return currentFont; + } + public static registerHandlers() { style.registerHandler(style.colorProperty, new stylersCommon.StylePropertyChangedHandler( SegmentedBarStyler.setColorProperty, SegmentedBarStyler.resetColorProperty), "SegmentedBar"); + style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler( + SegmentedBarStyler.setFontInternalProperty, + SegmentedBarStyler.resetFontInternalProperty, + SegmentedBarStyler.getNativeFontValue), "SegmentedBar"); } }