// draw determinate
  private void drawXpHorzProgress(Graphics g, int x, int y, int w, int h, int amountFull) {
    g.translate(x, y);

    // paint the track
    if (!progressBar.isOpaque()) {
      g.setColor(progressBar.getBackground());
      g.fillRect(0, 0, w, h);
    }

    ProgressKey key = new ProgressKey(progressBar.getForeground(), true, h);
    Object value = cache.get(key);

    if (value == null) {
      // create new image
      Image img = new BufferedImage(6, h, BufferedImage.TYPE_INT_ARGB);
      Graphics imgGraphics = img.getGraphics();

      // draw into image graphics
      Color c = progressBar.getForeground();
      Color c2 = ColorRoutines.lighten(c, 15);
      Color c3 = ColorRoutines.lighten(c, 35);
      Color c4 = ColorRoutines.lighten(c, 60);

      imgGraphics.setColor(c4);
      imgGraphics.drawLine(0, 0, 5, 0);
      imgGraphics.drawLine(0, h - 1, 5, h - 1);

      imgGraphics.setColor(c3);
      imgGraphics.drawLine(0, 1, 5, 1);
      imgGraphics.drawLine(0, h - 2, 5, h - 2);

      imgGraphics.setColor(c2);
      imgGraphics.drawLine(0, 2, 5, 2);
      imgGraphics.drawLine(0, h - 3, 5, h - 3);

      imgGraphics.setColor(c);
      imgGraphics.fillRect(0, 3, 6, h - 6);

      // dispose of image graphics
      imgGraphics.dispose();

      cache.put(key, img);
      value = img;
    }

    int mx = 0;

    while (mx < amountFull) {
      if (mx + 6 > w) {
        // paint partially
        g.drawImage((Image) value, mx, 0, w - mx, h, progressBar);
      } else {
        g.drawImage((Image) value, mx, 0, progressBar);
      }

      mx += 8;
    }

    g.translate(-x, -y);
  }
  // draw indeterminate
  private void drawXpVertProgress(Graphics g, int x, int y, int w, int h, Rectangle boxRect) {
    // paint the track
    if (!progressBar.isOpaque()) {
      g.setColor(progressBar.getBackground());
      g.fillRect(x, y, w, h);
    }

    g.translate(boxRect.x, boxRect.y);

    ProgressKey key = new ProgressKey(progressBar.getForeground(), false, w);
    Object value = cache.get(key);

    if (value == null) {
      // create new image
      Image img = new BufferedImage(w, 6, BufferedImage.TYPE_INT_ARGB);
      Graphics imgGraphics = img.getGraphics();

      // draw into image graphics
      Color c = progressBar.getForeground();
      Color c2 = ColorRoutines.lighten(c, 15);
      Color c3 = ColorRoutines.lighten(c, 35);
      Color c4 = ColorRoutines.lighten(c, 60);

      imgGraphics.setColor(c4);
      imgGraphics.drawLine(0, 0, 0, 5);
      imgGraphics.drawLine(w - 1, 0, w - 1, 5);

      imgGraphics.setColor(c3);
      imgGraphics.drawLine(1, 0, 1, 5);
      imgGraphics.drawLine(w - 2, 0, w - 2, 5);

      imgGraphics.setColor(c2);
      imgGraphics.drawLine(2, 0, 2, 5);
      imgGraphics.drawLine(w - 3, 0, w - 3, 5);

      imgGraphics.setColor(c);
      imgGraphics.fillRect(3, 0, w - 6, 6);

      // dispose of image graphics
      imgGraphics.dispose();

      cache.put(key, img);
      value = img;
    }

    int my = 0;

    while (my + 6 < boxRect.height) {
      g.drawImage((Image) value, 0, my, progressBar);

      my += 8;
    }

    g.translate(-boxRect.x, -boxRect.y);
  }
  // draw determinate
  private void drawXpVertProgress(Graphics g, int x, int y, int w, int h, int amountFull) {
    g.translate(x, y);

    // paint the track
    if (!progressBar.isOpaque()) {
      g.setColor(progressBar.getBackground());
      g.fillRect(0, 0, w, h);
    }

    ProgressKey key = new ProgressKey(progressBar.getForeground(), false, w);
    Object value = cache.get(key);

    if (value == null) {
      // create new image
      Image img = new BufferedImage(w, 6, BufferedImage.TYPE_INT_ARGB);
      Graphics imgGraphics = img.getGraphics();

      // draw into image graphics
      Color c = progressBar.getForeground();
      Color c2 = ColorRoutines.lighten(c, 15);
      Color c3 = ColorRoutines.lighten(c, 35);
      Color c4 = ColorRoutines.lighten(c, 60);

      imgGraphics.setColor(c4);
      imgGraphics.drawLine(0, 0, 0, 5);
      imgGraphics.drawLine(w - 1, 0, w - 1, 5);

      imgGraphics.setColor(c3);
      imgGraphics.drawLine(1, 0, 1, 5);
      imgGraphics.drawLine(w - 2, 0, w - 2, 5);

      imgGraphics.setColor(c2);
      imgGraphics.drawLine(2, 0, 2, 5);
      imgGraphics.drawLine(w - 3, 0, w - 3, 5);

      imgGraphics.setColor(c);
      imgGraphics.fillRect(3, 0, w - 6, 6);

      // dispose of image graphics
      imgGraphics.dispose();

      cache.put(key, img);
      value = img;
    }

    // paints bottom to top...
    int my = 0;

    while (my < amountFull) {
      if (my + 6 > h) {
        // paint partially
        g.drawImage((Image) value, 0, 0, w, h - my, progressBar);
      } else {
        g.drawImage((Image) value, 0, h - my - 6, progressBar);
      }

      my += 8;
    }

    g.translate(-x, -y);
  }