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

jdk1.2 paint() fails with too many rectangle fills

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • None
    • 1.2.0
    • client-libs
    • generic
    • windows_95



      Name: krT82822 Date: 01/05/99


      Original user synopsis: "jdk1.2 paint() fails with too many rectange fills"

      The following program creates a borderless box with a gradient
      fill. The program should be compiled under jdk1.2 and involked
      by typing 'java Test 640 480'. The size of the box can be changed
      by specifing a different x and y as arguments. Depressing the
      keys r,g,b,y,m,c,w,k will change the color to red, green, blue,
      yellow, magenta, cyan, white and black respectively. Using the
      jdk1.2 enviornment depressing the keys r,g,b,y,m all work. When
      c is depressed the fill starts but stops about a sixth of the way
      across the screen. The problem is not associated with the color
      cyan but the fact that it is the 6th color depressed. It appears
      as though it is running out of memory as icons in the editor
      which I have open sometimes turn black or go blank at the same
      time that the fill stops. If the same class is run with the
      jdk1.1.6 enviornment without recompiling it works fine.
      I saw this same thing on earlier versions of the jdk1.1.1 or so
      then it was fixed on newer versions and now it is back again.

      When this happens there are no error messages.

      Since the compiled class works with jdk1.1.6 and not 1.2 I think
      it is something in the run time lib or the java.exe which is
      causing the problem.

      I tried to force garbage collections but that didn't help.

      This is occurring on the Win95 implimentation.

      here is the code:

      //------------Test.java------------

      import java.awt.*;
      import java.awt.event.*;

      public class Test extends Panel
      {int cc;
       boolean solid=false;
       FullScreen fs;

        public Test(Window w, int x, int y)
         {w.setBounds(0,0,x,y);
          w.setVisible(true);
          w.addKeyListener(new TestKey());
          this.setSize(x,y);
          w.add("Center",this);
          cc=1;
          fs=new FullScreen(0,0,x,y,cc);
          setVisible(true);
          repaint();
         }

       class TestKey extends KeyAdapter
         {public void keyTyped(KeyEvent e)
           {int x=e.getKeyChar();
            switch (x)
              {case 'q' : System.exit(0); break;
               case 'w' : cc=0; fs.setColor(cc); break; // Set fcolor to white
               case 'r' : cc=1; fs.setColor(cc); break; // Set fcolor to red
               case 'g' : cc=2; fs.setColor(cc); break; // Set fcolor to green
               case 'b' : cc=3; fs.setColor(cc); break; // Set fcolor to blue
               case 'y' : cc=4; fs.setColor(cc); break; // Set fcolor to yellow
               case 'm' : cc=5; fs.setColor(cc); break; // Set fcolor to magenta
               case 'c' : cc=6; fs.setColor(cc); break; // Set fcolor to cyan
               case 'k' : cc=7; fs.setColor(cc); break; // Set fcolor to black
               case 'l' : fs.rotate(); break; // Toggle line horz - vert
               case 'f' : solid=!solid; break;
              }
            repaint();
           }
         }

        public void paint(Graphics g)
         {if (solid) fs.showSolid(g);
          else fs.show(g);
          System.gc();
         }

       public static void main(String args[])
         {int x=java.lang.Integer.parseInt(args[0]);
          int y=java.lang.Integer.parseInt(args[1]);
          Window nw=new Window(new Frame());
          new Test(nw,x,y);
         }

      }


      //------------------FullScreen.java------------

      import java.awt.*;

      public class FullScreen
      {int x,y; // start location
       int w,h; // width and height
       int fmin,fmax; // foreground min and max
       int vrot; // rotate position
       int cc; // current color

        public FullScreen(int x,int y,int w,int h,int cc)
          {this.x=x;
           this.y=y;
           this.w=w;
           this.h=h;
           fmin=0;
           fmax=255;
           vrot=0;
           this.cc=cc;
          }

         public void setColor(int cc)
          {this.cc=cc;
          }

         public Color setLevel(int v)
          {Color x=Color.red;
           switch (cc)
             {case 0 : x=new Color(v,v,v); break; //white
              case 1 : x=new Color(v,0,0); break; //red
              case 2 : x=new Color(0,v,0); break; //green
              case 3 : x=new Color(0,0,v); break; //blue
              case 4 : x=new Color(v,v,0); break; //yellow
              case 5 : x=new Color(v,0,v); break; //magenta
              case 6 : x=new Color(0,v,v); break; //cyan
              case 7 : x=new Color(0,0,0); break; //black
             }
           return x;
          }

        public void rotate()
          {vrot=(vrot=vrot+1)%4;
           int temp;
           switch (vrot)
             {case 0 : temp=fmax;
                       fmax=fmin;
                       fmin=temp;
                       break;
              case 1 : break;
              case 2 : temp=fmax;
                       fmax=fmin;
                       fmin=temp;
                       break;
              case 3 : break;
             }
           }

        public void showSolid(Graphics g)
          {g.setColor(setLevel(fmax));
           g.fillRect(x,y,w,h);
          }

        public void show(Graphics g)
          {double xstep;
           if ((vrot==0)||(vrot==2))
            {if (fmax > fmin)
               {xstep=(double)(w*1.0/(fmax-fmin));
                for (int i=fmin; i<fmax ;i++ )
                  {g.setColor(setLevel(i));
                   g.fillRect((int)((i-fmin)*xstep),0,(int)xstep+1,h);
                  }
               }
             else if (fmax < fmin)
               {xstep=(double)(w*1.0/(fmin-fmax));
                for (int i=fmin; i>fmax ;i-- )
                  {g.setColor(setLevel(i));
                   g.fillRect((int)((fmin-i)*xstep),0,(int)xstep+1,h);
                  }
               }
             else
               {g.setColor(setLevel(fmax));
                g.fillRect(x,y,w,h);
               }
            }
           else
            {if (fmax > fmin)
               {xstep=(double)(h*1.0/(fmax-fmin));
                for (int i=fmin; i<fmax ;i++ )
                  {g.setColor(setLevel(i));
                   g.fillRect(0,(int)((i-fmin)*xstep),w,(int)xstep+1);
                  }
               }
             else if (fmax < fmin)
               {xstep=(double)(h*1.0/(fmin-fmax));
                for (int i=fmin; i>fmax ;i-- )
                  {g.setColor(setLevel(i));
                   g.fillRect(0,(int)((fmin-i)*xstep),w,(int)xstep+1);
                  }
               }
             else
               {g.setColor(setLevel(fmax));
                g.fillRect(x,y,w,h);
               }
            }
          }

      }
      (Review ID: 48173)
      ======================================================================

            rraysunw Richard Ray (Inactive)
            kryansunw Kevin Ryan (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: