[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.technology.nebula] Re: help about gallery

Hi Gaston,

2 issues in you code :
- You didn't understand how the VIRTUAL flag works, your code doesn't take benefit of it. Look at : http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet202.java?view=co


- You are creating item with full-sized images. The gallery has to resize each item for each redraw, by default with interpolation and antialiasing. If some images are > than 640x400 this will slow the redraws down. To fix this :
* Change resize quality : Gallery#setAntialias and Gallery#setInterpolation.
* and/or Use Gallery#setLowQualityOnUserAction()
* and/or Resize images before calling GalleryItem#setImage()


Note that Linux / GTK is really slower than windows or mac osx when drawing with interpolation and antialias. On this platform you ofter need to reduce quality to get a decent speed.

See : http://wiki.eclipse.org/Nebula_Gallery_FAQ

I hope this will help you.

Regards,
--
Nicolas

gaston a écrit :
Hi:
i am using the gallery and the expansion and redraw process are very slow, could you help me ?
The attached code pick up photos from a folder. Thank you very much
Greetings.
import java.io.File;
import java.util.Arrays;


import org.eclipse.nebula.widgets.gallery.Gallery;
import org.eclipse.nebula.widgets.gallery.GalleryItem;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class prueba {
static int indentLevel=-1;
static Gallery list ;
static Shell shell;
public static void main (String [] args) {
Display display = new Display ();
shell = new Shell (display);
FillLayout fillLayout = new FillLayout ();
shell.setLayout (fillLayout);


        list = new Gallery (shell,  SWT.BORDER|SWT.MULTI );
        list.setLowQualityOnUserAction(true);
        list.setAntialias(SWT.ON);
        list.setInterpolation(SWT.LOW);

shell.open ();

listPath(new File("C:\\FotosVeterinaria"));
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
public static void listPath(File path) {
File files[]; indentLevel++; files = path.listFiles();


        Arrays.sort(files);

                Image nuevo;
        GalleryItem group = new GalleryItem(list, SWT.VIRTUAL);
        GalleryItem item ;
        group.setText("Imagenes");         group.setExpanded(true);
        Display display = shell.getDisplay();
                    for (int i = 0, n = files.length; i < n; i++) {
              for (int indent = 0; indent < indentLevel; indent++) {
                System.out.print(" *** ");
              }

if (files[i].toString().contains(".JPG")) {
item = new GalleryItem(group, SWT.NONE);
nuevo = new Image(display,files[i].toString() );
item.setImage(nuevo);
// item.setText(files[i].toString());
// item.setData(files[i].toString());
}
// }
}
indentLevel--;
}
}