Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » GEF » ScalabledGraphics and layout precision
ScalabledGraphics and layout precision [message #241868] Fri, 21 March 2008 12:38
Eclipse UserFriend
Originally posted by: sylvain.marcadal.eurogiciel.fr

Hello,
I'm using a ScalableLayeredPane in order to implements a zoom on my figure.
The behaviour of the toolbarlayout is what I need. but even with a spacing
set to 0, when I zoom in my child become separated.

This also appear with a gridlayout.

I tried to set spacing to -1, but figures overlaps.

I'm I missing something ? or is there a workaround ?


------
Here is the code :
------
/**
*
*/
package com.thav.itd.hmi.dialogs.test;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FigureCanvas;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.LightweightSystem;
import org.eclipse.draw2d.RectangleFigure;
import org.eclipse.draw2d.ScalableLayeredPane;
import org.eclipse.draw2d.ToolbarLayout;
import org.eclipse.draw2d.Viewport;
import org.eclipse.draw2d.parts.ScrollableThumbnail;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

/**
* @author SML
*
*/
public class FlowDetailWindow extends Dialog {

private ScalableLayeredPane scaledPane;
private FigureCanvas canvas;

/**
* @param parentShell
*/
public FlowDetailWindow(Shell parentShell) {
super(parentShell);
setShellStyle(getShellStyle()|SWT.RESIZE);
}

@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL,
true);
}

@Override
protected Control createDialogArea(Composite parent) {
Composite area = (Composite) super.createDialogArea(parent);
createFigureCanvas(area);
createThumbnailCanvas(area);
return area;
}

private void createFigureCanvas(Composite area) {
canvas = new FigureCanvas(area);
scaledPane = new ScalableLayeredPane();
canvas.setContents(scaledPane);
canvas.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));

ToolbarLayout layout = new ToolbarLayout(true);
layout.setSpacing(0);
layout.setStretchMinorAxis(true);
layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
scaledPane.setLayoutManager(layout);

for (int i = 0; i < 6; i++) {
// setLabel(scaledPane, "label " + i);
setRectangle(scaledPane);
}

// scaledPane.setScale(0.012);
canvas.addListener(SWT.MouseWheel, new MouseWheelListener());
}


private IFigure setLabel(IFigure parent, String label) {
Label labelFigure = new Label(label);
labelFigure.setBackgroundColor(ColorConstants.orange);
labelFigure.setOpaque(true);
labelFigure.setBorder(null);
parent.add(labelFigure);
return labelFigure;
}

private IFigure setRectangle(IFigure parent) {
RectangleFigure labelFigure = new RectangleFigure();
labelFigure.setBackgroundColor(ColorConstants.red);
labelFigure.setForegroundColor(ColorConstants.blue);
labelFigure.setOpaque(true);
labelFigure.setBorder(null);
labelFigure.setOutline(false);
labelFigure.setPreferredSize(50, 10);
parent.add(labelFigure);
return labelFigure;
}

private void createThumbnailCanvas(Composite parent) {
Canvas overview = new Canvas(parent, SWT.DOUBLE_BUFFERED);
LightweightSystem lws = new LightweightSystem(overview);
ScrollableThumbnail thumbnail = new ScrollableThumbnail((Viewport)
canvas.getViewport());
thumbnail.setSource(scaledPane);
thumbnail.setOpaque(false);
lws.setContents(thumbnail);
lws.getRootFigure().setOpaque(false);
overview.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));

}


public class MouseWheelListener implements Listener{
/* (non-Javadoc)
* @see
org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt .widgets.Event)
*/
public void handleEvent(Event event) {
if(event.type == SWT.MouseWheel){
if(event.count>0 && scaledPane.getScale()<20){
scaledPane.setScale(scaledPane.getScale()*2);
}if(event.count<0 //not = 0
&& scaledPane.getScale()>0.001){
scaledPane.setScale(scaledPane.getScale()/2);
}
}
}
}

}
Previous Topic:Create image from a resource
Next Topic:Creating a new Layer
Goto Forum:
  


Current Time: Fri Apr 26 22:51:23 GMT 2024

Powered by FUDForum. Page generated in 0.03026 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top