mercoledì 20 gennaio 2010

Scrolling automatico di una immagine SWT

E' stata abbastanza dura riuscire a creare una view di Eclipse che potesse fare lo scrolling di una immagine in automatico. Mentre in Swing esiste il poliedrico componente ScrollPane, capace di fare scrolling automatico su praticamente ogni componente (ivi incluse le immagini), nel caso di SWT l'affare si complica.
Anzitutto occorre creare un canvas capace di visualizzare l'immagine, e quindi con associato un paint listener che reagisca agli eventi di rivisualizzazione e disegni l'immagine al suo interno. Attenzione: l'immagine deve essere disegnata sempre nello stesso punto (ad esempio alle coordinate 0,0) poiché non è il canvas a muovere l'immagine ma lo scrolled composite che conterrà il canvas. Terminata la costruzione del canvas, si procede al wrapping dello stesso in uno ScrolledComposite che si preoccuperà di muovere il canvas contenuto. Purtroppo c'è un po' di lavoro in piu' da fare: lo scrolled composite deve avere esplicitamente settato il suo contenuto (il canvas).
Da un punto di vista di codice, questo si traduce nel seguente frammento di inizializzazione della vista Eclipse:

  public void createPartControl(Composite parent) {

// create a scrolling composite
ScrolledComposite scroller = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL );

// now create a canvas for this view
this.canvas = new Canvas( scroller, SWT.NONE );
scroller.setContent( this.canvas );


// this canvas must show the image when loaded

this.canvas.addPaintListener( new PaintListener(){


@Override
public void paintControl(PaintEvent event) {
if( image != null )
event.gc.drawImage(image, 0, 0 );
}

});


...
}

Nessun commento: