src/share/classes/sun/font/GlyphLayout.java

Print this page
rev 1379 : [mq]: fontmanager.patch


 242                 gtx = font.getTransform();
 243                 gtx.scale(ptSize, ptSize);
 244                 delta = new Point2D.Float((float)gtx.getTranslateX(),
 245                                           (float)gtx.getTranslateY());
 246                 gtx.setTransform(gtx.getScaleX(), gtx.getShearY(),
 247                                  gtx.getShearX(), gtx.getScaleY(),
 248                                  0, 0);
 249                 gtx.preConcatenate(dtx);
 250             } else {
 251                 delta = ZERO_DELTA;
 252                 gtx = new AffineTransform(dtx);
 253                 gtx.scale(ptSize, ptSize);
 254             }
 255 
 256             /* Similar logic to that used in SunGraphics2D.checkFontInfo().
 257              * Whether a grey (AA) strike is needed is size dependent if
 258              * AA mode is 'gasp'.
 259              */
 260             int aa =
 261                 FontStrikeDesc.getAAHintIntVal(frc.getAntiAliasingHint(),
 262                                                FontManager.getFont2D(font),
 263                                                (int)Math.abs(ptSize));
 264             int fm = FontStrikeDesc.getFMHintIntVal
 265                 (frc.getFractionalMetricsHint());
 266             sd = new FontStrikeDesc(dtx, gtx, font.getStyle(), aa, fm);
 267         }
 268 
 269         private static final Point2D.Float ZERO_DELTA = new Point2D.Float();
 270 
 271         private static
 272             SoftReference<ConcurrentHashMap<SDKey, SDCache>> cacheRef;
 273 
 274         private static final class SDKey {
 275             private final Font font;
 276             private final FontRenderContext frc;
 277             private final int hash;
 278 
 279             SDKey(Font font, FontRenderContext frc) {
 280                 this.font = font;
 281                 this.frc = frc;
 282                 this.hash = font.hashCode() ^ frc.hashCode();


 390         int lim = offset + count;
 391 
 392         int min = 0;
 393         int max = text.length;
 394         if (flags != 0) {
 395             if ((flags & Font.LAYOUT_RIGHT_TO_LEFT) != 0) {
 396               _typo_flags |= 0x80000000; // RTL
 397             }
 398 
 399             if ((flags & Font.LAYOUT_NO_START_CONTEXT) != 0) {
 400                 min = offset;
 401             }
 402 
 403             if ((flags & Font.LAYOUT_NO_LIMIT_CONTEXT) != 0) {
 404                 max = lim;
 405             }
 406         }
 407 
 408         int lang = -1; // default for now
 409 
 410         Font2D font2D = FontManager.getFont2D(font);
 411 
 412         _textRecord.init(text, offset, lim, min, max);
 413         int start = offset;
 414         if (font2D instanceof CompositeFont) {
 415             _scriptRuns.init(text, offset, count); // ??? how to handle 'common' chars
 416             _fontRuns.init((CompositeFont)font2D, text, offset, lim);
 417             while (_scriptRuns.next()) {
 418                 int limit = _scriptRuns.getScriptLimit();
 419                 int script = _scriptRuns.getScriptCode();
 420                 while (_fontRuns.next(script, limit)) {
 421                     Font2D pfont = _fontRuns.getFont();
 422                     /* layout can't deal with NativeFont instances. The
 423                      * native font is assumed to know of a suitable non-native
 424                      * substitute font. This currently works because
 425                      * its consistent with the way NativeFonts delegate
 426                      * in other cases too.
 427                      */
 428                     if (pfont instanceof NativeFont) {
 429                         pfont = ((NativeFont)pfont).getDelegateFont();
 430                     }




 242                 gtx = font.getTransform();
 243                 gtx.scale(ptSize, ptSize);
 244                 delta = new Point2D.Float((float)gtx.getTranslateX(),
 245                                           (float)gtx.getTranslateY());
 246                 gtx.setTransform(gtx.getScaleX(), gtx.getShearY(),
 247                                  gtx.getShearX(), gtx.getScaleY(),
 248                                  0, 0);
 249                 gtx.preConcatenate(dtx);
 250             } else {
 251                 delta = ZERO_DELTA;
 252                 gtx = new AffineTransform(dtx);
 253                 gtx.scale(ptSize, ptSize);
 254             }
 255 
 256             /* Similar logic to that used in SunGraphics2D.checkFontInfo().
 257              * Whether a grey (AA) strike is needed is size dependent if
 258              * AA mode is 'gasp'.
 259              */
 260             int aa =
 261                 FontStrikeDesc.getAAHintIntVal(frc.getAntiAliasingHint(),
 262                                                FontUtilities.getFont2D(font),
 263                                                (int)Math.abs(ptSize));
 264             int fm = FontStrikeDesc.getFMHintIntVal
 265                 (frc.getFractionalMetricsHint());
 266             sd = new FontStrikeDesc(dtx, gtx, font.getStyle(), aa, fm);
 267         }
 268 
 269         private static final Point2D.Float ZERO_DELTA = new Point2D.Float();
 270 
 271         private static
 272             SoftReference<ConcurrentHashMap<SDKey, SDCache>> cacheRef;
 273 
 274         private static final class SDKey {
 275             private final Font font;
 276             private final FontRenderContext frc;
 277             private final int hash;
 278 
 279             SDKey(Font font, FontRenderContext frc) {
 280                 this.font = font;
 281                 this.frc = frc;
 282                 this.hash = font.hashCode() ^ frc.hashCode();


 390         int lim = offset + count;
 391 
 392         int min = 0;
 393         int max = text.length;
 394         if (flags != 0) {
 395             if ((flags & Font.LAYOUT_RIGHT_TO_LEFT) != 0) {
 396               _typo_flags |= 0x80000000; // RTL
 397             }
 398 
 399             if ((flags & Font.LAYOUT_NO_START_CONTEXT) != 0) {
 400                 min = offset;
 401             }
 402 
 403             if ((flags & Font.LAYOUT_NO_LIMIT_CONTEXT) != 0) {
 404                 max = lim;
 405             }
 406         }
 407 
 408         int lang = -1; // default for now
 409 
 410         Font2D font2D = FontUtilities.getFont2D(font);
 411 
 412         _textRecord.init(text, offset, lim, min, max);
 413         int start = offset;
 414         if (font2D instanceof CompositeFont) {
 415             _scriptRuns.init(text, offset, count); // ??? how to handle 'common' chars
 416             _fontRuns.init((CompositeFont)font2D, text, offset, lim);
 417             while (_scriptRuns.next()) {
 418                 int limit = _scriptRuns.getScriptLimit();
 419                 int script = _scriptRuns.getScriptCode();
 420                 while (_fontRuns.next(script, limit)) {
 421                     Font2D pfont = _fontRuns.getFont();
 422                     /* layout can't deal with NativeFont instances. The
 423                      * native font is assumed to know of a suitable non-native
 424                      * substitute font. This currently works because
 425                      * its consistent with the way NativeFonts delegate
 426                      * in other cases too.
 427                      */
 428                     if (pfont instanceof NativeFont) {
 429                         pfont = ((NativeFont)pfont).getDelegateFont();
 430                     }