1 package org.columba.mail.gui.tree.util; 17 18 19 23 import java.awt.Color ; 24 import java.awt.GradientPaint ; 25 import java.awt.Graphics2D ; 26 import java.awt.RenderingHints ; 27 import java.awt.SystemColor ; 28 import java.awt.geom.GeneralPath ; 29 import java.awt.geom.Line2D ; 30 import java.awt.image.BufferedImage ; 31 import java.util.HashMap ; 32 import java.util.Map ; 33 34 35 39 public class CArrowImage extends BufferedImage { 40 public static final int ARROW_UP = 0; 42 public static final int ARROW_DOWN = 1; 43 public static final int ARROW_LEFT = 2; 44 public static final int ARROW_RIGHT = 3; 45 46 private GeneralPath _pathArrow = new GeneralPath (); 48 49 public CArrowImage(int nArrowDirection) { 51 this(15, 9, nArrowDirection); 52 } 53 54 public CArrowImage(int nWidth, int nHeight, int nArrowDirection) { 55 super(nWidth, nHeight, TYPE_INT_ARGB_PRE); 56 57 Map map = new HashMap (); 59 map.put(RenderingHints.KEY_ANTIALIASING, 60 RenderingHints.VALUE_ANTIALIAS_ON); 61 map.put(RenderingHints.KEY_RENDERING, 62 RenderingHints.VALUE_RENDER_QUALITY); 63 64 RenderingHints hints = new RenderingHints (map); 65 66 Graphics2D g2 = this.createGraphics(); 67 68 g2.setRenderingHints(hints); 70 71 float h = getHeight(); 72 float w = getWidth(); 73 float w13 = w / 3; 74 float w12 = w / 2; 75 float w23 = (w * 2) / 3; 76 float h13 = h / 3; 77 float h12 = h / 2; 78 float h23 = (h * 2) / 3; 79 80 switch (nArrowDirection) { 81 case ARROW_UP: 82 _pathArrow.moveTo(w12, h12); 83 _pathArrow.lineTo(w12, 0); 84 _pathArrow.lineTo(w, h - 1); 85 _pathArrow.lineTo(0, h - 1); 86 _pathArrow.closePath(); 87 g2.setPaint(new GradientPaint (w13, h13, 88 SystemColor.controlLtHighlight, w, h - 1, 89 SystemColor.controlShadow)); 90 91 g2.fill(_pathArrow); 92 93 g2.setColor(SystemColor.controlDkShadow); 94 g2.draw(new Line2D.Float (0, h - 1, w, h - 1)); 95 g2.setColor(SystemColor.controlShadow); 96 g2.draw(new Line2D.Float (w12, 0, w, h - 1)); 97 g2.setColor(SystemColor.controlLtHighlight); 98 g2.draw(new Line2D.Float (0, h - 1, w12, 0)); 99 100 break; 101 102 case ARROW_DOWN: 103 _pathArrow.moveTo(w12, h12); 104 _pathArrow.lineTo(w, 0); 105 _pathArrow.lineTo(w12, h - 1); 106 _pathArrow.closePath(); 107 g2.setPaint(new GradientPaint (0, 0, SystemColor.controlLtHighlight, 108 w23, h23, SystemColor.controlShadow)); 109 g2.fill(_pathArrow); 110 111 g2.setColor(SystemColor.controlDkShadow); 112 g2.draw(new Line2D.Float (w, 0, w12, h - 1)); 113 g2.setColor(SystemColor.controlShadow); 114 g2.draw(new Line2D.Float (w12, h - 1, 0, 0)); 115 g2.setColor(SystemColor.controlLtHighlight); 116 g2.draw(new Line2D.Float (0, 0, w, 0)); 117 118 break; 119 120 case ARROW_LEFT: 121 _pathArrow.moveTo(w - 1, h13); 122 _pathArrow.lineTo(w13, h13); 123 _pathArrow.lineTo(w13, 0); 124 _pathArrow.lineTo(0, h12); 125 _pathArrow.lineTo(w13, h - 1); 126 _pathArrow.lineTo(w13, h23); 127 _pathArrow.lineTo(w - 1, h23); 128 _pathArrow.closePath(); 129 g2.setPaint(new GradientPaint (0, 0, Color.white, 130 0, h, SystemColor.controlShadow)); 132 g2.fill(_pathArrow); 133 134 _pathArrow.reset(); 135 _pathArrow.moveTo(w13, 0); 136 _pathArrow.lineTo(w13, h13); 137 _pathArrow.moveTo(w - 1, h13); 138 _pathArrow.lineTo(w - 1, h23); 139 _pathArrow.lineTo(w13, h23); 140 _pathArrow.lineTo(w13, h - 1); 141 g2.setColor(SystemColor.controlDkShadow); 142 g2.draw(_pathArrow); 143 144 g2.setColor(SystemColor.controlShadow); 145 g2.draw(new Line2D.Float (0, h12, w13, h - 1)); 146 147 _pathArrow.reset(); 148 _pathArrow.moveTo(0, h12); 149 _pathArrow.lineTo(w13, 0); 150 _pathArrow.moveTo(w13, h13); 151 _pathArrow.lineTo(w - 1, h13); 152 g2.setColor(SystemColor.controlLtHighlight); 153 g2.draw(_pathArrow); 154 155 break; 156 157 case ARROW_RIGHT:default: { 158 _pathArrow.moveTo(0, h13); 159 _pathArrow.lineTo(w23, h13); 160 _pathArrow.lineTo(w23, 0); 161 _pathArrow.lineTo(w - 1, h12); 162 _pathArrow.lineTo(w23, h - 1); 163 _pathArrow.lineTo(w23, h23); 164 _pathArrow.lineTo(0, h23); 165 _pathArrow.closePath(); 166 g2.setPaint(new GradientPaint (0, 0, Color.white, 167 0, h, SystemColor.controlShadow)); 169 g2.fill(_pathArrow); 170 171 _pathArrow.reset(); 172 _pathArrow.moveTo(0, h23); 173 _pathArrow.lineTo(w23, h23); 174 _pathArrow.moveTo(w23, h - 1); 175 _pathArrow.lineTo(w - 1, h12); 176 g2.setColor(SystemColor.controlDkShadow); 177 g2.draw(_pathArrow); 178 179 g2.setColor(SystemColor.controlShadow); 180 g2.draw(new Line2D.Float (w - 1, h12, w23, 0)); 181 182 _pathArrow.reset(); 183 _pathArrow.moveTo(w23, 0); 184 _pathArrow.lineTo(w23, h13); 185 _pathArrow.lineTo(0, h13); 186 _pathArrow.lineTo(0, h23); 187 _pathArrow.moveTo(w23, h23); 188 _pathArrow.lineTo(w23, h - 1); 189 g2.setColor(SystemColor.controlLtHighlight); 190 g2.draw(_pathArrow); 191 192 break; 193 } 194 } 195 } 196 } 197 | Popular Tags |