src/share/classes/sun/font/FileFont.java
Print this page
rev 1379 : [mq]: fontmanager.patch
*** 156,166 ****
* map they are held in via a boolean flag
* Since this isn't expected to be anything other than an extremely
* rare maybe it is not worth doing this last part.
*/
synchronized void deregisterFontAndClearStrikeCache() {
! FontManager.deRegisterBadFont(this);
for (Reference strikeRef : strikeCache.values()) {
if (strikeRef != null) {
/* NB we know these are all FileFontStrike instances
* because the cache is on this FileFont
--- 156,167 ----
* map they are held in via a boolean flag
* Since this isn't expected to be anything other than an extremely
* rare maybe it is not worth doing this last part.
*/
synchronized void deregisterFontAndClearStrikeCache() {
! SunFontManager fm = SunFontManager.getInstance();
! fm.deRegisterBadFont(this);
for (Reference strikeRef : strikeCache.values()) {
if (strikeRef != null) {
/* NB we know these are all FileFontStrike instances
* because the cache is on this FileFont
*** 170,241 ****
scaler.invalidateScalerContext(strike.pScalerContext);
}
}
}
scaler.dispose();
! scaler = FontManager.getNullScaler();
}
StrikeMetrics getFontMetrics(long pScalerContext) {
try {
return getScaler().getFontMetrics(pScalerContext);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getFontMetrics(pScalerContext);
}
}
float getGlyphAdvance(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphAdvance(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getGlyphAdvance(pScalerContext, glyphCode);
}
}
void getGlyphMetrics(long pScalerContext, int glyphCode, Point2D.Float metrics) {
try {
getScaler().getGlyphMetrics(pScalerContext, glyphCode, metrics);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
getGlyphMetrics(pScalerContext, glyphCode, metrics);
}
}
long getGlyphImage(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphImage(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getGlyphImage(pScalerContext, glyphCode);
}
}
Rectangle2D.Float getGlyphOutlineBounds(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphOutlineBounds(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getGlyphOutlineBounds(pScalerContext, glyphCode);
}
}
GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, float x, float y) {
try {
return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getGlyphOutline(pScalerContext, glyphCode, x, y);
}
}
GeneralPath getGlyphVectorOutline(long pScalerContext, int[] glyphs, int numGlyphs, float x, float y) {
try {
return getScaler().getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
} catch (FontScalerException fe) {
! scaler = FontManager.getNullScaler();
return getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
}
}
/* T1 & TT implementation differ so this method is abstract.
--- 171,242 ----
scaler.invalidateScalerContext(strike.pScalerContext);
}
}
}
scaler.dispose();
! scaler = FontScaler.getNullScaler();
}
StrikeMetrics getFontMetrics(long pScalerContext) {
try {
return getScaler().getFontMetrics(pScalerContext);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getFontMetrics(pScalerContext);
}
}
float getGlyphAdvance(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphAdvance(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getGlyphAdvance(pScalerContext, glyphCode);
}
}
void getGlyphMetrics(long pScalerContext, int glyphCode, Point2D.Float metrics) {
try {
getScaler().getGlyphMetrics(pScalerContext, glyphCode, metrics);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
getGlyphMetrics(pScalerContext, glyphCode, metrics);
}
}
long getGlyphImage(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphImage(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getGlyphImage(pScalerContext, glyphCode);
}
}
Rectangle2D.Float getGlyphOutlineBounds(long pScalerContext, int glyphCode) {
try {
return getScaler().getGlyphOutlineBounds(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getGlyphOutlineBounds(pScalerContext, glyphCode);
}
}
GeneralPath getGlyphOutline(long pScalerContext, int glyphCode, float x, float y) {
try {
return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getGlyphOutline(pScalerContext, glyphCode, x, y);
}
}
GeneralPath getGlyphVectorOutline(long pScalerContext, int[] glyphs, int numGlyphs, float x, float y) {
try {
return getScaler().getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
} catch (FontScalerException fe) {
! scaler = FontScaler.getNullScaler();
return getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
}
}
/* T1 & TT implementation differ so this method is abstract.
*** 273,283 ****
* execute first? If so the file would not
* be deleted on MS-windows.
*/
fontFile.delete();
/* remove from delete on exit hook list : */
! FontManager.tmpFontFiles.remove(fontFile);
} catch (Exception e) {
}
}
return null;
}
--- 274,285 ----
* execute first? If so the file would not
* be deleted on MS-windows.
*/
fontFile.delete();
/* remove from delete on exit hook list : */
! // FIXME: still need to be refactored
! SunFontManager.getInstance().tmpFontFiles.remove(fontFile);
} catch (Exception e) {
}
}
return null;
}