/* * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.swing.plaf.synth; import java.awt.*; import java.lang.ref.WeakReference; import java.net.*; import javax.swing.*; import sun.awt.AppContext; import sun.swing.plaf.synth.Paint9Painter; /** * 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. * * @author Scott Violet */ class ImagePainter extends SynthPainter { private static final StringBuffer CACHE_KEY = new StringBuffer("SynthCacheKey"); private Image image; private Insets sInsets; private Insets dInsets; private URL path; private boolean tiles; private boolean paintCenter; private Paint9Painter imageCache; private boolean center; private static Paint9Painter getPaint9Painter() { // A SynthPainter is created per . We want the // cache to be shared by all, and we don't use a static because we // don't want it to persist between look and feels. For that reason // we use a AppContext specific Paint9Painter. It's backed via // a WeakRef so that it can go away if the look and feel changes. synchronized(CACHE_KEY) { @SuppressWarnings("unchecked") WeakReference cacheRef = (WeakReference)AppContext.getAppContext(). get(CACHE_KEY); Paint9Painter painter; if (cacheRef == null || (painter = cacheRef.get()) == null) { painter = new Paint9Painter(30); cacheRef = new WeakReference(painter); AppContext.getAppContext().put(CACHE_KEY, cacheRef); } return painter; } } ImagePainter(boolean tiles, boolean paintCenter, Insets sourceInsets, Insets destinationInsets, URL path, boolean center) { if (sourceInsets != null) { this.sInsets = (Insets)sourceInsets.clone(); } if (destinationInsets == null) { dInsets = sInsets; } else { this.dInsets = (Insets)destinationInsets.clone(); } this.tiles = tiles; this.paintCenter = paintCenter; this.imageCache = getPaint9Painter(); this.path = path; this.center = center; } public boolean getTiles() { return tiles; } public boolean getPaintsCenter() { return paintCenter; } public boolean getCenter() { return center; } 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(SynthContext context, Graphics g, int x, int y, int w, int h) { Image image = getImage(); if (Paint9Painter.validImage(image)) { Paint9Painter.PaintType type; if (getCenter()) { type = Paint9Painter.PaintType.CENTER; } else if (!getTiles()) { type = Paint9Painter.PaintType.PAINT9_STRETCH; } else { type = Paint9Painter.PaintType.PAINT9_TILE; } int mask = Paint9Painter.PAINT_ALL; if (!getCenter() && !getPaintsCenter()) { mask |= Paint9Painter.PAINT_CENTER; } imageCache.paint(context.getComponent(), g, x, y, w, h, image, sInsets, dInsets, type, mask); } } // SynthPainter public void paintArrowButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintArrowButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintArrowButtonForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int direction) { paint(context, g, x, y, w, h); } // BUTTON public void paintButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, 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(context, g, x, y, w, h); } public void paintCheckBoxMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // CHECK_BOX public void paintCheckBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintCheckBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // COLOR_CHOOSER public void paintColorChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintColorChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // COMBO_BOX public void paintComboBoxBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintComboBoxBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // DESKTOP_ICON public void paintDesktopIconBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintDesktopIconBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // DESKTOP_PANE public void paintDesktopPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintDesktopPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // EDITOR_PANE public void paintEditorPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintEditorPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // FILE_CHOOSER public void paintFileChooserBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintFileChooserBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // FORMATTED_TEXT_FIELD public void paintFormattedTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintFormattedTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, 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(context, g, x, y, w, h); } public void paintInternalFrameTitlePaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // INTERNAL_FRAME public void paintInternalFrameBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintInternalFrameBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // LABEL public void paintLabelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintLabelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // LIST public void paintListBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintListBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // MENU_BAR public void paintMenuBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintMenuBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // MENU_ITEM public void paintMenuItemBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // MENU public void paintMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // OPTION_PANE public void paintOptionPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintOptionPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // PANEL public void paintPanelBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintPanelBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // PANEL public void paintPasswordFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintPasswordFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // POPUP_MENU public void paintPopupMenuBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintPopupMenuBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // PROGRESS_BAR public void paintProgressBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintProgressBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintProgressBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintProgressBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintProgressBarForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, 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(context, g, x, y, w, h); } public void paintRadioButtonMenuItemBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // RADIO_BUTTON public void paintRadioButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintRadioButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // ROOT_PANE public void paintRootPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintRootPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // SCROLL_BAR public void paintScrollBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintScrollBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintScrollBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintScrollBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, 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(context, g, x, y, w, h); } public void paintScrollBarThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SCROLL_BAR_TRACK public void paintScrollBarTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintScrollBarTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintScrollBarTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintScrollBarTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SCROLL_PANE public void paintScrollPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintScrollPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // SEPARATOR public void paintSeparatorBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSeparatorBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSeparatorBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSeparatorBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSeparatorForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SLIDER public void paintSliderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSliderBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSliderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSliderBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, 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(context, g, x, y, w, h); } public void paintSliderThumbBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SLIDER_TRACK public void paintSliderTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSliderTrackBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSliderTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSliderTrackBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SPINNER public void paintSpinnerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSpinnerBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // SPLIT_PANE_DIVIDER public void paintSplitPaneDividerBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSplitPaneDividerBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSplitPaneDividerForeground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintSplitPaneDragDivider(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // SPLIT_PANE public void paintSplitPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintSplitPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TABBED_PANE public void paintTabbedPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTabbedPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, 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(context, g, x, y, w, h); } public void paintTabbedPaneTabAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintTabbedPaneTabAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTabbedPaneTabAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, 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(context, g, x, y, w, h); } public void paintTabbedPaneTabBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex, int orientation) { paint(context, g, x, y, w, h); } public void paintTabbedPaneTabBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex) { paint(context, g, x, y, w, h); } public void paintTabbedPaneTabBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int tabIndex, int orientation) { paint(context, g, x, y, w, h); } // TABBED_PANE_CONTENT public void paintTabbedPaneContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTabbedPaneContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TABLE_HEADER public void paintTableHeaderBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTableHeaderBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TABLE public void paintTableBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTableBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TEXT_AREA public void paintTextAreaBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTextAreaBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TEXT_PANE public void paintTextPaneBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTextPaneBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TEXT_FIELD public void paintTextFieldBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTextFieldBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TOGGLE_BUTTON public void paintToggleButtonBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToggleButtonBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TOOL_BAR public void paintToolBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintToolBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // TOOL_BAR_CONTENT public void paintToolBarContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarContentBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintToolBarContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarContentBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // TOOL_DRAG_WINDOW public void paintToolBarDragWindowBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarDragWindowBackground(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } public void paintToolBarDragWindowBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolBarDragWindowBorder(SynthContext context, Graphics g, int x, int y, int w, int h, int orientation) { paint(context, g, x, y, w, h); } // TOOL_TIP public void paintToolTipBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintToolTipBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TREE public void paintTreeBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTreeBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // TREE_CELL public void paintTreeCellBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTreeCellBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintTreeCellFocus(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } // VIEWPORT public void paintViewportBackground(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } public void paintViewportBorder(SynthContext context, Graphics g, int x, int y, int w, int h) { paint(context, g, x, y, w, h); } }