package org.eclipse.uml2.diagram.sequence.figures; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Layer; import org.eclipse.draw2d.LayeredPane; import org.eclipse.draw2d.XYLayout; import org.eclipse.uml2.diagram.sequence.draw2d.layouts.FillingBorderLayout; import org.eclipse.uml2.diagram.sequence.draw2d.shadow.ShadowLayer; public class ShadowHelper { public static Layer addChildrenShadowLayer(IFigure content, final String debugKey) { //ChildrenContainerFigure is used instead of more simple Layer descendant because it //is responsible for propagating figure figure bounds changes to constraints of AbsoluteXYLayout Layer childrenContainer = new DebugChildrenContainerFigure(debugKey); childrenContainer.setOpaque(false); //childrenContainer.setLayoutManager(new AbsoluteXYLayout()); childrenContainer.setLayoutManager(new XYLayout()); LayeredPane pane = addShadowLayer(childrenContainer); content.setLayoutManager(new FillingBorderLayout()); content.add(pane, FillingBorderLayout.CENTER); return childrenContainer; } public static LayeredPane addShadowLayer(IFigure container) { LayeredPane pane = new LayeredPane(); ShadowLayer shadowLayer = new ShadowLayer(); shadowLayer.addClient(container); pane.add(shadowLayer); pane.add(container); return pane; } private static class DebugChildrenContainerFigure extends ChildrenContainerFigure { private final String myDebugKey; public DebugChildrenContainerFigure(String debugKey){ myDebugKey = debugKey; } @Override public String toString() { return "DebugChildrenContainerFigure for : " + myDebugKey + " - " + System.identityHashCode(this); } } }