mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
feat: add font icons to image actionbar and tab navigation (#7498)
This commit is contained in:
committed by
Manol Donev
parent
aa1c160465
commit
d8262a624e
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user