/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Patrick Tessier (CEA LIST) patrick.tessier@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.common.figure.node; import org.eclipse.draw2d.AbstractBackground; import org.eclipse.draw2d.Border; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities; import org.eclipse.gmf.runtime.draw2d.ui.figures.RoundedRectangleBorder; import org.eclipse.gmf.runtime.notation.GradientStyle; import org.eclipse.swt.graphics.Color; /** * this class is used to display a rounded rectangle with gradient and intherits * from the hierarchy of papyrus nodes * */ public class PapyrusReceiveNodeFigure extends NodeNamedElementFigure { public PapyrusReceiveNodeFigure(){ super(); corner=15; this.shadowborder= new RoundedRectangleBorder(corner, corner); setBorder(this.shadowborder); } public int corner=15; @Override protected Border getDefaultBorder(Color borderColor) { return new RoundedRectangleBorder(corner, corner); } /** * Paint figure. * * @param graphics * the graphics */ @Override public void paintFigure(Graphics graphics) { if (isOpaque() && getBorder() != null) { Rectangle tempRect = new Rectangle(getBounds()); tempRect.crop(getBorder().getInsets(this)); graphics.fillRoundRectangle(tempRect, corner, corner); return; } if (isOpaque()) graphics.fillRoundRectangle(getBounds(), corner, corner); if (getBorder() instanceof AbstractBackground) ((AbstractBackground) getBorder()).paintBackground(this, graphics, NO_INSETS); paintBackground(graphics, getBounds()); shadowborder.setColor(getForegroundColor()); } protected void paintBackground(Graphics graphics, Rectangle rectangle) { if(isUsingGradient()) { applyTransparency(graphics); boolean isVertical = (getGradientStyle() == GradientStyle.VERTICAL) ? true : false; if(isVertical && rectangle.height>((3*corner)/2)){ Rectangle rect1= new Rectangle(rectangle.getLocation(),new Dimension(rectangle.width,corner)); Rectangle rect2= new Rectangle(rectangle.x,rectangle.y+rectangle.height-corner,rectangle.width,corner);; graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor2())); graphics.fillRoundRectangle(rect1,corner,corner); graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor1())); graphics.fillRoundRectangle(rect2,corner,corner); graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor1())); graphics.setForegroundColor(FigureUtilities.integerToColor(getGradientColor2())); Rectangle rect= new Rectangle(rectangle.x,rectangle.y+corner/2,rectangle.width,rectangle.height-corner); graphics.fillGradient(rect, true); } else if(!isVertical && rectangle.width>((3*corner)/2)){ Rectangle rect1= new Rectangle(rectangle.getLocation(),new Dimension(corner,rectangle.height)); Rectangle rect2= new Rectangle(rectangle.x+rectangle.width-corner,rectangle.y,corner,rectangle.height); graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor2())); graphics.fillRoundRectangle(rect1,corner,corner); graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor1())); graphics.fillRoundRectangle(rect2,corner,corner); graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor1())); graphics.setForegroundColor(FigureUtilities.integerToColor(getGradientColor2())); Rectangle rect= new Rectangle(rectangle.x+corner/2, rectangle.y,rectangle.width-corner,rectangle.height); graphics.fillGradient(rect, false); } else{ graphics.setBackgroundColor(FigureUtilities.integerToColor(getGradientColor1())); graphics.setForegroundColor(FigureUtilities.integerToColor(getGradientColor2())); graphics.fillRoundRectangle(rectangle,corner,corner); } } else { graphics.setBackgroundColor(getBackgroundColor()); graphics.setForegroundColor(getForegroundColor()); graphics.fillRoundRectangle(rectangle,corner,corner); } } }