/******************************************************************************* * Copyright (c) 2009-2013 CWI * 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 *******************************************************************************/ package org.rascalmpl.eclipse.library.vis.figure.interaction.swtwidgets; import static org.rascalmpl.eclipse.library.vis.util.vector.Dimension.X; import static org.rascalmpl.eclipse.library.vis.util.vector.Dimension.Y; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Composite; import org.rascalmpl.eclipse.library.vis.figure.Figure; import org.rascalmpl.eclipse.library.vis.properties.PropertyManager; import org.rascalmpl.eclipse.library.vis.swt.IFigureConstructionEnv; import org.rascalmpl.eclipse.library.vis.swt.applet.FigureSWTApplet; import org.rascalmpl.eclipse.library.vis.util.FigureMath; import org.rascalmpl.eclipse.library.vis.util.vector.BoundingBox; import io.usethesource.vallang.IConstructor; public class Scrollable extends SWTWidgetFigure<FigureSWTApplet> { public Figure innerFig; boolean hscroll, vscroll; public Scrollable(boolean hscroll,boolean vscroll,IFigureConstructionEnv env, IConstructor inner, PropertyManager properties) { super(env, properties); this.hscroll = hscroll; this.vscroll = vscroll; widget = makeWidget(env.getSWTParent(), env,inner); env.getSWTParent().registerChild(widget); innerFig = widget.getFigure(); widget.setVisible(false); } @Override public void computeMinSize(){ super.computeMinSize(); BoundingBox innerFigBB = widget.getFigure().minSize; if(!hscroll || !vscroll){ Rectangle r = widget.computeTrim(0, 0, FigureMath.ceil(innerFigBB.getX()), FigureMath.ceil(innerFigBB.getY())); if(!hscroll){ minSize.setMax(X, r.width); } if(!vscroll){ minSize.setMax(Y,r.height); } } } FigureSWTApplet makeWidget(Composite comp, IFigureConstructionEnv env,IConstructor inner) { return new FigureSWTApplet(comp, inner,env.getFigureExecEnv(),hscroll,vscroll); } }