/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Liquid Look and Feel * * * * Author, Miroslav Lazarevic * * * * For licensing information and credits, please refer to the * * comment in file com.birosoft.liquid.LiquidLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package com.birosoft.liquid.skin; import java.awt.Graphics; /** * The only case the Skin currently can't handle is a skin for a JMenuItem. * @see com.stefankrause.xplookandfeel.skin.Skin */ public class SkinMenuItem extends SkinElement { private int leftOffset, leftRolloverOffset, rightOffset, rightRolloverOffset; private int hsize, vsize; private int roundedSize; private boolean doneAllCalculations = false; public SkinMenuItem(String fileName, int leftOffset, int leftRolloverOffset, int rightOffset, int rightRolloverOffset, int roundedSize) { super(fileName,false); this.leftOffset = leftOffset; this.leftRolloverOffset = leftRolloverOffset; this.rightOffset = rightOffset; this.rightRolloverOffset = rightRolloverOffset; this.roundedSize = roundedSize; calculateSizes(); } public void draw(Graphics g, boolean isEnabled, boolean isSelected, boolean isPushed, boolean isRollover, int pSizeX, int leftSize, int sizeY) { int offsetL = 0, offsetR = 0; if (isSelected) { offsetL = leftRolloverOffset; offsetR = rightRolloverOffset; } else { offsetL = leftOffset; offsetR = rightOffset; } offsetL = hsize * offsetL; offsetR = hsize * offsetR; // Left Side { int offset=offsetL; int sizeX=leftSize; if (roundedSize>0) { // lo g.drawImage(getImage(), 0, 0, roundedSize, roundedSize, offset + 0, 0, offset + roundedSize, roundedSize, null); // mo g.drawImage(getImage(), roundedSize, 0, sizeX - roundedSize, roundedSize, offset + roundedSize, 0, offset + hsize - roundedSize, roundedSize, null); // ro g.drawImage(getImage(), sizeX - roundedSize, 0, sizeX, roundedSize, offset + hsize - roundedSize, 0, offset + hsize, roundedSize, null); // lm g.drawImage(getImage(), 0, roundedSize, roundedSize, sizeY - roundedSize, offset + 0, roundedSize, offset + roundedSize, vsize - roundedSize, null); // rm g.drawImage(getImage(), sizeX - roundedSize, roundedSize, sizeX, sizeY - roundedSize, offset + hsize - roundedSize, roundedSize, offset + hsize, vsize - roundedSize, null); // lu g.drawImage(getImage(), 0, sizeY - roundedSize, roundedSize, sizeY, offset + 0, vsize - roundedSize, offset + roundedSize, vsize, null); // mu g.drawImage(getImage(), roundedSize, sizeY - roundedSize, sizeX - roundedSize, sizeY, offset + roundedSize, vsize - roundedSize, offset + hsize - roundedSize, vsize, null); // ru g.drawImage(getImage(), sizeX - roundedSize, sizeY - roundedSize, sizeX, sizeY, offset + hsize - roundedSize, vsize - roundedSize, offset + hsize, vsize, null); } g.drawImage(getImage(), roundedSize, roundedSize, sizeX - roundedSize, sizeY - roundedSize, offset + roundedSize, roundedSize, offset + hsize - roundedSize, vsize - roundedSize, null); } // Right Side { int offset=offsetR; int sizeX=pSizeX-leftSize; g.translate(leftSize,0); if (roundedSize>0) { // lo g.drawImage(getImage(), 0, 0, roundedSize, roundedSize, offset + 0, 0, offset + roundedSize, roundedSize, null); // mo g.drawImage(getImage(), roundedSize, 0, sizeX - roundedSize, roundedSize, offset + roundedSize, 0, offset + hsize - roundedSize, roundedSize, null); // ro g.drawImage(getImage(), sizeX - roundedSize, 0, sizeX, roundedSize, offset + hsize - roundedSize, 0, offset + hsize, roundedSize, null); // lm g.drawImage(getImage(), 0, roundedSize, roundedSize, sizeY - roundedSize, offset + 0, roundedSize, offset + roundedSize, vsize - roundedSize, null); // rm g.drawImage(getImage(), sizeX - roundedSize, roundedSize, sizeX, sizeY - roundedSize, offset + hsize - roundedSize, roundedSize, offset + hsize, vsize - roundedSize, null); // lu g.drawImage(getImage(), 0, sizeY - roundedSize, roundedSize, sizeY, offset + 0, vsize - roundedSize, offset + roundedSize, vsize, null); // mu g.drawImage(getImage(), roundedSize, sizeY - roundedSize, sizeX - roundedSize, sizeY, offset + roundedSize, vsize - roundedSize, offset + hsize - roundedSize, vsize, null); // ru g.drawImage(getImage(), sizeX - roundedSize, sizeY - roundedSize, sizeX, sizeY, offset + hsize - roundedSize, vsize - roundedSize, offset + hsize, vsize, null); } g.drawImage(getImage(), roundedSize, roundedSize, sizeX - roundedSize, sizeY - roundedSize, offset + roundedSize, roundedSize, offset + hsize - roundedSize, vsize - roundedSize, null); g.translate(-leftSize,0); } } public int getHsize() { if (!doneAllCalculations) { calculateSizes(); doneAllCalculations=true; } return hsize; } public int getVsize() { if (!doneAllCalculations) { calculateSizes(); doneAllCalculations=true; } return vsize; } protected void calculateSizes() { int maxOffset = 0; if (leftOffset > maxOffset) maxOffset = leftOffset; if (leftRolloverOffset > maxOffset) maxOffset = leftRolloverOffset; if (rightOffset > maxOffset) maxOffset = rightOffset; if (rightRolloverOffset > maxOffset) maxOffset = rightRolloverOffset; hsize = (getImage().getWidth(null)) / (maxOffset + 1); vsize = getImage().getHeight(null); } }