1 /* TextWithWaterLevel.java 2 Copyright (C) 2012 Red Hat, Inc. 3 4 This file is part of IcedTea. 5 6 IcedTea 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 IcedTea 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 IcedTea; 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 package net.sourceforge.jnlp.splashscreen.impls.defaultsplashscreen2012; 38 39 import java.awt.Polygon; 40 import java.awt.Color; 41 import java.awt.Font; 42 import java.awt.FontMetrics; 43 import java.awt.Graphics2D; 44 import java.awt.Point; 45 import java.awt.RenderingHints; 46 import java.awt.image.BufferedImage; 47 import java.util.Random; 48 49 public class TextWithWaterLevel extends TextOutlineRenderer { 50 51 private Color waterColor; 52 private Color bgColor; 53 private int percentageOfWater; 54 private Random sea = new Random(); 55 //set to null befor getBackground if waving is needed 56 //or create new TWL ;) 57 private Polygon cachedPolygon; 58 TextWithWaterLevel(String s, Font f)59 public TextWithWaterLevel(String s, Font f) { 60 super(f, s); 61 waterColor = Color.BLUE; 62 bgColor = Color.white; 63 64 } 65 getFutureSize()66 protected Point getFutureSize() { 67 BufferedImage bi = new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB); 68 FontMetrics fm = bi.createGraphics().getFontMetrics(getFont()); 69 int w = fm.stringWidth(getText()); 70 int h = fm.getHeight(); 71 return new Point(w, h); 72 } 73 getBackground()74 public BufferedImage getBackground() { 75 Point p = getFutureSize(); 76 int w = p.x; 77 int h = p.y; 78 if (w <= 0 || h <= 0) { 79 return null; 80 } 81 BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 82 Graphics2D g2d = bi.createGraphics(); 83 g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 84 g2d.setColor(bgColor); 85 g2d.fillRect(0, 0, w, h); 86 if (cachedPolygon == null) { 87 int level = (h * percentageOfWater) / 100; 88 int waveHeight = 10; 89 int waveLength = 20; 90 if (level > waveHeight / 2 + 1) { 91 NatCubic line = new NatCubic(); 92 int x = 0; 93 while (x < w + 2 * waveLength) { 94 line.addPoint(x, h - level - waveHeight / 2 - sea.nextInt(waveHeight)); 95 x = x + waveLength; 96 } 97 cachedPolygon = line.calcualteResult(); 98 cachedPolygon.addPoint(w, h); 99 cachedPolygon.addPoint(0, h); 100 } 101 } 102 g2d.setColor(waterColor); 103 if (cachedPolygon != null) { 104 g2d.fillPolygon(cachedPolygon); 105 } 106 //line.paint(g2d); 107 //FlodFill.floodFill(bi, waterColor, new Point(1, h - 1)); 108 return bi; 109 } 110 getCachedPolygon()111 public Polygon getCachedPolygon() { 112 return cachedPolygon; 113 } 114 setCachedPolygon(Polygon cachedPolygon)115 public void setCachedPolygon(Polygon cachedPolygon) { 116 this.cachedPolygon = cachedPolygon; 117 } 118 119 @Override cutTo(Graphics2D g2, int x, int y)120 public void cutTo(Graphics2D g2, int x, int y) { 121 if (this.getImg() == null) { 122 this.setImg(getBackground()); 123 } 124 if (this.getImg() == null) { 125 return; 126 } 127 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 128 g2.setFont(getFont()); 129 g2.setColor(getTextOutline()); 130 g2.drawString(getText(), x, y - 2); 131 g2.drawString(getText(), x, y + 2); 132 g2.drawString(getText(), x - 2, y); 133 g2.drawString(getText(), x + 2, y); 134 //sorry, cuted text have disturbed borders 135 super.cutTo(g2, x, y); 136 } 137 138 /** 139 * @return the waterColor 140 */ getWaterColor()141 public Color getWaterColor() { 142 return waterColor; 143 } 144 145 /** 146 * @param waterColor the waterColor to set 147 */ setWaterColor(Color waterColor)148 public void setWaterColor(Color waterColor) { 149 this.waterColor = waterColor; 150 } 151 152 /** 153 * @return the bgColor 154 */ getBgColor()155 public Color getBgColor() { 156 return bgColor; 157 } 158 159 /** 160 * @param bgColor the bgColor to set 161 */ setBgColor(Color bgColor)162 public void setBgColor(Color bgColor) { 163 this.bgColor = bgColor; 164 } 165 166 /** 167 * @return the percentageOfWater 168 */ getPercentageOfWater()169 public int getPercentageOfWater() { 170 return percentageOfWater; 171 } 172 173 /** 174 * @param percentageOfWater the percentageOfWater to set 175 */ setPercentageOfWater(int percentageOfWater)176 public void setPercentageOfWater(int percentageOfWater) { 177 this.percentageOfWater = percentageOfWater; 178 } 179 } 180