1 /* SynthGraphicsUtils.java -- Wrapper for graphics primitives used in Synth 2 Copyright (C) 2006 Free Software Foundation, Inc. 3 4 This file is part of GNU Classpath. 5 6 GNU Classpath is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 GNU Classpath is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with GNU Classpath; see the file COPYING. If not, write to the 18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 19 02110-1301 USA. 20 21 Linking this library statically or dynamically with other modules is 22 making a combined work based on this library. Thus, the terms and 23 conditions of the GNU General Public License cover the whole 24 combination. 25 26 As a special exception, the copyright holders of this library give you 27 permission to link this library with independent modules to produce an 28 executable, regardless of the license terms of these independent 29 modules, and to copy and distribute the resulting executable under 30 terms of your choice, provided that you also meet, for each linked 31 independent module, the terms and conditions of the license of that 32 module. An independent module is a module which is not derived from 33 or based on this library. If you modify this library, you may extend 34 this exception to your version of the library, but you are not 35 obligated to do so. If you do not wish to do so, delete this 36 exception statement from your version. */ 37 38 39 package javax.swing.plaf.synth; 40 41 import gnu.classpath.NotImplementedException; 42 43 import java.awt.Component; 44 import java.awt.Dimension; 45 import java.awt.Font; 46 import java.awt.FontMetrics; 47 import java.awt.Graphics; 48 import java.awt.Rectangle; 49 50 import javax.swing.Icon; 51 import javax.swing.SwingUtilities; 52 53 /** 54 * Wrapper for graphics primitives used in Synth. 55 * 56 * @author Roman Kennke (kennke@aicas.com) 57 * 58 * @since 1.5 59 */ 60 public class SynthGraphicsUtils 61 62 { 63 /** 64 * Creates a new <code>SynthGraphicsUtils</code> object. 65 */ SynthGraphicsUtils()66 public SynthGraphicsUtils() 67 { 68 // Nothing to do here. 69 } 70 71 /** 72 * Draws a line from (x1,y1) to (x2,y2). 73 * 74 * @param ctx the synth context, identifies the region 75 * @param paintKey identifies the portion of the component to be painted, may 76 * be <code>null</code> 77 * @param g the graphics context to use for painting 78 * @param x1 the x coordinate of the start point 79 * @param y1 the y coordinate of the start point 80 * @param x2 the x coordinate of the end point 81 * @param y2 the y coordinate of the end point 82 */ drawLine(SynthContext ctx, Object paintKey, Graphics g, int x1, int y1, int x2, int y2)83 public void drawLine(SynthContext ctx, Object paintKey, Graphics g, int x1, 84 int y1, int x2, int y2) 85 { 86 // TODO: Correct? 87 g.drawLine(x1, y1, x2, y2); 88 } 89 90 /** 91 * Lays out a label and (if non-null) an icon. The calculated coordinates are 92 * then stored in <code>viewR</code>, <code>iconR</code> and 93 * <code>textR</code>. 94 * 95 * The alignment and position parameters may be one of the alignment or 96 * position constants defined in {@link javax.swing.SwingConstants}. 97 * 98 * @param ctx the synth context, identifies the current region 99 * @param fm the font metrics to use to fetch the text measures 100 * @param text the text to lay out, may be <code>null</code> 101 * @param icon the icon to lay out, may be <code>null</code> 102 * @param hAlign the horizontal alignment of the label 103 * @param vAlign the vertical alignment of the label 104 * @param hTextPos the horizontal text position 105 * @param vTextPos the vertical text position 106 * @param viewR the view rectangle (return parameter) 107 * @param iconR the icon rectangle (return parameter) 108 * @param textR the text rectangle (return parameter) 109 * @param iconTextGap the gap between text and label 110 * 111 * @return the label text, may be shortened 112 */ layoutText(SynthContext ctx, FontMetrics fm, String text, Icon icon, int hAlign, int vAlign, int hTextPos, int vTextPos, Rectangle viewR, Rectangle iconR, Rectangle textR, int iconTextGap)113 public String layoutText(SynthContext ctx, FontMetrics fm, String text, 114 Icon icon, int hAlign, int vAlign, int hTextPos, 115 int vTextPos, Rectangle viewR, Rectangle iconR, 116 Rectangle textR, int iconTextGap) 117 { 118 return SwingUtilities.layoutCompoundLabel(fm, text, icon, vAlign, hAlign, 119 vTextPos, hTextPos, viewR, iconR, 120 textR, iconTextGap); 121 } 122 123 /** 124 * Returns the width of the string <code>text</code> for the specified font 125 * and font metrics. 126 * 127 * @param ctx identifies the current region 128 * @param font the font 129 * @param fm the font metrics to use 130 * @param text the text to be measured 131 * 132 * @return the width of the string <code>text</code> for the specified font 133 * and font metrics 134 */ computeStringWidth(SynthContext ctx, Font font, FontMetrics fm, String text)135 public int computeStringWidth(SynthContext ctx, Font font, FontMetrics fm, 136 String text) 137 { 138 return fm.stringWidth(text); 139 } 140 141 /** 142 * Calculates the minimums size that is needed to render the label with 143 * <code>text</code> and <code>icon</code> correctly. 144 * 145 * @param ctx identifies the current region 146 * @param font the font to use 147 * @param text the label text 148 * @param icon the label icon 149 * @param hAlign the horizontal alignment 150 * @param vAlign the vertical alignment 151 * @param hTextPosition the horizontal text position 152 * @param vTextPosition the vertical text position 153 * @param iconTextGap the gap between icon and text 154 * @param mnemonicIndex index to the mnemonic character within 155 * <code>text</code> 156 * 157 * @return the minimums size that is needed to render the label with 158 * <code>text</code> and <code>icon</code> correctly 159 */ getMinimumSize(SynthContext ctx, Font font, String text, Icon icon, int hAlign, int vAlign, int hTextPosition,int vTextPosition, int iconTextGap,int mnemonicIndex)160 public Dimension getMinimumSize(SynthContext ctx, Font font, String text, 161 Icon icon, int hAlign, int vAlign, 162 int hTextPosition,int vTextPosition, 163 int iconTextGap,int mnemonicIndex) 164 throws NotImplementedException 165 { 166 // FIXME: Implement this correctly. 167 return new Dimension(0, 0); 168 } 169 170 /** 171 * Calculates the preferred size that is needed to render the label with 172 * <code>text</code> and <code>icon</code> correctly. 173 * 174 * @param ctx identifies the current region 175 * @param font the font to use 176 * @param text the label text 177 * @param icon the label icon 178 * @param hAlign the horizontal alignment 179 * @param vAlign the vertical alignment 180 * @param hTextPosition the horizontal text position 181 * @param vTextPosition the vertical text position 182 * @param iconTextGap the gap between icon and text 183 * @param mnemonicIndex index to the mnemonic character within 184 * <code>text</code> 185 * 186 * @return the preferred size that is needed to render the label with 187 * <code>text</code> and <code>icon</code> correctly 188 */ getPreferredSize(SynthContext ctx, Font font, String text, Icon icon, int hAlign, int vAlign, int hTextPosition,int vTextPosition, int iconTextGap,int mnemonicIndex)189 public Dimension getPreferredSize(SynthContext ctx, Font font, String text, 190 Icon icon, int hAlign, int vAlign, 191 int hTextPosition,int vTextPosition, 192 int iconTextGap,int mnemonicIndex) 193 throws NotImplementedException 194 { 195 // FIXME: Implement this correctly. 196 return new Dimension(0, 0); 197 } 198 199 /** 200 * Calculates the maximum size that is needed to render the label with 201 * <code>text</code> and <code>icon</code> correctly. 202 * 203 * @param ctx identifies the current region 204 * @param font the font to use 205 * @param text the label text 206 * @param icon the label icon 207 * @param hAlign the horizontal alignment 208 * @param vAlign the vertical alignment 209 * @param hTextPosition the horizontal text position 210 * @param vTextPosition the vertical text position 211 * @param iconTextGap the gap between icon and text 212 * @param mnemonicIndex index to the mnemonic character within 213 * <code>text</code> 214 * 215 * @return the maximum size that is needed to render the label with 216 * <code>text</code> and <code>icon</code> correctly 217 */ getMaximumSize(SynthContext ctx, Font font, String text, Icon icon, int hAlign, int vAlign, int hTextPosition,int vTextPosition, int iconTextGap,int mnemonicIndex)218 public Dimension getMaximumSize(SynthContext ctx, Font font, String text, 219 Icon icon, int hAlign, int vAlign, 220 int hTextPosition,int vTextPosition, 221 int iconTextGap,int mnemonicIndex) 222 throws NotImplementedException 223 { 224 // FIXME: Implement this correctly. 225 return new Dimension(0, 0); 226 } 227 228 /** 229 * Returns the maximum character height of the font from the component of the 230 * passed in <code>context</code>. 231 * 232 * @param context identifies the current component and region 233 * 234 * @return the maximum character height of the font from the component of the 235 * passed in <code>context</code> 236 */ getMaximumCharHeight(SynthContext context)237 public int getMaximumCharHeight(SynthContext context) 238 { 239 Component comp = context.getComponent(); 240 Font font = comp.getFont(); 241 return comp.getFontMetrics(font).getHeight(); 242 } 243 244 /** 245 * Renders the specified <code>text</code> within the <code>bounds</code>. 246 * 247 * @param ctx identifies the component and region 248 * @param g the graphics context for drawing the tetx 249 * @param text the text to be rendered 250 * @param bounds the bounds within which the text should be rendered 251 * @param mnemonicIndex the index of the mnemonic character within 252 * <code>text</code> 253 */ paintText(SynthContext ctx, Graphics g, String text, Rectangle bounds, int mnemonicIndex)254 public void paintText(SynthContext ctx, Graphics g, String text, 255 Rectangle bounds, int mnemonicIndex) 256 { 257 // FIXME: This is very primitive and should be improved to paint the 258 // mnemonic char. 259 g.drawString(text, bounds.x, bounds.y); 260 } 261 262 /** 263 * Renders the specified <code>text</code> at the specified location. 264 * 265 * @param ctx identifies the component and region 266 * @param g the graphics context for drawing the tetx 267 * @param text the text to be rendered 268 * @param x the X location where the text should be rendered 269 * @param y the Y location where the text should be rendered 270 * @param mnemonicIndex the index of the mnemonic character within 271 * <code>text</code> 272 */ paintText(SynthContext ctx, Graphics g, String text, int x, int y, int mnemonicIndex)273 public void paintText(SynthContext ctx, Graphics g, String text, 274 int x, int y, int mnemonicIndex) 275 { 276 // FIXME: This is very primitive and should be improved to paint the 277 // mnemonic char. 278 g.drawString(text, x, y); 279 } 280 paintText(SynthContext ctx, Graphics g, String text, Icon icon, int hAlign, int vAlign, int hTextPosition, int vTextPosition, int iconTextGap, int mnemonicIndex, int textOffset)281 public void paintText(SynthContext ctx, Graphics g, String text, Icon icon, 282 int hAlign, int vAlign, int hTextPosition, 283 int vTextPosition, int iconTextGap, int mnemonicIndex, 284 int textOffset) 285 throws NotImplementedException 286 { 287 // FIXME: Implement this correctly. 288 } 289 } 290