package org.goko.tools.viewer.jogl.service.overlay; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; import java.awt.geom.Rectangle2D; import java.lang.ref.WeakReference; import org.goko.core.common.exception.GkException; import org.goko.core.common.utils.AbstractIdBean; import org.goko.core.config.GokoPreference; import org.goko.tools.viewer.jogl.GokoJoglCanvas; import org.goko.tools.viewer.jogl.service.KeyboardJogAdatper; import org.goko.tools.viewer.jogl.utils.overlay.IOverlayRenderer; public class KeyboardJogOverlay extends AbstractIdBean implements IOverlayRenderer { /** The font used for the warning */ private Font jogWarnFont; /** Reference to the canvas */ private WeakReference<GokoJoglCanvas> canvasReference; /** Keyboard jog adapter */ private WeakReference<KeyboardJogAdatper> keyboardJogAdatper; public KeyboardJogOverlay(GokoJoglCanvas canvas, KeyboardJogAdatper keyboardJogAdatper) { this.canvasReference = new WeakReference<GokoJoglCanvas>(canvas); this.jogWarnFont = new Font("SansSerif", Font.BOLD, 16); this.keyboardJogAdatper = new WeakReference<KeyboardJogAdatper>(keyboardJogAdatper); } /** (inheritDoc) * @see org.goko.tools.viewer.jogl.utils.overlay.IOverlayRenderer#drawOverlayData(java.awt.Graphics2D) */ @Override public void drawOverlayData(Graphics2D g2d, Rectangle bounds) throws GkException { if(getCanvas().isKeyboardJogEnabled()){ // Draw a big red warning saying jog is enabled FontRenderContext frc = g2d.getFontRenderContext(); String warn = "Keyboard jog enabled at "+ GokoPreference.getInstance().format(keyboardJogAdatper.get().getFeedrate()); GlyphVector gv = jogWarnFont.createGlyphVector(frc, warn); Rectangle glyphBounds = gv.getPixelBounds(frc, 0, 0); int x = (bounds.width - glyphBounds.width) / 2; int y = 5 + glyphBounds.height; Rectangle2D bg = new Rectangle2D.Double(x-5,2, glyphBounds.width + 15, glyphBounds.height + 10); g2d.setFont(jogWarnFont); g2d.setColor(Color.RED);//new Color(0.9f,0,0,0.5f)); g2d.fill(bg); g2d.setColor(Color.WHITE); g2d.drawString(warn ,x, y); } } /** * Getter for the canvas * @return the canvass */ private GokoJoglCanvas getCanvas() { return canvasReference.get(); } /** (inheritDoc) * @see org.goko.tools.viewer.jogl.utils.overlay.IOverlayRenderer#isOverlayEnabled() */ @Override public boolean isOverlayEnabled() { return true; } }