1 /* 2 * Copyright (c) 2002, 2006, 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 class SynthBorder extends AbstractBorder implements UIResource { 40 private SynthUI ui; 41 private Insets insets; 42 43 SynthBorder(SynthUI ui, Insets insets) { 44 this.ui = ui; 45 this.insets = insets; 46 } 47 48 SynthBorder(SynthUI ui) { 49 this(ui, null); 50 } 51 52 public void paintBorder(Component c, Graphics g, int x, int y, 53 int width, int height) { 54 JComponent jc = (JComponent)c; 55 SynthContext context = ui.getContext(jc); 56 SynthStyle style = context.getStyle(); 57 if (style == null) { 58 assert false: "SynthBorder is being used outside after the UI " + 59 "has been uninstalled"; 60 return; 61 } 62 ui.paintBorder(context, g, x, y, width, height); 63 context.dispose(); 64 } 65 66 /** 67 * Reinitializes the insets parameter with this Border's current Insets. 68 * @param c the component for which this border insets value applies 69 * @param insets the object to be reinitialized 70 * @return the <code>insets</code> object 71 */ 72 public Insets getBorderInsets(Component c, Insets insets) { 73 if (this.insets != null) { 74 if (insets == null) { 75 insets = new Insets(this.insets.top, this.insets.left, 76 this.insets.bottom, this.insets.right); 77 } 78 else { 79 insets.top = this.insets.top; 80 insets.bottom = this.insets.bottom; 81 insets.left = this.insets.left; 82 insets.right = this.insets.right; 83 } 84 } 85 else if (insets == null) { 86 insets = new Insets(0, 0, 0, 0); 87 } 88 else { 89 insets.top = insets.bottom = insets.left = insets.right = 0; 90 } 91 if (c instanceof JComponent) { 92 Region region = Region.getRegion((JComponent)c); 93 Insets margin = null; 94 if ((region == Region.ARROW_BUTTON || region == Region.BUTTON || 95 region == Region.CHECK_BOX || 96 region == Region.CHECK_BOX_MENU_ITEM || 97 region == Region.MENU || region == Region.MENU_ITEM || 98 region == Region.RADIO_BUTTON || 99 region == Region.RADIO_BUTTON_MENU_ITEM || 100 region == Region.TOGGLE_BUTTON) && 101 (c instanceof AbstractButton)) { 102 margin = ((AbstractButton)c).getMargin(); 103 } 104 else if ((region == Region.EDITOR_PANE || 105 region == Region.FORMATTED_TEXT_FIELD || 106 region == Region.PASSWORD_FIELD || 107 region == Region.TEXT_AREA || 108 region == Region.TEXT_FIELD || 109 region == Region.TEXT_PANE) && 110 (c instanceof JTextComponent)) { 111 margin = ((JTextComponent)c).getMargin(); 112 } 113 else if (region == Region.TOOL_BAR && (c instanceof JToolBar)) { 114 margin = ((JToolBar)c).getMargin(); 115 } 116 else if (region == Region.MENU_BAR && (c instanceof JMenuBar)) { 117 margin = ((JMenuBar)c).getMargin(); 118 } 119 if (margin != null) { 120 insets.top += margin.top; 121 insets.bottom += margin.bottom; 122 insets.left += margin.left; 123 insets.right += margin.right; 124 } 125 } 126 return insets; 127 } 128 129 /** 130 * This default implementation returns false. 131 * @return false 132 */ 133 public boolean isBorderOpaque() { 134 return false; 135 } 136 }