package ui.renderer; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; public class AbstractRenderer { protected static Font textFont; protected static FontMetrics textFontMetrics; protected static Font keywordFont; protected static FontMetrics keywordFontMetrics; protected static Font constantFont; protected static FontMetrics constantFontMetrics; protected static Font envFont; protected static FontMetrics envFontMetrics; protected static Color textColor; protected static Color keywordColor; protected static Color constantColor; protected static Color envColor; protected static Color underlineColor; protected static int fontHeight; protected static int fontAscent; protected static int fontDescent; public static float BRACE_LEFT = 1.0f; public static float BRACE_RIGHT = -1.0f; public static void setTextStyle (Font font, FontMetrics fontMetrics, Color fontColor) { textFont = font; textFontMetrics = fontMetrics; textColor = fontColor; } public static void setKeywordStyle (Font font, FontMetrics fontMetrics, Color fontColor) { keywordFont = font; keywordFontMetrics = fontMetrics; keywordColor = fontColor; } public static void setConstantStyle (Font font, FontMetrics fontMetrics, Color fontColor) { constantFont = font; constantFontMetrics = fontMetrics; constantColor = fontColor; } public static void setEnvironmentStyle (Font font, FontMetrics fontMetrics, Color fontColor) { envFont = font; envFontMetrics = fontMetrics; envColor = fontColor; } public static void setUnderlineColor (Color color) { underlineColor = color; } public static void checkFonts() { fontHeight = textFontMetrics.getHeight(); fontAscent = textFontMetrics.getAscent(); fontDescent = textFontMetrics.getDescent(); if (fontHeight < keywordFontMetrics.getHeight()) { fontHeight = keywordFontMetrics.getHeight(); fontAscent = keywordFontMetrics.getAscent(); fontDescent = keywordFontMetrics.getDescent(); } if (fontHeight < constantFontMetrics.getHeight()) { fontHeight = constantFontMetrics.getHeight(); fontAscent = constantFontMetrics.getAscent(); fontDescent = constantFontMetrics.getDescent(); } } public void render (int x, int y, int width, int height, float pos, Graphics g) { g.setColor(Color.BLACK); float lx = width; float ly = height / 2; float cx = x + width; float cy = y + height / 2; float rotationStep = (float)Math.PI / 32 * pos; float angle0 = (float)Math.PI / 2.0f; for (int i=0; i<31; i++) { float angle1 = angle0 + rotationStep; float x0 = cx + (float)Math.cos(angle0) * lx; float y0 = cy + (float)Math.sin(angle0) * ly; float x1 = cx + (float)Math.cos(angle1) * lx; float y1 = cy + (float)Math.sin(angle1) * ly; g.drawLine((int)x0, (int)y0, (int)x1, (int)y1); angle0 += rotationStep; } } }