Skip to content

Commit 3650a6f

Browse files
author
Vladimir Enchev
committed
font-family implemented
1 parent 06c164c commit 3650a6f

File tree

7 files changed

+133
-9
lines changed

7 files changed

+133
-9
lines changed

apps/ui-tests-app/font/tab-view.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<Page xmlns="http://schemas.nativescript.org/tns.xsd">
2+
<TabView style="font-family: FontAwesome;color: red;" selectedColor="green">
3+
<TabView.items>
4+
<TabViewItem ios:title="Tab 1 &#xf179;" android:title="Tab 1 &#xf17b;">
5+
<TabViewItem.view>
6+
<Label text="Tab 1" />
7+
</TabViewItem.view>
8+
</TabViewItem>
9+
<TabViewItem ios:title="Tab 2 &#xf179;" android:title="Tab 2 &#xf17b;">
10+
<TabViewItem.view>
11+
<Label text="Tab 2" />
12+
</TabViewItem.view>
13+
</TabViewItem>
14+
</TabView.items>
15+
</TabView>
16+
</Page>

ui/styling/style.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,13 @@ export class Style extends DependencyObservable implements styling.Style {
417417
this._setShorthandProperty("font", value);
418418
}
419419

420+
get _fontInternal(): font.Font {
421+
return this._getValue(fontInternalProperty);
422+
}
423+
set _fontInternal(value: font.Font) {
424+
this._setValue(fontInternalProperty, value);
425+
}
426+
420427
get textAlignment(): string {
421428
return this._getValue(textAlignmentProperty);
422429
}

ui/styling/stylers.android.ts

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ function setTextDecoration(view: android.widget.TextView, value: string) {
533533
view.setPaintFlags(flags);
534534
} else {
535535
view.setPaintFlags(0);
536-
}
536+
}
537537
}
538538

539539
function setTextTransform(view: android.widget.TextView, value: string) {
@@ -1016,11 +1016,72 @@ export class TabViewStyler implements definition.stylers.Styler {
10161016
}
10171017
}
10181018

1019+
// font
1020+
private static setFontInternalProperty(view: view.View, newValue: any, nativeValue: any) {
1021+
var tab = <tabView.TabView>view;
1022+
var fontValue = <font.Font>newValue;
1023+
var typeface = fontValue.getAndroidTypeface();
1024+
1025+
if (tab.items && tab.items.length > 0) {
1026+
var tabLayout = tab._getAndroidTabView();
1027+
1028+
for (var i = 0; i < tab.items.length; i++) {
1029+
let tv = tabLayout.getTextViewForItemAt(i);
1030+
if (typeface) {
1031+
tv.setTypeface(typeface);
1032+
}
1033+
else {
1034+
tv.setTypeface(nativeValue.typeface);
1035+
}
1036+
1037+
if (fontValue.fontSize) {
1038+
tv.setTextSize(fontValue.fontSize);
1039+
}
1040+
else {
1041+
tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
1042+
}
1043+
}
1044+
}
1045+
}
1046+
1047+
private static resetFontInternalProperty(view: view.View, nativeValue: any) {
1048+
var tab = <tabView.TabView>view;
1049+
1050+
if (tab.items && tab.items.length > 0) {
1051+
var tabLayout = tab._getAndroidTabView();
1052+
1053+
for (var i = 0; i < tab.items.length; i++) {
1054+
let tv = tabLayout.getTextViewForItemAt(i);
1055+
tv.setTypeface(nativeValue.typeface);
1056+
tv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, nativeValue.size);
1057+
}
1058+
}
1059+
}
1060+
1061+
private static getNativeFontInternalValue(view: view.View): any {
1062+
var tab = <tabView.TabView>view;
1063+
var tv: android.widget.TextView = tab._getAndroidTabView().getTextViewForItemAt(0);
1064+
if (tv) {
1065+
return {
1066+
typeface: tv.getTypeface(),
1067+
size: tv.getTextSize()
1068+
}
1069+
}
1070+
else {
1071+
return null;
1072+
}
1073+
}
1074+
10191075
public static registerHandlers() {
10201076
style.registerHandler(style.colorProperty, new stylersCommon.StylePropertyChangedHandler(
10211077
TabViewStyler.setColorProperty,
10221078
TabViewStyler.resetColorProperty,
10231079
TabViewStyler.getColorProperty), "TabView");
1080+
1081+
style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler(
1082+
TabViewStyler.setFontInternalProperty,
1083+
TabViewStyler.resetFontInternalProperty,
1084+
TabViewStyler.getNativeFontInternalValue), "TabView");
10241085
}
10251086
}
10261087

ui/styling/stylers.ios.ts

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -921,18 +921,53 @@ export class TabViewStyler implements definition.stylers.Styler {
921921
// color
922922
private static setColorProperty(view: view.View, newValue: any) {
923923
var tab = <tabView.TabView>view;
924-
tab._updateIOSTabBarColors();
924+
tab._updateIOSTabBarColorsAndFonts();
925925
}
926926

927927
private static resetColorProperty(view: view.View, nativeValue: any) {
928928
var tab = <tabView.TabView>view;
929-
tab._updateIOSTabBarColors();
929+
tab._updateIOSTabBarColorsAndFonts();
930+
}
931+
932+
// font
933+
private static setFontInternalProperty(view: view.View, newValue: any, nativeValue: any) {
934+
var tab = <tabView.TabView>view;
935+
tab._updateIOSTabBarColorsAndFonts();
936+
}
937+
938+
private static resetFontInternalProperty(view: view.View, nativeValue: any) {
939+
var tab = <tabView.TabView>view;
940+
tab._updateIOSTabBarColorsAndFonts();
941+
}
942+
943+
private static getNativeFontValue(view: view.View) {
944+
var tab = <tabView.TabView>view;
945+
946+
let currentFont;
947+
948+
if (tab.ios && tab.ios.items && tab.ios.items.length > 0) {
949+
let currentAttrs = tab.ios.items[0].titleTextAttributesForState(UIControlState.UIControlStateNormal);
950+
if (currentAttrs) {
951+
currentFont = currentAttrs.objectForKey(NSFontAttributeName);
952+
}
953+
}
954+
955+
if (!currentFont) {
956+
currentFont = UIFont.systemFontOfSize(UIFont.labelFontSize());
957+
}
958+
959+
return currentFont;
930960
}
931961

932962
public static registerHandlers() {
933963
style.registerHandler(style.colorProperty, new stylersCommon.StylePropertyChangedHandler(
934964
TabViewStyler.setColorProperty,
935965
TabViewStyler.resetColorProperty), "TabView");
966+
967+
style.registerHandler(style.fontInternalProperty, new stylersCommon.StylePropertyChangedHandler(
968+
TabViewStyler.setFontInternalProperty,
969+
TabViewStyler.resetFontInternalProperty,
970+
TabViewStyler.getNativeFontValue), "TabView");
936971
}
937972
}
938973

ui/tab-view/tab-view-common.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ export class TabView extends view.View implements definition.TabView, view.AddAr
274274
return undefined;
275275
}
276276

277-
public _updateIOSTabBarColors(): void {
277+
public _updateIOSTabBarColorsAndFonts(): void {
278278
// iOS sepcific
279279
}
280280
}

ui/tab-view/tab-view.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ declare module "ui/tab-view" {
101101

102102
//@private
103103
_getAndroidTabView(): any /* org.nativescript.widgets.TabLayout */;
104-
_updateIOSTabBarColors(): void;
104+
_updateIOSTabBarColorsAndFonts(): void;
105105
//@endprivate
106106
}
107107
}

ui/tab-view/tab-view.ios.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export class TabViewItem extends common.TabViewItem {
101101

102102
function selectedColorPropertyChanged(data: dependencyObservable.PropertyChangeData) {
103103
var tabView = <TabView>data.object;
104-
tabView._updateIOSTabBarColors();
104+
tabView._updateIOSTabBarColorsAndFonts();
105105
}
106106
(<proxy.PropertyMetadata>common.TabView.selectedColorProperty.metadata).onSetNativeValue = selectedColorPropertyChanged;
107107

@@ -322,14 +322,14 @@ export class TabView extends common.TabView {
322322
(heightMode === utils.layout.UNSPECIFIED) ? Number.POSITIVE_INFINITY : height));
323323
}
324324

325-
public _updateIOSTabBarColors(): void {
325+
public _updateIOSTabBarColorsAndFonts(): void {
326326
if (!this.items) {
327327
return;
328328
}
329329

330330
var tabBar = this.ios.tabBar;
331331

332-
tabBar.tintColor = this.selectedColor ? this.selectedColor.ios : null;
332+
tabBar.tintColor = this.selectedColor ? this.selectedColor.ios : null;
333333
var states = getTitleAttributesForStates(this);
334334

335335
for (var i = 0; i < this.items.length; i++) {
@@ -354,8 +354,13 @@ function getTitleAttributesForStates(tabView: TabView): { normalState: any, sele
354354
selectedState[UITextAttributeTextColor] = tabView.ios.tabBar.tintColor;
355355
}
356356

357+
var defaultFont = UIFont.systemFontOfSize(UIFont.labelFontSize());
358+
var font = (<any>tabView.style)._fontInternal.getUIFont(defaultFont);
359+
normalState[NSFontAttributeName] = font;
360+
selectedState[NSFontAttributeName] = font;
361+
357362
return {
358363
normalState: normalState,
359364
selectedState: selectedState
360365
};
361-
}
366+
}

0 commit comments

Comments
 (0)