
eu.hansolo.steelseries.gauges.DisplayCircular Maven / Gradle / Ivy
package eu.hansolo.steelseries.gauges;
/**
*
* @author hansolo
*/
public final class DisplayCircular extends AbstractRadial
{
// Images used to combine layers for background and foreground
private java.awt.image.BufferedImage bImage;
private java.awt.image.BufferedImage fImage;
private java.awt.image.BufferedImage disabledImage;
private java.awt.Font lcdFormerValueFont;
private double oldValue;
private final java.awt.font.FontRenderContext RENDER_CONTEXT = new java.awt.font.FontRenderContext(null, true, true);
private java.awt.font.TextLayout unitLayout;
private final java.awt.geom.Rectangle2D UNIT_BOUNDARY = new java.awt.geom.Rectangle2D.Double();
private java.awt.font.TextLayout valueLayout;
private final java.awt.geom.Rectangle2D VALUE_BOUNDARY = new java.awt.geom.Rectangle2D.Double();
private java.awt.font.TextLayout oldValueLayout;
private final java.awt.geom.Rectangle2D OLD_VALUE_BOUNDARY = new java.awt.geom.Rectangle2D.Double();
private final java.awt.geom.Point2D LCD_POSITION = new java.awt.geom.Point2D.Double();
private final java.awt.Dimension LCD_DIM = new java.awt.Dimension();
public DisplayCircular()
{
super();
setLcdVisible(true);
oldValue = 0;
init(getInnerBounds().width, getInnerBounds().height);
}
@Override
public final AbstractGauge init(final int WIDTH, final int HEIGHT)
{
// Create Background Image
if (bImage != null)
{
bImage.flush();
}
bImage = create_Image(WIDTH, WIDTH);
// Create Foreground Image
if (fImage != null)
{
fImage.flush();
}
fImage = create_Image(WIDTH, WIDTH);
if (isFrameVisible())
{
switch (getFrameType())
{
case ROUND:
FRAME_FACTORY.createRadialFrame(WIDTH, getFrameDesign(), getCustomFrameDesign(), isFrame3dEffectVisible(), bImage);
break;
case SQUARE:
FRAME_FACTORY.createLinearFrame(WIDTH, WIDTH, getFrameDesign(), getCustomFrameDesign(), isFrame3dEffectVisible(), bImage);
break;
default:
FRAME_FACTORY.createRadialFrame(WIDTH, getFrameDesign(), getCustomFrameDesign(), isFrame3dEffectVisible(), bImage);
break;
}
}
if (isBackgroundVisible())
{
create_BACKGROUND_Image(WIDTH, "", "", bImage);
}
create_TITLE_Image(WIDTH, getTitle(), getUnitString(), bImage);
create_LCD_Image(new java.awt.geom.Rectangle2D.Double(((getGaugeBounds().width - WIDTH * 0.6542056075) / 2.0), (getGaugeBounds().height * 0.425), (WIDTH * 0.6542056075), (WIDTH * 0.2990654206)), getLcdColor(), getCustomLcdBackground(), bImage);
LCD_POSITION.setLocation(((getGaugeBounds().width - WIDTH * 0.4) / 2.0), (getGaugeBounds().height - (WIDTH * 0.2990654206)) / 2.0);
LCD_DIM.setSize(WIDTH * 0.6542056075, WIDTH * 0.2990654206);
if (isForegroundVisible())
{
switch(getFrameType())
{
case SQUARE:
FOREGROUND_FACTORY.createLinearForeground(WIDTH, WIDTH, false, bImage);
break;
case ROUND:
default:
FOREGROUND_FACTORY.createRadialForeground(WIDTH, false, getForegroundType(), fImage);
break;
}
}
if (disabledImage != null)
{
disabledImage.flush();
}
disabledImage = create_DISABLED_Image(WIDTH);
if (bImage != null)
{
if (isDigitalFont())
{
setLcdValueFont(LCD_DIGITAL_FONT.deriveFont(0.5f * (WIDTH * 0.2990654206f)));
lcdFormerValueFont = LCD_DIGITAL_FONT.deriveFont(0.2f * (WIDTH * 0.2990654206f));
}
else
{
setLcdValueFont(LCD_STANDARD_FONT.deriveFont(0.46875f * (WIDTH * 0.2990654206f)));
lcdFormerValueFont = LCD_STANDARD_FONT.deriveFont(0.1875f * (WIDTH * 0.2990654206f));
}
if (getUseCustomLcdUnitFont())
{
setLcdUnitFont(getCustomLcdUnitFont().deriveFont(0.1875f * (WIDTH * 0.2990654206f)));
}
else
{
setLcdUnitFont(LCD_STANDARD_FONT.deriveFont(0.1875f * (WIDTH * 0.2990654206f)));
}
}
return this;
}
@Override
protected void paintComponent(java.awt.Graphics g)
{
final java.awt.Graphics2D G2 = (java.awt.Graphics2D) g.create();
G2.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING, java.awt.RenderingHints.VALUE_ANTIALIAS_ON);
G2.setRenderingHint(java.awt.RenderingHints.KEY_RENDERING, java.awt.RenderingHints.VALUE_RENDER_QUALITY);
//G2.setRenderingHint(java.awt.RenderingHints.KEY_DITHERING, java.awt.RenderingHints.VALUE_DITHER_ENABLE);
//G2.setRenderingHint(java.awt.RenderingHints.KEY_ALPHA_INTERPOLATION, java.awt.RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
//G2.setRenderingHint(java.awt.RenderingHints.KEY_COLOR_RENDERING, java.awt.RenderingHints.VALUE_COLOR_RENDER_QUALITY);
G2.setRenderingHint(java.awt.RenderingHints.KEY_STROKE_CONTROL, java.awt.RenderingHints.VALUE_STROKE_PURE);
//G2.setRenderingHint(java.awt.RenderingHints.KEY_FRACTIONALMETRICS, java.awt.RenderingHints.VALUE_FRACTIONALMETRICS_ON);
G2.setRenderingHint(java.awt.RenderingHints.KEY_TEXT_ANTIALIASING, java.awt.RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
// Translate the coordinate system related to insets
G2.translate(getInnerBounds().x, getInnerBounds().y);
// Draw combined background image
G2.drawImage(bImage, 0, 0, null);
// Draw LCD display
if (isLcdVisible() && bImage != null)
{
// Draw lcd text
if (getLcdColor() == eu.hansolo.steelseries.tools.LcdColor.CUSTOM)
{
G2.setColor(getCustomLcdForeground());
}
else
{
G2.setColor(getLcdColor().TEXT_COLOR);
}
G2.setFont(getLcdUnitFont());
final double UNIT_STRING_WIDTH;
if (isLcdUnitStringVisible() && !getLcdUnitString().isEmpty())
{
unitLayout = new java.awt.font.TextLayout(getLcdUnitString(), G2.getFont(), RENDER_CONTEXT);
UNIT_BOUNDARY.setFrame(unitLayout.getBounds());
G2.drawString(getLcdUnitString(), (int) ((LCD_DIM.width - UNIT_BOUNDARY.getWidth()) - LCD_DIM.width * 0.03f + (getGaugeBounds().width - LCD_DIM.width) / 2.0), (int) (LCD_DIM.height * 0.6f + (getGaugeBounds().height - LCD_DIM.height) / 2.0));
UNIT_STRING_WIDTH = UNIT_BOUNDARY.getWidth();
}
else
{
UNIT_STRING_WIDTH = 0;
}
// Draw value
G2.setFont(getLcdValueFont());
valueLayout = new java.awt.font.TextLayout(formatLcdValue(getLcdValue()), G2.getFont(), RENDER_CONTEXT);
VALUE_BOUNDARY.setFrame(valueLayout.getBounds());
G2.drawString(formatLcdValue(getLcdValue()), (int) ((LCD_DIM.width - UNIT_STRING_WIDTH - VALUE_BOUNDARY.getWidth()) - LCD_DIM.width * 0.09 + ((getGaugeBounds().width - LCD_DIM.width) / 2.0)), (int) (LCD_DIM.height * 0.6f + (getGaugeBounds().height - LCD_DIM.height) / 2.0));
// Draw oldValue
G2.setFont(lcdFormerValueFont);
oldValueLayout = new java.awt.font.TextLayout(formatLcdValue(oldValue), G2.getFont(), RENDER_CONTEXT);
OLD_VALUE_BOUNDARY.setFrame(oldValueLayout.getBounds());
G2.drawString(formatLcdValue(oldValue), (int) ((LCD_DIM.width - OLD_VALUE_BOUNDARY.getWidth()) / 2f + (getGaugeBounds().width - LCD_DIM.width) / 2.0), (int) (LCD_DIM.height * 0.9f + (getGaugeBounds().height - LCD_DIM.height) / 2.0));
}
// Draw combined foreground image
G2.drawImage(fImage, 0, 0, null);
if (!isEnabled())
{
G2.drawImage(disabledImage, 0, 0, null);
}
// Translate the coordinate system back to original
G2.translate(-getInnerBounds().x, -getInnerBounds().y);
G2.dispose();
}
@Override
public void setLcdValue(final double VALUE)
{
oldValue = getLcdValue();
super.setLcdValue(VALUE);
}
@Override
public void setLcdVisible(final boolean LCD_VISIBLE)
{
super.setLcdVisible(true);
}
@Override
public java.awt.geom.Point2D getCenter()
{
return new java.awt.geom.Point2D.Double(bImage.getWidth() / 2.0 + getInnerBounds().x, bImage.getHeight() / 2.0 + getInnerBounds().y);
}
@Override
public java.awt.geom.Rectangle2D getBounds2D()
{
return new java.awt.geom.Rectangle2D.Double(bImage.getMinX(), bImage.getMinY(), bImage.getWidth(), bImage.getHeight());
}
@Override
public String toString()
{
return "DisplayCircular";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy