This commit is contained in:
Flare Microsystems
2024-03-03 21:58:56 -08:00
parent f7f24dfbe5
commit 5e21c7725a
17 changed files with 501 additions and 40 deletions

View File

@@ -58,7 +58,7 @@ public class RenderPanel extends JPanel implements Runnable {
{ {
e.printStackTrace(); e.printStackTrace();
} }
testString = "The sandwiches at gas stations\nare disgusting, we advise you\ndo not eat them".split("\n"); testString = "".split("\n");
new Thread(this).start(); new Thread(this).start();
} }
@@ -157,13 +157,13 @@ public class RenderPanel extends JPanel implements Runnable {
// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
// RenderingHints.VALUE_ANTIALIAS_ON); // RenderingHints.VALUE_ANTIALIAS_ON);
drawOutlinedString(g2d, 60, HEADERBAR_Y + 18, "Your local forecast", Color.WHITE, Color.BLACK, 1); drawOutlinedString(g2d, 60, HEADERBAR_Y + 18, "7 Day Forecast", Color.WHITE, Color.BLACK, 1);
int sw = g2d.getFontMetrics().stringWidth(dateString); int sw = g2d.getFontMetrics().stringWidth(dateString);
drawOutlinedString(g2d, W - sw - 60, TIMEBAR_Y + 18, dateString, Color.WHITE, Color.BLACK, 1); drawOutlinedString(g2d, W - sw - 60, TIMEBAR_Y + 18, dateString, Color.WHITE, Color.BLACK, 1);
sw = g2d.getFontMetrics().stringWidth(timeString); sw = g2d.getFontMetrics().stringWidth(timeString);
drawOutlinedString(g2d, W - sw - 60, TIMEBAR_Y + 36, timeString, Color.WHITE, Color.BLACK, 1); drawOutlinedString(g2d, W - sw - 60, TIMEBAR_Y + 36, timeString, Color.WHITE, Color.BLACK, 1);
g2d.setFont(font.deriveFont(36F)); g2d.setFont(font.deriveFont(36F));
drawOutlinedString(g2d, 60, HEADERBAR_Y + 52, "New Westminster, BC", Color.YELLOW, Color.BLACK, 2); drawOutlinedString(g2d, 60, HEADERBAR_Y + 52, "Burnaby, BC", Color.YELLOW, Color.BLACK, 2);
int w2 = g2d.getFontMetrics().stringWidth("EXTREME WEATHER ADVISORY"); int w2 = g2d.getFontMetrics().stringWidth("EXTREME WEATHER ADVISORY");
drawOutlinedString(g2d, (W >> 1) - (w2 >> 1), TOPBAR_HEIGHT + 48, "EXTREME WEATHER ADVISORY", Color.RED, Color.BLACK, 2); drawOutlinedString(g2d, (W >> 1) - (w2 >> 1), TOPBAR_HEIGHT + 48, "EXTREME WEATHER ADVISORY", Color.RED, Color.BLACK, 2);
@@ -176,12 +176,27 @@ public class RenderPanel extends JPanel implements Runnable {
// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, // g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
// RenderingHints.VALUE_ANTIALIAS_ON); // RenderingHints.VALUE_ANTIALIAS_ON);
IconProvider.drawIcon(g2d, IconProvider.SNOWFLAKE, 80, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.CLOUD, 160, 300, 80, animationTick); IconProvider.drawIcon(g2d, IconProvider.SUN, 80, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.PARTLY_CLOUDY, 160 + 80, 300, 80, animationTick); IconProvider.drawIcon(g2d, IconProvider.CLOUD, 160, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.CLOUDY_CLOUDY, 160 + 160, 300, 80, animationTick); IconProvider.drawIcon(g2d, IconProvider.PARTLY_CLOUDY, 160 + 80, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN, 160 + 160 + 80, 300, 80, animationTick); IconProvider.drawIcon(g2d, IconProvider.CLOUDY_CLOUDY, 160 + 160, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.SCATTERD_SHOWERS, 160 + 160 + 160, 300, 80, animationTick); IconProvider.drawIcon(g2d, IconProvider.SCATTERD_SHOWERS, 160 + 160 + 80, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.SNOWFLAKE, 160 + 160 + 160, 220, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.BLIZZARD, 80, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.SNOW, 160, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.FREEZING_RAIN, 160 + 80, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_SNOW, 160 + 160, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.LIGHTNING_OVERLAY, 160 + 160+80, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.LIGHTNING_STORM, 160 + 160+160, 140, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_LIGHTEST, 80, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_LIGHT, 160, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN, 160 + 80, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_HEAVY, 160 + 160, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_HEAVIEST, 160 + 160 + 80, 300, 80, animationTick);
IconProvider.drawIcon(g2d, IconProvider.RAIN_VANCOUVER, 160 + 160 + 160, 300, 80, animationTick);
g2d.dispose(); g2d.dispose();
g.drawImage(frameBuffer, 0, 0, getWidth(), getHeight(), this); g.drawImage(frameBuffer, 0, 0, getWidth(), getHeight(), this);

View File

@@ -0,0 +1,5 @@
package com.flaremicro.flaretv.visualforecast.flavour;
public interface Flavour {
}

View File

@@ -0,0 +1,5 @@
package com.flaremicro.flaretv.visualforecast.forecast;
public class ForecastInformation {
}

View File

@@ -3,5 +3,6 @@ package com.flaremicro.flaretv.visualforecast.icons;
import java.awt.Graphics2D; import java.awt.Graphics2D;
public interface Icon { public interface Icon {
public boolean isAnimated();
public void drawIcon(Graphics2D g2d, float scale, int animationStep); public void drawIcon(Graphics2D g2d, float scale, int animationStep);
} }

View File

@@ -3,39 +3,53 @@ package com.flaremicro.flaretv.visualforecast.icons;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import com.flaremicro.flaretv.visualforecast.icons.impl.BlizzardIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.CloudIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.LightningIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.LightningOverlay;
import com.flaremicro.flaretv.visualforecast.icons.impl.LightningStormIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.PartlyCloudyIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.RainIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.RainSnowIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.SmallCloudIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.SnowIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.SnowflakeIcon;
import com.flaremicro.flaretv.visualforecast.icons.impl.SunIcon;
public class IconProvider { public class IconProvider {
public static int SUN = 0;
public static int CLOUD = 1;
public static int PARTLY_CLOUDY = 2;
public static int CLOUDY_CLOUDY = 3;
public static int RAIN = 4;
public static int SCATTERD_SHOWERS = 5;
public static int SNOWFLAKE = 6;
private static final Icon[] CLASS_DEFS = new Icon[64]; public static final Icon SUN = new SunIcon();
public static final Icon CLOUD = new CloudIcon();
public static final Icon PARTLY_CLOUDY = new PartlyCloudyIcon(CLOUD, SUN);
public static final Icon CLOUDY_CLOUDY = new PartlyCloudyIcon(CLOUD, CLOUD);
public static final Icon RAIN_LIGHTEST = new RainIcon(2, 2F, CLOUD);
public static final Icon RAIN_LIGHT = new RainIcon(3, 2F, CLOUD);
public static final Icon RAIN = new RainIcon(3, 1F, CLOUD);
public static final Icon RAIN_HEAVY = new RainIcon(4, 1F, CLOUD);
public static final Icon RAIN_HEAVIEST = new RainIcon(5, 1F, CLOUD);
public static final Icon RAIN_VANCOUVER = new RainIcon(6, 1F, CLOUD);
public static final Icon SCATTERD_SHOWERS = new PartlyCloudyIcon(new RainIcon(2, 4F, CLOUD), SUN);
public static final Icon SNOWFLAKE = new SnowflakeIcon();
public static final Icon SNOW = new SnowIcon(CLOUD, SNOWFLAKE);
public static final Icon BLIZZARD = new BlizzardIcon(CLOUD, SNOWFLAKE);
public static final Icon RAIN_SNOW = new RainSnowIcon(RAIN_LIGHTEST, SNOWFLAKE, true);
public static final Icon FREEZING_RAIN = new RainSnowIcon(RAIN_LIGHT, SNOWFLAKE, false);
public static final Icon LIGHTNING_BOLT = new LightningIcon();
public static final Icon LIGHTNING_STORM = new LightningStormIcon(CLOUD, LIGHTNING_BOLT);
public static final Icon SMALL_CLOUD = new SmallCloudIcon();
public static final Icon LIGHTNING_OVERLAY = new LightningOverlay(SMALL_CLOUD, LIGHTNING_BOLT, BLIZZARD);
static{ public static void drawIcon(Graphics2D g2d, Icon icon, int x, int y, int scale, int animationStep)
CLASS_DEFS[SUN] = new SunIcon();
CLASS_DEFS[CLOUD] = new CloudIcon();
CLASS_DEFS[PARTLY_CLOUDY] = new PartlyCloudyIcon(CLASS_DEFS[CLOUD], CLASS_DEFS[SUN]);
CLASS_DEFS[CLOUDY_CLOUDY] = new PartlyCloudyIcon(CLASS_DEFS[CLOUD], CLASS_DEFS[CLOUD]);
CLASS_DEFS[RAIN] = new RainIcon(2, 1F, CLASS_DEFS[CLOUD]);
CLASS_DEFS[SCATTERD_SHOWERS] = new PartlyCloudyIcon(new RainIcon(2, 4F, CLASS_DEFS[CLOUD]), CLASS_DEFS[SUN]);
CLASS_DEFS[SNOWFLAKE] = new SnowflakeIcon();
}
public static void drawIcon(Graphics2D g2d, int icon, int x, int y, int scale, int animationStep)
{ {
if(icon >= 0 && CLASS_DEFS.length > icon) if(icon != null)
{ {
AffineTransform af = g2d.getTransform(); AffineTransform af = g2d.getTransform();
g2d.translate(x, y); g2d.translate(x, y);
g2d.scale(scale, scale); g2d.scale(scale, scale);
//1g2d.setColor(Color.RED); //1g2d.setColor(Color.RED);
//g2d.fill(new Rectangle2D.Float(0, 0, 1F, 1F)); //g2d.fill(new Rectangle2D.Float(0, 0, 1F, 1F));
CLASS_DEFS[icon].drawIcon(g2d, scale, animationStep); icon.drawIcon(g2d, scale, animationStep);
g2d.setTransform(af); g2d.setTransform(af);
} }
} }

View File

@@ -0,0 +1,50 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class BlizzardIcon implements Icon {
private final Icon cloudIcon;
private final Icon snowflakeIcon;
public BlizzardIcon(Icon cloudIcon, Icon snowflakeIcon)
{
this.cloudIcon = cloudIcon;
this.snowflakeIcon = snowflakeIcon;
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
AffineTransform af = g2d.getTransform();
g2d.scale(0.25F, 0.25F);
g2d.translate(0, 3);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(1, -1);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(1, 1);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(1, -1);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.setTransform(af);
g2d.translate(0F, -0.10F);
g2d.scale(1F, 0.8F);
cloudIcon.drawIcon(g2d, scale, animationStep);
g2d.setTransform(af);
g2d.translate(0.3F, 0);
g2d.scale(0.7F, 0.7F);
snowflakeIcon.drawIcon(g2d, scale*0.7F, animationStep);
g2d.setTransform(af);
}
@Override
public boolean isAnimated() {
return cloudIcon.isAnimated() || snowflakeIcon.isAnimated();
}
}

View File

@@ -1,10 +1,12 @@
package com.flaremicro.flaretv.visualforecast.icons; package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class CloudIcon implements Icon { public class CloudIcon implements Icon {
Ellipse2D.Float[] cloudCircles = new Ellipse2D.Float[]{ Ellipse2D.Float[] cloudCircles = new Ellipse2D.Float[]{
new Ellipse2D.Float(0, 0.5F, 0.28F, 0.325F), new Ellipse2D.Float(0, 0.5F, 0.28F, 0.325F),
@@ -86,4 +88,10 @@ public class CloudIcon implements Icon {
} }
@Override
public boolean isAnimated() {
return false;
}
} }

View File

@@ -0,0 +1,87 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Path2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class LightningIcon implements Icon {
Path2D.Float boltPath = new Path2D.Float();
Path2D.Float shinePath = new Path2D.Float();
Color[] shine = {
new Color(0xFFDD00),
new Color(0xFFFFFF),
new Color(0xFFFFFF),
new Color(0xFFEE88),
new Color(0xFFDD00),
new Color(0xFFFFFF),
new Color(0xFFFFFF),
new Color(0xFFEE88),
new Color(0xFFDD00),
new Color(0xFFDD00),
new Color(0xFFDD00),
};
Color[] bolt = {
new Color(0xFFFF00),
new Color(0xFFDD00),
new Color(0xFFDD00),
new Color(0xFFEE00),
new Color(0xFFFF00),
new Color(0xFFDD00),
new Color(0xFFDD00),
new Color(0xFFEE00),
new Color(0xFFFF00),
new Color(0xFFFF00),
new Color(0xFFFF00),
};
public LightningIcon()
{
boltPath.moveTo(0.380, 0);
boltPath.lineTo(0.680, 0);
boltPath.lineTo(0.577, 0.206);
boltPath.lineTo(0.750, 0.206);
boltPath.lineTo(0.545, 0.617);
boltPath.lineTo(0.678, 0.617);
boltPath.lineTo(0.330, 1);
boltPath.lineTo(0.453, 0.679);
boltPath.lineTo(0.333, 0.679);
boltPath.lineTo(0.461, 0.360);
boltPath.lineTo(0.250, 0.360);
boltPath.closePath();
shinePath.moveTo(0.417, 0.0);
shinePath.lineTo(0.518, 0);
shinePath.lineTo(0.413,0.260);
shinePath.lineTo(0.586,0.260);
shinePath.lineTo(0.417,0.631);
shinePath.lineTo(0.550,0.631);
shinePath.lineTo(0.349,0.970);
shinePath.lineTo(0.489,0.666);
shinePath.lineTo(0.369,0.666);
shinePath.lineTo(0.508,0.327);
shinePath.lineTo(0.297,0.327);
shinePath.closePath();
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
g2d.setStroke(new BasicStroke(4/scale));
g2d.setColor(Color.BLACK);
g2d.draw(boltPath);
g2d.setColor(bolt[animationStep % bolt.length]);
g2d.fill(boltPath);
g2d.setColor(shine[animationStep % shine.length]);
g2d.fill(shinePath);
}
@Override
public boolean isAnimated() {
return true;
}
}

View File

@@ -0,0 +1,39 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.Graphics2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class LightningOverlay implements Icon {
private final Icon boltIcon;
private final Icon smallCloudIcon;
private final Icon weatherIcon;
public LightningOverlay(Icon smallCloudIcon, Icon boltIcon, Icon weatherIcon) {
this.smallCloudIcon = smallCloudIcon;
this.boltIcon = boltIcon;
this.weatherIcon = weatherIcon;
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
weatherIcon.drawIcon(g2d, scale, animationStep);
g2d.scale(0.8F, 0.5F);
g2d.translate(0.3F, 0.8F);
boltIcon.drawIcon(g2d, scale/1.5F, animationStep);
g2d.translate(-0.3F, -0.8F);
g2d.scale(1.25F, 2);
g2d.scale(0.6F, 0.4F);
g2d.translate(0.6F, 0.5F);
smallCloudIcon.drawIcon(g2d, scale/2, animationStep);
g2d.translate(-0.6F, -0.5F);
g2d.scale(1.66666666667F, 2.5F);
}
@Override
public boolean isAnimated() {
return weatherIcon.isAnimated() || boltIcon.isAnimated() || smallCloudIcon.isAnimated();
}
}

View File

@@ -0,0 +1,38 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class LightningStormIcon implements Icon {
private final Icon boltIcon;
private final Icon cloudIcon;
public LightningStormIcon(Icon cloudIcon, Icon boltIcon)
{
this.cloudIcon = cloudIcon;
this.boltIcon = boltIcon;
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
g2d.setStroke(new BasicStroke(4/scale));
g2d.translate(0F, 0.15F);
g2d.scale(0.8F, 0.8F);
boltIcon.drawIcon(g2d, scale, animationStep);
g2d.scale(1.25F, 1.25F);
g2d.translate(0F, -0.25F);
g2d.scale(1F, 0.8F);
cloudIcon.drawIcon(g2d, scale, animationStep);
g2d.scale(1F, 1.25F);
g2d.translate(0F, 0.10F);
}
@Override
public boolean isAnimated() {
return cloudIcon.isAnimated() || boltIcon.isAnimated();
}
}

View File

@@ -1,7 +1,9 @@
package com.flaremicro.flaretv.visualforecast.icons; package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class PartlyCloudyIcon implements Icon { public class PartlyCloudyIcon implements Icon {
private Icon cloud; private Icon cloud;
private Icon sun; private Icon sun;
@@ -25,4 +27,9 @@ public class PartlyCloudyIcon implements Icon {
g2d.translate(0, -0.07F); g2d.translate(0, -0.07F);
} }
@Override
public boolean isAnimated() {
return sun.isAnimated() || cloud.isAnimated();
}
} }

View File

@@ -1,10 +1,12 @@
package com.flaremicro.flaretv.visualforecast.icons; package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class RainIcon implements Icon { public class RainIcon implements Icon {
private final int rainCount; private final int rainCount;
private final float rainSpace; private final float rainSpace;
@@ -73,4 +75,9 @@ public class RainIcon implements Icon {
g2d.translate(0F, 0.10F); g2d.translate(0F, 0.10F);
} }
@Override
public boolean isAnimated() {
return true;
}
} }

View File

@@ -0,0 +1,46 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.Graphics2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class RainSnowIcon implements Icon {
private final Icon rainIcon;
private final Icon snowflakeIcon;
private final boolean snow;
public RainSnowIcon(Icon rainIcon, Icon snowflakeIcon, boolean snow)
{
this.rainIcon = rainIcon;
this.snowflakeIcon = snowflakeIcon;
this.snow = snow;
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
if(snow)
{
g2d.scale(0.25F, 0.25F);
g2d.translate(2, 3);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(1, -1);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(-3, -2);
g2d.scale(4, 4);
}
rainIcon.drawIcon(g2d, scale, animationStep);
g2d.translate(0.3F, 0);
g2d.scale(0.7F, 0.7F);
snowflakeIcon.drawIcon(g2d, scale*0.7F, animationStep);
g2d.scale(1.42857142857F, 1.42857142857F);
g2d.translate(-0.3F, 0);
}
@Override
public boolean isAnimated() {
return rainIcon.isAnimated() || snowflakeIcon.isAnimated();
}
}

View File

@@ -0,0 +1,64 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class SmallCloudIcon implements Icon {
Ellipse2D.Float[] cloudCircles = new Ellipse2D.Float[]{
new Ellipse2D.Float(0.456F, 0.241F, 0.346F, 0.748F),
new Ellipse2D.Float(0.655F, 0.238F, 0.356F, 0.748F),
new Ellipse2D.Float(0.480F, 0.043F, 0.341F, 0.523F),
new Ellipse2D.Float(0.191F, 0.000F, 0.454F, 0.656F),
new Ellipse2D.Float(0.217F, 0.261F, 0.454F, 0.732F),
new Ellipse2D.Float(0.000F, 0.199F, 0.428F, 0.801F)
};
Ellipse2D.Float[] lightCircles = new Ellipse2D.Float[]{
new Ellipse2D.Float(0.196F, 0.052F, 0.439F, 0.748F),
new Ellipse2D.Float(0.030F, 0.230F, 0.439F, 0.654F),
new Ellipse2D.Float(0.709F, 0.300F, 0.218F, 0.335F),
new Ellipse2D.Float(0.429F, 0.498F, 0.218F, 0.335F)
};
Ellipse2D.Float[] overLight = new Ellipse2D.Float[]{
new Ellipse2D.Float(0.183F, 0.124F, 0.478F, 0.713F),
new Ellipse2D.Float(0.040F, 0.264F, 0.478F, 0.713F),
new Ellipse2D.Float(0.716F, 0.335F, 0.237F, 0.365F),
new Ellipse2D.Float(0.437F, 0.532F, 0.237F, 0.365F)
};
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(4/scale));
for(int i = 0; i < cloudCircles.length; i++)
{
g2d.draw(cloudCircles[i]);
}
g2d.setColor(Color.LIGHT_GRAY);
for(int i = 0; i < cloudCircles.length; i++)
{
g2d.fill(cloudCircles[i]);
}
for(int i = 0; i < lightCircles.length; i++)
{
g2d.setColor(Color.LIGHT_GRAY.brighter());
g2d.fill(lightCircles[i]);
g2d.setColor(Color.LIGHT_GRAY);
g2d.fill(overLight[i]);
}
}
@Override
public boolean isAnimated() {
return false;
}
}

View File

@@ -0,0 +1,46 @@
package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class SnowIcon implements Icon {
private final Icon cloudIcon;
private final Icon snowflakeIcon;
public SnowIcon(Icon cloudIcon, Icon snowflakeIcon)
{
this.cloudIcon = cloudIcon;
this.snowflakeIcon = snowflakeIcon;
}
@Override
public void drawIcon(Graphics2D g2d, float scale, int animationStep) {
AffineTransform af = g2d.getTransform();
g2d.scale(0.25F, 0.25F);
g2d.translate(0.5F, 2F);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.translate(2F, 1F);
snowflakeIcon.drawIcon(g2d, scale*0.25F, animationStep);
g2d.setTransform(af);
g2d.translate(0F, -0.10F);
g2d.scale(1F, 0.8F);
cloudIcon.drawIcon(g2d, scale, animationStep);
g2d.setTransform(af);
g2d.translate(0.3F, 0);
g2d.scale(0.7F, 0.7F);
snowflakeIcon.drawIcon(g2d, scale*0.7F, animationStep);
g2d.setTransform(af);
}
@Override
public boolean isAnimated() {
return snowflakeIcon.isAnimated() || cloudIcon.isAnimated();
}
}

View File

@@ -1,15 +1,32 @@
package com.flaremicro.flaretv.visualforecast.icons; package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class SnowflakeIcon implements Icon { public class SnowflakeIcon implements Icon {
Path2D.Float flakePath = new Path2D.Float(); Path2D.Float flakePath = new Path2D.Float();
Path2D.Float gradPath = new Path2D.Float(); Path2D.Float gradPath = new Path2D.Float();
Path2D.Float trianglePath = new Path2D.Float(); Path2D.Float trianglePath = new Path2D.Float();
Color[] animColor = {
new Color(0x2288FF),
new Color(0x4499FF),
new Color(0x66AAFF),
new Color(0x88BBFF),
new Color(0xAACCFF),
new Color(0xCCDDFF),
new Color(0xAACCFF),
new Color(0x88BBFF),
new Color(0x66AAFF),
new Color(0x4499FF),
new Color(0x2288FF),
new Color(0x2288FF),
};
public SnowflakeIcon() public SnowflakeIcon()
{ {
flakePath.moveTo(0.400, 0); flakePath.moveTo(0.400, 0);
@@ -94,13 +111,18 @@ public class SnowflakeIcon implements Icon {
g2d.setColor(Color.WHITE); g2d.setColor(Color.WHITE);
g2d.fill(flakePath); g2d.fill(flakePath);
//g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(new Color(0x2288FF)); g2d.setPaint(animColor[animationStep % animColor.length]);//new Color(0x2288FF));
g2d.fill(gradPath); g2d.fill(gradPath);
g2d.setStroke(new BasicStroke(1/scale)); //g2d.setStroke(new BasicStroke(1/scale));
g2d.draw(gradPath); //g2d.draw(gradPath);
//g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setPaint(Color.BLACK); g2d.setColor(Color.BLACK);
g2d.fill(trianglePath); g2d.fill(trianglePath);
} }
@Override
public boolean isAnimated() {
return true;
}
} }

View File

@@ -1,4 +1,4 @@
package com.flaremicro.flaretv.visualforecast.icons; package com.flaremicro.flaretv.visualforecast.icons.impl;
import java.awt.BasicStroke; import java.awt.BasicStroke;
import java.awt.Color; import java.awt.Color;
@@ -6,6 +6,8 @@ import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import com.flaremicro.flaretv.visualforecast.icons.Icon;
public class SunIcon implements Icon { public class SunIcon implements Icon {
Path2D.Float sunPath = new Path2D.Float(); Path2D.Float sunPath = new Path2D.Float();
Ellipse2D.Float sunCircle1 = new Ellipse2D.Float(0.2F, 0.2F, 0.6F, 0.6F); Ellipse2D.Float sunCircle1 = new Ellipse2D.Float(0.2F, 0.2F, 0.6F, 0.6F);
@@ -72,4 +74,9 @@ public class SunIcon implements Icon {
g2d.draw(sunCircle1); g2d.draw(sunCircle1);
} }
@Override
public boolean isAnimated() {
return true;
}
} }