/** * Paint an area with the image pattern. * * @param g graphics * @param width width of the painted area * @param height height of the painted area */ public void paint(Graphics g, int width, int height) { // Paint the center part. That covers the whole area Sprite centerSprite = images[4]; int centerWidth = centerSprite.getWidth(); int centerHeight = centerSprite.getHeight(); for (int y = 0; y < height; y += centerHeight) { for (int x = 0; x < width; x += centerWidth) { centerSprite.draw(g, x, y); } } // Sides // Some needed dimensions (and sprites) Sprite rightSprite = images[5]; int rightWidth = rightSprite.getWidth(); Sprite leftSprite = images[3]; int leftWidth = leftSprite.getHeight(); Sprite topSprite = images[1]; int topHeight = topSprite.getHeight(); Sprite bottomSprite = images[7]; int bottomHeight = bottomSprite.getHeight(); // Top row. for (int x = leftWidth; x < width - rightWidth; x += centerWidth) { topSprite.draw(g, x, 0); } // left side for (int y = topHeight; y < height - bottomHeight; y += centerHeight) { leftSprite.draw(g, 0, y); } /* * The rest of the sides will not tile properly, but the background * pattern is subtle enough that it will not be immediately noticeable. */ // right side // Do not draw over the left side, but let the image overflow from the // right if there's no space int rightX = Math.max(width - rightWidth, leftWidth); for (int y = topHeight; y < height - bottomHeight; y += centerHeight) { rightSprite.draw(g, rightX, y); } // bottom // Do not draw over the top border, but let the scroll overflow from the // bottom if there's no space int bottomY = Math.max(height - bottomHeight, topHeight); for (int x = centerWidth; x < width - centerWidth; x += centerWidth) { bottomSprite.draw(g, x, bottomY); } // Corners. Again, only the first one will tile properly // Top left corner Sprite sprite = images[0]; sprite.draw(g, 0, 0); // Top right corner sprite = images[2]; sprite.draw(g, rightX, 0); // Bottom left corner sprite = images[6]; sprite.draw(g, 0, bottomY); // Bottom right corner sprite = images[8]; sprite.draw(g, rightX, bottomY); }