/* * @(#)ImagePainter.java 1.8 03/12/19 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package javax.swing.plaf.synth; import java.awt.*; import java.net.*; import javax.swing.*; /** * ImagePainter fills in the specified region using an Image. The Image * is split into 9 segments: north, north east, east, south east, south, * south west, west, north west and the center. The corners are defined * by way of an insets, and the remaining regions are either tiled or * scaled to fit. * * @version 1.8, 12/19/03 * @author Scott Violet */ class ImagePainter extends SynthPainter { private Image image; private Insets sInsets; private Insets dInsets; private URL path; private boolean tiles; private boolean paintCenter; private Object renderingHint; ImagePainter(boolean tiles, boolean paintCenter, Object renderingHint, Insets sourceInsets, Insets destinationInsets) { this.sInsets = (Insets)sourceInsets.clone(); if (destinationInsets == null) { dInsets = sInsets; } else { this.dInsets = (Insets)destinationInsets.clone(); } this.tiles = tiles; this.paintCenter = paintCenter; this.renderingHint = renderingHint; } public ImagePainter(boolean tiles, boolean paintCenter, Object renderingHint, Insets sourceInsets, Insets destinationInsets, Image image) { this(tiles, paintCenter, renderingHint, sourceInsets, destinationInsets); this.image = image; } public ImagePainter(boolean tiles, boolean paintCenter, Object renderingHint, Insets sourceInsets, Insets destinationInsets, URL path) { this(tiles, paintCenter, renderingHint, sourceInsets, destinationInsets); this.path = path; } public boolean getTiles() { return tiles; } public boolean getPaintsCenter() { return paintCenter; } public Object getRenderingHint() { return renderingHint; } public Insets getInsets(Insets insets) { if (insets == null) { return (Insets)this.dInsets.clone(); } insets.left = this.dInsets.left; insets.right = this.dInsets.right; insets.top = this.dInsets.top; insets.bottom = this.dInsets.bottom; return insets; } public Image getImage() { if (image == null) { image = new ImageIcon(path, null).getImage(); } return image; } private void paint(Graphics g, int x, int y, int w, int h) { Image image; Object lastHint; Object renderingHint = getRenderingHint(); if (renderingHint != null) { Graphics2D g2 = (Graphics2D)g; lastHint = g2.getRenderingHint(RenderingHints.KEY_INTERPOLATION); if (lastHint == null) { lastHint = RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR; } g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, renderingHint); } else { lastHint = null; } if ((image = getImage()) != null) { Insets sInsets = this.sInsets; Insets dInsets = this.dInsets; int iw = image.getWidth(null); int ih = image.getHeight(null); boolean stretch = !getTiles(); // top left g.drawImage(image, x, y, x + dInsets.left, y + dInsets.top, 0, 0, sInsets.left, sInsets.top, null); // top drawChunk(image, g, stretch, x + dInsets.left, y, x + w - dInsets.right, y + dInsets.top, sInsets.left, 0, iw - sInsets.right, sInsets.top, true); // top right g.drawImage(image, x + w - dInsets.right, y, x + w, y + dInsets.top, iw - sInsets.right, 0, iw, sInsets.top, null); // right drawChunk(image, g, stretch, x + w - dInsets.right, y + dInsets.top, x + w, y + h - dInsets.bottom, iw - sInsets.right, sInsets.top, iw, ih - sInsets.bottom, false); // bottom right g.drawImage(image, x + w - dInsets.right, y + h - dInsets.bottom, x + w, y + h, iw - sInsets.right, ih - sInsets.bottom, iw, ih, null); // bottom drawChunk(image, g, stretch, x + dInsets.left, y + h - dInsets.bottom, x + w - dInsets.right, y + h, sInsets.left, ih - sInsets.bottom, iw - sInsets.right, ih, true); // bottom left g.drawImage(image, x, y + h - dInsets.bottom, x + dInsets.left, y + h, 0, ih - sInsets.bottom, sInsets.left, ih, null); // left drawChunk(image, g, stretch, x, y + dInsets.top, x + dInsets.left, y + h - dInsets.bottom, 0, sInsets.top, sInsets.left, ih - sInsets.bottom, false); // center if (getPaintsCenter()) { g.drawImage(image, x + dInsets.left, y + dInsets.top, x + w - dInsets.right, y + h - dInsets.bottom, sInsets.left, sInsets.top, iw - sInsets.right, ih - sInsets.bottom, null); } } if (renderingHint != null) { ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_INTERPOLATION, lastHint); } } private void drawChunk(Image image, Graphics g, boolean stretch, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, boolean xDirection) { if (stretch) { g.drawImage(image, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, null); } else { int xSize = sx2 - sx1; int ySize = sy2 - sy1; int deltaX; int deltaY; if (xDirection) { deltaX = xSize; deltaY = 0; } else { deltaX = 0; deltaY = ySize; } while (dx1 < dx2 && dy1 < dy2) { int newDX2 = Math.min(dx2, dx1 + xSize); int newDY2 = Math.min(dy2, dy1 + ySize); g.drawImage(image, dx1, dy1, newDX2, newDY2, sx1, sy1, sx1 + newDX2 - dx1, sy1 + newDY2 - dy1, null); dx1 += deltaX; dy1 += deltaY; } } } // SynthPainter public void paintArrowButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintArrowButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintArrowButtonForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int direction) { paint(g, x, y, w, h); } // BUTTON public void paintButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // CHECK_BOX_MENU_ITEM public void paintCheckBoxMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintCheckBoxMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // CHECK_BOX public void paintCheckBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintCheckBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // COLOR_CHOOSER public void paintColorChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintColorChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // COMBO_BOX public void paintComboBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintComboBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // DESKTOP_ICON public void paintDesktopIconBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintDesktopIconBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // DESKTOP_PANE public void paintDesktopPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintDesktopPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // EDITOR_PANE public void paintEditorPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintEditorPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // FILE_CHOOSER public void paintFileChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintFileChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // FORMATTED_TEXT_FIELD public void paintFormattedTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintFormattedTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // INTERNAL_FRAME_TITLE_PANE public void paintInternalFrameTitlePaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintInternalFrameTitlePaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // INTERNAL_FRAME public void paintInternalFrameBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintInternalFrameBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // LABEL public void paintLabelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintLabelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // LIST public void paintListBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintListBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // MENU_BAR public void paintMenuBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintMenuBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // MENU_ITEM public void paintMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // MENU public void paintMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // OPTION_PANE public void paintOptionPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintOptionPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // PANEL public void paintPanelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintPanelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // PANEL public void paintPasswordFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintPasswordFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // POPUP_MENU public void paintPopupMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintPopupMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // PROGRESS_BAR public void paintProgressBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintProgressBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintProgressBarForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } // RADIO_BUTTON_MENU_ITEM public void paintRadioButtonMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintRadioButtonMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // RADIO_BUTTON public void paintRadioButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintRadioButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // ROOT_PANE public void paintRootPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintRootPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SCROLL_BAR public void paintScrollBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintScrollBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SCROLL_BAR_THUMB public void paintScrollBarThumbBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } public void paintScrollBarThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } // SCROLL_BAR_TRACK public void paintScrollBarTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintScrollBarTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SCROLL_PANE public void paintScrollPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintScrollPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SEPARATOR public void paintSeparatorBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSeparatorBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSeparatorForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } // SLIDER public void paintSliderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSliderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SLIDER_THUMB public void paintSliderThumbBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } public void paintSliderThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } // SLIDER_TRACK public void paintSliderTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSliderTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SPINNER public void paintSpinnerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSpinnerBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // SPLIT_PANE_DIVIDER public void paintSplitPaneDividerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSplitPaneDividerForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } public void paintSplitPaneDragDivider(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(g, x, y, w, h); } // SPLIT_PANE public void paintSplitPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintSplitPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TABBED_PANE public void paintTabbedPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTabbedPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TABBED_PANE_TAB_AREA public void paintTabbedPaneTabAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTabbedPaneTabAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TABBED_PANE_TAB public void paintTabbedPaneTabBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex) { paint(g, x, y, w, h); } public void paintTabbedPaneTabBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex) { paint(g, x, y, w, h); } // TABBED_PANE_CONTENT public void paintTabbedPaneContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTabbedPaneContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TABLE_HEADER public void paintTableHeaderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTableHeaderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TABLE public void paintTableBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTableBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TEXT_AREA public void paintTextAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTextAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TEXT_PANE public void paintTextPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTextPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TEXT_FIELD public void paintTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TOGGLE_BUTTON public void paintToggleButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintToggleButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TOOL_BAR public void paintToolBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintToolBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TOOL_BAR_CONTENT public void paintToolBarContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintToolBarContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TOOL_DRAG_WINDOW public void paintToolBarDragWindowBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintToolBarDragWindowBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TOOL_TIP public void paintToolTipBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintToolTipBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TREE public void paintTreeBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTreeBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // TREE_CELL public void paintTreeCellBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTreeCellBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintTreeCellFocus(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } // VIEWPORT public void paintViewportBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } public void paintViewportBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(g, x, y, w, h); } }