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 }
--- EOF ---