feat: add font icons to image actionbar and tab navigation (#7498)

This commit is contained in:
Martin Yankov
2019-07-10 21:05:45 +03:00
committed by Manol Donev
parent aa1c160465
commit d8262a624e
29 changed files with 416 additions and 36 deletions

View File

@@ -11,8 +11,8 @@ import { Font } from "../styling/font";
import { getTransformedText } from "../text-base";
import { Frame } from "../frame";
import { Color } from "../core/view";
import { fromFileOrResource } from "../../image-source";
import { RESOURCE_PREFIX, ad, layout } from "../../utils/utils";
import { fromFileOrResource, fromFontIconCode, ImageSource } from "../../image-source";
import { RESOURCE_PREFIX, ad, layout, isFontIconURI } from "../../utils/utils";
import * as application from "../../application";
export * from "./tabs-common";
@@ -304,7 +304,16 @@ function createTabItemSpec(item: TabStripItem): org.nativescript.widgets.TabItem
// traceMissingIcon(iconSource);
}
} else {
const is = fromFileOrResource(iconSource);
let is = new ImageSource();
if (isFontIconURI(item.iconSource)) {
const fontIconCode = item.iconSource.split("//")[1];
const font = item.style.fontInternal;
const color = item.style.color;
is = fromFontIconCode(fontIconCode, font, color);
} else {
is = fromFileOrResource(item.iconSource);
}
if (is) {
// TODO: Make this native call that accepts string so that we don't load Bitmap in JS.
tabItemSpec.iconDrawable = new android.graphics.drawable.BitmapDrawable(application.android.context.getResources(), is.android);

View File

@@ -11,9 +11,9 @@ import { Font } from "../styling/font";
import { Frame } from "../frame";
import { ios as iosView, View } from "../core/view";
import { Color } from "../../color";
import { /*ios as iosUtils,*/ layout } from "../../utils/utils";
import { /*ios as iosUtils,*/ layout, isFontIconURI } from "../../utils/utils";
// import { device } from "../../platform";
import { fromFileOrResource } from "../../image-source";
import { fromFileOrResource, fromFontIconCode, ImageSource } from "../../image-source";
// TODO
// import { profile } from "../../profiling";
@@ -883,9 +883,7 @@ export class Tabs extends TabsBase {
let image: UIImage;
let title: string;
// Image and Label children of TabStripItem
// take priority over its `iconSource` and `title` properties
image = item.image ? this._getIcon(item.image.src) : this._getIcon(item.iconSource);
image = this._getIcon(item);
title = item.label ? item.label.text : item.title;
if (!this.tabStrip._hasImage) {
@@ -918,14 +916,26 @@ export class Tabs extends TabsBase {
return UIImageRenderingMode.AlwaysOriginal;
}
public _getIcon(iconSource: string): UIImage {
public _getIcon(tabStripItem: TabStripItem): UIImage {
// Image and Label children of TabStripItem
// take priority over its `iconSource` and `title` properties
const iconSource = tabStripItem.image ? tabStripItem.image.src : tabStripItem.iconSource;
if (!iconSource) {
return null;
}
let image: UIImage = this._iconsCache[iconSource];
if (!image) {
const is = fromFileOrResource(iconSource);
let is = new ImageSource;
if (isFontIconURI(iconSource)) {
const fontIconCode = iconSource.split("//")[1];
const font = tabStripItem.style.fontInternal;
const color = tabStripItem.style.color;
is = fromFontIconCode(fontIconCode, font, color);
} else {
is = fromFileOrResource(iconSource);
}
if (is && is.ios) {
const originalRenderedImage = is.ios.imageWithRenderingMode(this._getIconRenderingMode());
this._iconsCache[iconSource] = originalRenderedImage;