Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 184385 Details for
Bug 331711
resize tracker changes mouse position if resize operation is long
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
snippet that creates a resize tracker on a tree, and lags in resize event
TrackerSnippet.java (text/x-java-source), 2.69 KB, created by
Andrei Diaconu
on 2010-12-02 14:30:36 EST
(
hide
)
Description:
snippet that creates a resize tracker on a tree, and lags in resize event
Filename:
MIME Type:
Creator:
Andrei Diaconu
Created:
2010-12-02 14:30:36 EST
Size:
2.69 KB
patch
obsolete
>import java.util.ArrayList; >import java.util.List; > >import org.eclipse.swt.SWT; >import org.eclipse.swt.graphics.Point; >import org.eclipse.swt.graphics.Rectangle; >import org.eclipse.swt.layout.FillLayout; >import org.eclipse.swt.widgets.*; > >public class TrackerSnippet { > > public static void main(String[] args) { > final Display display = new Display(); > final Shell shell = new Shell(display); > shell.setLayout(new FillLayout()); > > final Tree tree = new Tree(shell, SWT.BORDER | SWT.MULTI); > for (int i = 0; i < 10000; i++) { > final TreeItem item = new TreeItem(tree, SWT.NONE); > item.setText("Item - " + i); > } > > tree.addListener(SWT.MouseDown, new Listener() { > @Override > public void handleEvent(Event e) { > createTracker(e, tree); > } > }); > shell.open(); > while (!shell.isDisposed()) { > if (!display.readAndDispatch()) { > display.sleep(); > } > } > display.dispose(); > } > > private static void createTracker(Event e, final Tree tree) { > final Tracker tracker = new Tracker(tree, SWT.RESIZE); > tracker.setRectangles(new Rectangle[]{new Rectangle(e.x, e.y, 0, 0),}); > > tracker.addListener(SWT.Resize, new Listener() { > @Override > public void handleEvent(Event event) { > final Rectangle[] rectangles = tracker.getRectangles(); > final Rectangle bounds = rectangles[0]; > > final TreeItem[] items = getItems(tree, bounds); > select(tree, items); > > final TreeItem item = tree.getItem(new Point(event.x, event.y)); > if (item != null) { > tree.setSelection(item); > } > } > }); > > tracker.open(); > } > > /** > * Returns the items that overlap at least partially with the given rectangle. > */ > private static TreeItem[] getItems(Tree tree, Rectangle rectangle) { > final TreeItem topItem = tree.getTopItem(); > final int topItemIndex = tree.indexOf(topItem); > final int itemsCount = tree.getItemCount(); > > final List<TreeItem> itemsToSelect = new ArrayList<TreeItem>(); > for (int i = topItemIndex; i < itemsCount; i++) { > final TreeItem item = tree.getItem(i); > final Rectangle bounds = item.getBounds(); > if (bounds.intersects(rectangle)) { > itemsToSelect.add(item); > } else { > if (isBelow(bounds, rectangle)) { > break; > } > } > } > return itemsToSelect.toArray(new TreeItem[itemsToSelect.size()]); > } > > private static boolean isBelow(Rectangle rectangle1, Rectangle rectangle2) { > return rectangle1.y > rectangle2.y + rectangle2.height; > } > > private static void select(Tree tree, TreeItem[] items) { > tree.setSelection(items); > final Event e = new Event(); > e.widget = tree; > e.display = tree.getDisplay(); > e.type = SWT.Selection; > tree.notifyListeners(SWT.Selection, e); > } >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 331711
: 184385 |
280009