1
- import { ILaya } from "../../ILaya" ;
2
- import { LayaEnv } from "../../LayaEnv" ;
3
- import { IResourceLoader , ILoadTask , Loader } from "../net/Loader" ;
4
- import { URL } from "../net/URL" ;
5
- import { Browser } from "../utils/Browser" ;
6
- import { Utils } from "../utils/Utils" ;
7
-
8
- const testString = "LayaTTFFont" ;
9
-
1
+ import { ILoadTask , IResourceLoader , Loader } from "../net/Loader" ;
10
2
class TTFFontLoader implements IResourceLoader {
11
3
12
4
load ( task : ILoadTask ) {
13
- let fontName = Utils . replaceFileExtension ( Utils . getBaseName ( task . url ) , "" ) ;
14
- if ( LayaEnv . isConch ) {
15
- return task . loader . fetch ( task . url , "arraybuffer" ) . then ( data => {
16
- if ( data )
17
- ( window as any ) [ "conch" ] . registerFont ( fontName , data ) ;
18
- return { family : fontName } ;
19
- } ) ;
20
- }
21
- else if ( ( window as any ) . FontFace ) {
22
- let fontFace : any = new ( window as any ) . FontFace ( fontName , "url('" + URL . postFormatURL ( URL . formatURL ( task . url ) ) + "')" ) ;
23
- ( document as any ) . fonts . add ( fontFace ) ;
24
- return fontFace . load ( ) . then ( ( ) => {
25
- return fontFace ;
26
- } ) ;
27
- }
28
- else {
29
- let fontTxt = "40px " + fontName ;
30
- let txtWidth = Browser . measureText ( testString , fontTxt ) . width ;
31
-
32
- let fontStyle : any = Browser . createElement ( "style" ) ;
33
- fontStyle . type = "text/css" ;
34
- document . body . appendChild ( fontStyle ) ;
35
- fontStyle . textContent = "@font-face { font-family:'" + fontName + "'; src:url('" + URL . postFormatURL ( URL . formatURL ( task . url ) ) + "');}" ;
36
-
37
- return new Promise ( ( resolve ) => {
38
- let checkComplete = ( ) => {
39
- if ( Browser . measureText ( testString , fontTxt ) . width != txtWidth )
40
- complete ( ) ;
41
- } ;
42
- let complete = ( ) => {
43
- ILaya . systemTimer . clear ( this , checkComplete ) ;
44
- ILaya . systemTimer . clear ( this , complete ) ;
45
-
46
- resolve ( { family : fontName } ) ;
47
- } ;
48
-
49
- ILaya . systemTimer . once ( 10000 , this , complete ) ;
50
- ILaya . systemTimer . loop ( 20 , this , checkComplete ) ;
51
- } ) ;
52
- }
5
+ return task . loader . fetch ( task . url , "font" , task . progress . createCallback ( ) , task . options ) ;
53
6
}
54
7
}
55
8
56
- Loader . registerLoader ( [ "ttf" , "woff" , "woff2" , "otf" ] , TTFFontLoader , Loader . TTF ) ;
9
+ Loader . registerLoader ( [ "ttf" , "woff" , "woff2" , "otf" ] , TTFFontLoader , Loader . TTF ) ;
0 commit comments