1 /* -------------------------------------------------------------------
2 * Java source file for the class TiledMatteBorder
3 *
4 * Copyright (c), 2002, Masahiro Takatsuka.
5 * All Rights Researved.
6 *
7 * Original Author: Masahiro Takatsuka (masa@jbeans.net)
8 * $Author: takatsukam $
9 *
10 * $Date: 2003/07/25 04:51:46 $
11 *
12 * $Id: TiledMatteBorder.java,v 1.1.1.1 2003/07/25 04:51:46 takatsukam Exp $
13 *
14 * Reference: Document no:
15 * ___ ___
16 *
17 * To Do:
18 * ___
19 *
20 ------------------------------------------------------------------- */
21
22 /* --------------------------- Package ---------------------------- */
23 package net.jbeans.ui.border;
24
25 /* ------------------ Import classes (packages) ------------------- *//package-summary/html">color="#329900"> ------------------ Import classes (packages) ------------------- *//package-summary.html">color="#329900">/* ------------------ Import classes (packages) ------------------- *//package-summary.html">color="#329900"> ------------------ Import classes (packages) ------------------- */
26 import java.awt.*;
27 import java.io.*;
28 import javax.swing.*;
29 import javax.swing.border.*;
30
31 /*====================================================================
32 Implementation of class TiledMatteBorder
33 ====================================================================*/
34 /***
35 * A class which is similar to the javax.swing.border.MatteBorder.
36 * This border, however, can alternate two tiled icons to create border.
37 *
38 * @version $Revision: 1.1.1.1 $
39 * @author Masahiro Takatsuka (masa@jbeans.net)
40 * @see MatteBorder
41 */
42
43 public class TiledMatteBorder extends MatteBorder implements Serializable {
44 protected Icon tileIconAlt;
45
46 /***
47 * Creates a matte border with the specified insets and tile icon.
48 * The two tile icons have to be the same size.
49 *
50 * @param top the top inset of the border
51 * @param left the left inset of the border
52 * @param bottom the bottom inset of the border
53 * @param right the right inset of the border
54 * @param tileIcon the icon to be used for tiling the border
55 * @param tileIconAlt the alternate icon to be used for tiling the border
56 */
57 public TiledMatteBorder(int top, int left, int bottom, int right, Icon tileIcon, Icon tileIconAlt) {
58 super(top, left, bottom, right, tileIcon);
59 if (tileIcon.getIconWidth() == tileIconAlt.getIconWidth() &&
60 tileIcon.getIconHeight() == tileIconAlt.getIconHeight()) {
61 this.tileIconAlt = tileIconAlt;
62 } else {
63 this.tileIconAlt = tileIcon;
64 }
65 }
66
67 /***
68 * Creates a matte border with the specified tile icon. The
69 * insets will be calculated dynamically based on the size of
70 * the tile icon, where the top and bottom will be equal to the
71 * tile icon's height, and the left and right will be equal to
72 * the tile icon's width.
73 * @param tileIcon the icon to be used for tiling the border
74 * @param tileIconAlt the alternate icon to be used for tiling the border
75 */
76 public TiledMatteBorder(Icon tileIcon, Icon tileIconAlt) {
77 this(-1,-1,-1,-1, tileIcon, tileIconAlt);
78 }
79
80 /***
81 * Paints the matte border.
82 */
83 public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
84 Insets insets = getBorderInsets(c);
85 Color oldColor = g.getColor();
86 g.translate(x, y);
87
88 // If the tileIcon failed loading, paint as gray.
89 if (this.tileIcon != null) {
90 this.color = (this.tileIcon.getIconWidth() == -1) ?
91 Color.gray : null;
92 }
93
94 if (this.color != null) {
95 g.setColor(this.color);
96 g.fillRect(0, 0, width - insets.right, insets.top);
97 g.fillRect(0, insets.top, insets.left, height - insets.top);
98 g.fillRect(insets.left, height - insets.bottom, width - insets.left, insets.bottom);
99 g.fillRect(width - insets.right, 0, insets.right, height - insets.bottom);
100 } else if (this.tileIcon != null) {
101
102 int tileW = tileIcon.getIconWidth();
103 int tileH = tileIcon.getIconHeight();
104
105 int xpos, ypos, startx, starty;
106 Graphics cg;
107
108 // Paint top matte edge
109 boolean alt = false;
110 cg = g.create();
111 cg.setClip(0, 0, width, insets.top);
112 for (ypos = 0; insets.top - ypos > 0; ypos += tileH) {
113 for (xpos = 0; width - xpos > 0; xpos += tileW) {
114 if (alt) { // alt image
115 this.tileIconAlt.paintIcon(c, cg, xpos, ypos);
116 alt = false;
117 } else { // normal
118 this.tileIcon.paintIcon(c, cg, xpos, ypos);
119 alt = true;
120 }
121 }
122 }
123 cg.dispose();
124
125 // Paint left matte edge
126 cg = g.create();
127 cg.setClip(0, insets.top, insets.left, height - insets.top);
128 starty = insets.top - (insets.top%tileH);
129 startx = 0;
130 for (ypos = starty; height - ypos > 0; ypos += tileH) {
131 for (xpos = startx; insets.left - xpos > 0; xpos += tileW) {
132 if (alt) { // alt image
133 this.tileIconAlt.paintIcon(c, cg, xpos, ypos);
134 alt = false;
135 } else { // normal
136 this.tileIcon.paintIcon(c, cg, xpos, ypos);
137 alt = true;
138 }
139 }
140 }
141 cg.dispose();
142
143 // Paint bottom matte edge
144 cg = g.create();
145 cg.setClip(insets.left, height - insets.bottom, width - insets.left, insets.bottom);
146 starty = (height - insets.bottom) - ((height - insets.bottom)%tileH);
147 startx = insets.left - (insets.left%tileW);
148 for (ypos = starty; height - ypos > 0; ypos += tileH) {
149 for (xpos = startx; width - xpos > 0; xpos += tileW) {
150 if (alt) { // alt image
151 this.tileIconAlt.paintIcon(c, cg, xpos, ypos);
152 alt = false;
153 } else { // normal
154 this.tileIcon.paintIcon(c, cg, xpos, ypos);
155 alt = true;
156 }
157 }
158 }
159 cg.dispose();
160
161 // Paint right matte edge
162 cg = g.create();
163 cg.setClip(width - insets.right, insets.top, insets.right, height - insets.top - insets.bottom);
164 starty = insets.top - (insets.top%tileH);
165 startx = width - insets.right - ((width - insets.right)%tileW);
166 for (ypos = starty; height - ypos > 0; ypos += tileH) {
167 for (xpos = startx; width - xpos > 0; xpos += tileW) {
168 if (alt) { // alt image
169 this.tileIconAlt.paintIcon(c, cg, xpos, ypos);
170 alt = false;
171 } else { // normal
172 this.tileIcon.paintIcon(c, cg, xpos, ypos);
173 alt = true;
174 }
175 }
176 }
177 cg.dispose();
178 }
179 g.translate(-x, -y);
180 g.setColor(oldColor);
181 }
182 }
This page was automatically generated by Maven