60 super(fontResource, size, graphicsTransform, aaMode, desc);
61 float maxDim = PrismFontFactory.getFontSizeLimit();
62 if (graphicsTransform.isTranslateOrIdentity()) {
63 drawShapes = size > maxDim;
64 } else {
65 BaseTransform tx2d = getTransform();
66 matrix = new CGAffineTransform();
67 matrix.a = tx2d.getMxx();
68 matrix.b = -tx2d.getMyx(); /*Inverted coordinates system */
69 matrix.c = -tx2d.getMxy(); /*Inverted coordinates system */
70 matrix.d = tx2d.getMyy();
71
72 if (Math.abs(matrix.a * size) > maxDim ||
73 Math.abs(matrix.b * size) > maxDim ||
74 Math.abs(matrix.c * size) > maxDim ||
75 Math.abs(matrix.d * size) > maxDim)
76 {
77 drawShapes = true;
78 }
79 }
80 long psNameRef = OS.CFStringCreate(fontResource.getPSName());
81 if (psNameRef != 0) {
82 fontRef = OS.CTFontCreateWithName(psNameRef, size, matrix);
83 OS.CFRelease(psNameRef);
84 }
85 if (fontRef == 0) {
86 if (PrismFontFactory.debugFonts) {
87 System.err.println("Failed to create CTFont for " + this);
88 }
89 }
90 }
91
92 long getFontRef() {
93 return fontRef;
94 }
95
96 @Override protected DisposerRecord createDisposer(FontStrikeDesc desc) {
97 CTFontFile fontResource = getFontResource();
98 return new CTStrikeDisposer(fontResource, desc, fontRef);
99 }
100
101 @Override protected Glyph createGlyph(int glyphCode) {
102 return new CTGlyph(this, glyphCode, drawShapes);
|
60 super(fontResource, size, graphicsTransform, aaMode, desc);
61 float maxDim = PrismFontFactory.getFontSizeLimit();
62 if (graphicsTransform.isTranslateOrIdentity()) {
63 drawShapes = size > maxDim;
64 } else {
65 BaseTransform tx2d = getTransform();
66 matrix = new CGAffineTransform();
67 matrix.a = tx2d.getMxx();
68 matrix.b = -tx2d.getMyx(); /*Inverted coordinates system */
69 matrix.c = -tx2d.getMxy(); /*Inverted coordinates system */
70 matrix.d = tx2d.getMyy();
71
72 if (Math.abs(matrix.a * size) > maxDim ||
73 Math.abs(matrix.b * size) > maxDim ||
74 Math.abs(matrix.c * size) > maxDim ||
75 Math.abs(matrix.d * size) > maxDim)
76 {
77 drawShapes = true;
78 }
79 }
80
81 long psNameRef = OS.CFStringCreate(fontResource.getPSName());
82 if (psNameRef != 0) {
83 long fileNameRef = OS.CFStringCreate(fontResource.getFileName());
84 if (fileNameRef != 0) {
85 long url = OS.CFURLCreateWithFileSystemPath(
86 OS.kCFAllocatorDefault(),
87 fileNameRef, OS.kCFURLPOSIXPathStyle, false);
88 if (url != 0) {
89 long dataProvider = OS.CGDataProviderCreateWithURL(url);
90 if (dataProvider != 0) {
91 long cgFont = OS.CGFontCreateWithDataProvider(
92 dataProvider);
93 if (cgFont != 0) {
94 fontRef = OS.CTFontCreateWithGraphicsFont(
95 cgFont, size, matrix, 0);
96 OS.CFRelease(cgFont);
97 }
98 OS.CFRelease(dataProvider);
99 }
100 OS.CFRelease(url);
101 }
102 OS.CFRelease(fileNameRef);
103 }
104 if (fontRef == 0) {
105 fontRef = OS.CTFontCreateWithName(psNameRef, size, matrix);
106 }
107 OS.CFRelease(psNameRef);
108 }
109 if (fontRef == 0) {
110 if (PrismFontFactory.debugFonts) {
111 System.err.println("Failed to create CTFont for " + this);
112 }
113 }
114 }
115
116 long getFontRef() {
117 return fontRef;
118 }
119
120 @Override protected DisposerRecord createDisposer(FontStrikeDesc desc) {
121 CTFontFile fontResource = getFontResource();
122 return new CTStrikeDisposer(fontResource, desc, fontRef);
123 }
124
125 @Override protected Glyph createGlyph(int glyphCode) {
126 return new CTGlyph(this, glyphCode, drawShapes);
|