1 /* 2 * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package javax.swing.plaf.synth; 26 27 import java.awt.*; 28 import javax.swing.*; 29 import javax.swing.text.JTextComponent; 30 import javax.swing.border.*; 31 import javax.swing.plaf.UIResource; 32 33 /** 34 * SynthBorder is a border that delegates to a Painter. The Insets 35 * are determined at construction time. 36 * 37 * @author Scott Violet 38 */ 39 @SuppressWarnings("serial") // Superclass is not serializable across versions 40 class SynthBorder extends AbstractBorder implements UIResource { 41 private SynthUI ui; 42 private Insets insets; 43 44 SynthBorder(SynthUI ui, Insets insets) { 45 this.ui = ui; 46 this.insets = insets; 47 } 48 49 SynthBorder(SynthUI ui) { 50 this(ui, null); 51 } 52 53 public void paintBorder(Component c, Graphics g, int x, int y, 54 int width, int height) { 55 JComponent jc = (JComponent)c; 56 SynthContext context = ui.getContext(jc); 57 SynthStyle style = context.getStyle(); 58 if (style == null) { 59 assert false: "SynthBorder is being used outside after the UI " + 60 "has been uninstalled"; 61 return; 62 } 63 ui.paintBorder(context, g, x, y, width, height); 64 context.dispose(); 65 } 66 67 /** 68 * Reinitializes the insets parameter with this Border's current Insets. 69 * @param c the component for which this border insets value applies 70 * @param insets the object to be reinitialized 71 * @return the <code>insets</code> object 72 */ 73 public Insets getBorderInsets(Component c, Insets insets) { 74 if (this.insets != null) { 75 if (insets == null) { 76 insets = new Insets(this.insets.top, this.insets.left, 77 this.insets.bottom, this.insets.right); 78 } 79 else { 80 insets.top = this.insets.top; 81 insets.bottom = this.insets.bottom; 82 insets.left = this.insets.left; 83 insets.right = this.insets.right; 84 } 85 } 86 else if (insets == null) { 87 insets = new Insets(0, 0, 0, 0); 88 } 89 else { 90 insets.top = insets.bottom = insets.left = insets.right = 0; 91 } 92 if (c instanceof JComponent) { 93 Region region = Region.getRegion((JComponent)c); 94 Insets margin = null; 95 if ((region == Region.ARROW_BUTTON || region == Region.BUTTON || 96 region == Region.CHECK_BOX || 97 region == Region.CHECK_BOX_MENU_ITEM || 98 region == Region.MENU || region == Region.MENU_ITEM || 99 region == Region.RADIO_BUTTON || 100 region == Region.RADIO_BUTTON_MENU_ITEM || 101 region == Region.TOGGLE_BUTTON) && 102 (c instanceof AbstractButton)) { 103 margin = ((AbstractButton)c).getMargin(); 104 } 105 else if ((region == Region.EDITOR_PANE || 106 region == Region.FORMATTED_TEXT_FIELD || 107 region == Region.PASSWORD_FIELD || 108 region == Region.TEXT_AREA || 109 region == Region.TEXT_FIELD || 110 region == Region.TEXT_PANE) && 111 (c instanceof JTextComponent)) { 112 margin = ((JTextComponent)c).getMargin(); 113 } 114 else if (region == Region.TOOL_BAR && (c instanceof JToolBar)) { 115 margin = ((JToolBar)c).getMargin(); 116 } 117 else if (region == Region.MENU_BAR && (c instanceof JMenuBar)) { 118 margin = ((JMenuBar)c).getMargin(); 119 } 120 if (margin != null) { 121 insets.top += margin.top; 122 insets.bottom += margin.bottom; 123 insets.left += margin.left; 124 insets.right += margin.right; 125 } 126 } 127 return insets; 128 } 129 130 /** 131 * This default implementation returns false. 132 * @return false 133 */ 134 public boolean isBorderOpaque() { 135 return false; 136 } 137 }