/*
* Copyright 2001-2008 Geert Bevin <gbevin[remove] at uwyn dot com>
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: ElementStyle.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.gui.old;
import java.awt.*;
import com.uwyn.rife.config.Config;
import com.uwyn.rife.gui.Rife;
import com.uwyn.rife.swing.JDialogSystemError;
import com.uwyn.rife.tools.ExceptionUtils;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.RasterFormatException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
public class ElementStyle
{
public static final String MAX_PROPERTY_STRING = "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM";
public static final int MAX_PROPERTY_STRING_LENGTH = MAX_PROPERTY_STRING.length();
private BufferedImage mParamImage = null;
private BufferedImageOp mParamImageOp = null;
private Graphics2D mParamGraphics = null;
private Font mPlainFont = null;
private Font mBoldFont = null;
public FontRenderContext mFontRenderContext = null;
public Color mBodyBackgroundColor = null;
public Color mBodyBackgroundColorSelected = null;
public Color mElementBorderColor = null;
public Color mElementBorderColorSelected = null;
public Color mTitleBorderColor = null;
public Color mTitleTextColor = null;
public Color mExitTextColor = null;
public Color mParamBorderColor = null;
public Color mParamTextColor = null;
public Font mTitleFont = null;
public LineMetrics mTitleFontLineMetrics = null;
public Font mParamFont = null;
public LineMetrics mParamFontLineMetrics = null;
public Font mExitFont = null;
public LineMetrics mExitFontLineMetrics = null;
public float mElementBorderWidth = 0;
public float mTitleMarginWidth = 0;
public float mTitleMarginHeight = 0;
public float mExitMarginWidth = 0;
public float mExitMarginHeight = 0;
public float mParamMarginWidth = 0;
public float mParamMarginHeight = 0;
public float mParamLineWidth = 0;
public float mParamLineLength = 0;
public float mParamLineDashedWidth = 0;
public BasicStroke mParamLineDashedStroke = null;
public ElementStyle(float scaleFactor)
{
getBaseFonts();
setColors();
calculateStyle(scaleFactor);
}
public static void setRenderingHints(Graphics2D g2d, float scaleFactor)
{
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_OFF);
if(scaleFactor < 1)
{
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
}
else
{
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
}
g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
}
private void getBaseFonts()
{
mPlainFont = loadFont("/fonts/trebuchet.ttf");
mBoldFont = loadFont("/fonts/trebuchetbold.ttf");
}
private Font loadFont(String path)
{
InputStream input_stream = null;
InputStreamReader input_stream_reader = null;
Font font = null;
input_stream = this.getClass().getResourceAsStream(path);
if(input_stream != null)
{
try
{
input_stream_reader = new InputStreamReader(input_stream, "ISO8859_1");
if(input_stream_reader != null)
{
try
{
font = Font.createFont(Font.TRUETYPE_FONT, input_stream);
}
catch (IOException e)
{
(new JDialogSystemError(Rife.getMainFrame(), "ElementStyle.loadFont() : IO error while creating the font from resource at '"+path+"' : "+ExceptionUtils.getExceptionStackTrace(e))).setVisible(true);
}
catch (FontFormatException e)
{
(new JDialogSystemError(Rife.getMainFrame(), "ElementStyle.loadFont() : Font format error while creating the font from resource at '"+path+"' : "+ExceptionUtils.getExceptionStackTrace(e))).setVisible(true);
}
}
else
{
(new JDialogSystemError(Rife.getMainFrame(), "ElementStyle.loadFont() : Couldn't create the inputstream reader for the font resource at '"+path+"'.")).setVisible(true);
}
}
catch (UnsupportedEncodingException e)
{
(new JDialogSystemError(Rife.getMainFrame(), "ElementStyle.loadFont() : Error while creating the inputstream reader for the font resource at '"+path+"' : "+ExceptionUtils.getExceptionStackTrace(e))).setVisible(true);
}
}
else
{
(new JDialogSystemError(Rife.getMainFrame(), "ElementStyle.loadFont() : Couldn't open the font resource at '"+path+"'.")).setVisible(true);
}
return font;
}
public void drawParameterText(Graphics2D g2d, String text, Color backgroundColor, int x, int y)
{
mParamGraphics.setBackground(backgroundColor);
Rectangle2D text_size = mParamFont.getStringBounds(text, mFontRenderContext);
int baseline = (int)(mParamFontLineMetrics.getAscent());
mParamGraphics.setClip(0, 0, (int)text_size.getWidth(), mParamImage.getHeight());
mParamGraphics.clearRect(0, 0, (int)text_size.getWidth(), mParamImage.getHeight());
mParamGraphics.drawString(text, 0, baseline);
Shape previous_clip = g2d.getClip();
g2d.clipRect(x-baseline, y-(int)text_size.getWidth(), x-baseline+mParamImage.getHeight(), (int)text_size.getWidth());
try
{
g2d.drawImage(mParamImage, mParamImageOp, x, y);
}
catch (RasterFormatException e)
{
// do nothing
}
g2d.setClip(previous_clip);
}
private void setColors()
{
mBodyBackgroundColor = new Color(220, 255, 200);
mBodyBackgroundColorSelected = new Color(255, 255, 200);
mElementBorderColor = new Color(0, 0, 0);
mElementBorderColorSelected = new Color(0, 0, 0);
mTitleTextColor = new Color(0, 0, 0);
mTitleBorderColor = new Color(0, 0, 0);
mExitTextColor = new Color(0, 0, 0);
mParamTextColor = new Color(0, 0, 0);
mParamBorderColor = new Color(0, 0, 0);
}
public void calculateStyle(float scaleFactor)
{
mFontRenderContext = new FontRenderContext(null, false, false);
mTitleFont = mBoldFont.deriveFont(Font.PLAIN, (int)(13*scaleFactor));
mTitleFontLineMetrics = mTitleFont.getLineMetrics(MAX_PROPERTY_STRING, mFontRenderContext);
mParamFont = mPlainFont.deriveFont(Font.PLAIN, (int)(11*scaleFactor));
mParamFontLineMetrics = mParamFont.getLineMetrics(MAX_PROPERTY_STRING, mFontRenderContext);
mExitFont = mPlainFont.deriveFont(Font.PLAIN, (int)(11*scaleFactor));
mExitFontLineMetrics = mExitFont.getLineMetrics(MAX_PROPERTY_STRING, mFontRenderContext);
mElementBorderWidth = Math.round(scaleFactor);
mTitleMarginWidth = Math.round(5*scaleFactor);
mTitleMarginHeight = Math.round(3*scaleFactor);
mExitMarginWidth = Math.round(2*scaleFactor);
mExitMarginHeight = Math.round(2*scaleFactor);
mParamMarginWidth = Math.round(scaleFactor);
mParamMarginHeight = Math.round(5*scaleFactor);
mParamLineWidth = Math.round(3*scaleFactor);
mParamLineLength = Math.round(Config.getRepInstance().getInt("GRID_SIZE")*2*scaleFactor);
mParamLineDashedWidth = Math.round(scaleFactor);
mParamLineDashedStroke = new BasicStroke(mParamLineDashedWidth, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_BEVEL, 0f, new float[] {3f*scaleFactor}, 0f);
Rectangle2D work_image_size = mParamFont.getStringBounds(MAX_PROPERTY_STRING, mFontRenderContext);
mParamImage = new BufferedImage((int)work_image_size.getWidth(), (int)work_image_size.getHeight(), BufferedImage.TYPE_INT_RGB);
mParamGraphics = mParamImage.createGraphics();
setRenderingHints(mParamGraphics, scaleFactor);
mParamGraphics.setColor(mParamTextColor);
mParamGraphics.setFont(mParamFont);
AffineTransform image_op_transform = AffineTransform.getRotateInstance(Math.toRadians(-90));
image_op_transform.concatenate(AffineTransform.getTranslateInstance(0, -1*(mParamFontLineMetrics.getAscent())));
mParamImageOp = new AffineTransformOp(image_op_transform, mParamGraphics.getRenderingHints());
}
}