package com.horstmann.violet.framework.graphics.shape; import com.horstmann.violet.framework.graphics.content.Content; import java.awt.*; import java.awt.geom.GeneralPath; /** * TODO javadoc * This ... * * @author Adrian Bobrowski <adrian071993@gmail.com> * @date 27.02.2016 */ public class ContentInsideDiamond extends ContentInsideCustomShape { public ContentInsideDiamond(Content content) { this(content, 45); } /** * @param content * @param degrees left and right degrees */ public ContentInsideDiamond(Content content, double degrees) { super(content, new DiamondShape(degrees)); } private static final class DiamondShape implements ContentInsideCustomShape.ShapeCreator { public DiamondShape(double degrees) { if(0 == (degrees)%90 && 0 != (degrees)%180) { throw new ArithmeticException("tangent is infinity"); } tangent = Math.tan(Math.toRadians(degrees)); } /** * @param contentWidth width of diamond * @param contentHeight height of diamond * @return shape described in the diamond */ @Override public Shape createShape(double contentWidth, double contentHeight) { double width = contentWidth + contentHeight * tangent; double height = contentHeight + contentWidth / tangent; GeneralPath diamond = new GeneralPath(); diamond.moveTo(0, height/2); diamond.lineTo(width/2, 0); diamond.lineTo(width, height/2); diamond.lineTo(width/2, height); diamond.lineTo(0, height/2); return diamond; } private double tangent; } }