Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6266084

Font.layoutGlyphVector() incorrectly treats "limit" as "count"

XMLWordPrintable

    • 2d
    • 5.0
    • b56
    • other
    • windows_xp

      OPERATING SYSTEM(S): Windows 2003 Server SP1 (64bit)

      FULL JDK VERSION(S):
      java full version "1.5.0_02-b09"

      DESCRIPTION:
      Testcase is:
      -----------------------------------------
      import java.awt.*;
      import java.awt.event.*;
      import java.awt.font.*;
      import java.awt.geom.*;
      import java.text.Bidi;

      public class vGlyphVectorGLFTest{
      static String sSCCSid = "@(#) @(#)43 1.2 fvigsi/java2d/GlyphVector/vGlyphVectorGLFTest.java, fvigsi, fvigsi 4/29/02 15:27:09";
          static public void main(String[] args) {
      new TestFrame().setVisible(true);
          }

          static class TestFrame extends Frame {
      GlyphVector[] gvs;

      TestFrame() {
      super("Test Font.layoutGlyphVector");

      setSize(300, 300);
      setBackground(Color.white);
      setForeground(Color.black);
      addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      System.exit(0);
      }
      });
      }


      public void paint(Graphics g) {

      Graphics2D g2d = (Graphics2D)g;
      //String str = "This \u05d1\u05d2\u05d3 123 \u0644\u0627\u0646\u0646\u0646 has \u0939\u093f\u0928\u0921\u0940 in it.";
      String str = "\u0939\u093f\u0928\u0921\u0940 \u05d1\u05d2\u05d3";
      Font font = new Font("Lucida Sans", Font.PLAIN, 18);
      float x = 50;
      float y = 100;
      g2d.setFont(font);
      g2d.drawString(str, x, y);
      if (gvs == null) {
      FontRenderContext frc = g2d.getFontRenderContext();
      char[] text = str.toCharArray();
      Bidi bidi = new Bidi(str, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
      gvs = new GlyphVector[bidi.getRunCount()];
      byte levels[] = new byte[gvs.length];
      for (int i = 0; i <gvs.length ; ++i) {
      levels[i] = (byte)bidi.getRunLevel(i);
      int flags = ((levels[i] & 1) == 1) ?
      Font.LAYOUT_RIGHT_TO_LEFT :
      Font.LAYOUT_LEFT_TO_RIGHT;
      int start = bidi.getRunStart(i);
      int limit = bidi.getRunLimit(i);
      try {
      gvs[i] = font.layoutGlyphVector(frc, text, start, limit, flags);
      }catch (UnsupportedOperationException e) {
      System.out.println(e);
      }
      }

      if(gvs[0].getLayoutFlags()==gvs[0].FLAG_COMPLEX_GLYPHS && gvs[1].getLayoutFlags()==gvs[1].FLAG_RUN_RTL)
      {
      System.out.println("TEST PASSED");
      }
      else
      {
      System.out.println("TEST FAILED");
      }
      System.exit(0);

      }

        }
       }
      }
      _______________________________

      Compile the testcase.
      Test should pass without any exception.

      Exception which we are getting are:
      E=Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException
       E= at sun.font.GlyphLayout.layout(GlyphLayout.java:309)
       E= at java.awt.Font.layoutGlyphVector(Font.java:2250)
       E= at vGlyphVectorGLFTest$TestFrame.paint(vGlyphVectorGLFTest.java:78)
       E= at sun.awt.RepaintArea.paintComponent(RepaintArea.java:278)
       E= at sun.awt.RepaintArea.paint(RepaintArea.java:254)
       E= at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:286)
       E= at java.awt.Component.dispatchEventImpl(Component.java:4062)
       E= at java.awt.Container.dispatchEventImpl(Container.java:2054)
       E= at java.awt.Window.dispatchEventImpl(Window.java:1806)
       E= at java.awt.Component.dispatchEvent(Component.java:3834)
       E= at java.awt.EventQueue.dispatchEvent(EventQueue.java:541)
       E= at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:265)
       E= at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:194)
       E= at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
       E= at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:180)
       E= at java.awt.EventDispatchThread.run(EventDispatchThread.java:141)



      ###@###.### 2005-05-05 19:45:20 GMT

            dougfelt Doug Felt (Inactive)
            elarsen Erik Larsen (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: