if (event.doit) { if ((style & SWT.SMOOTH) != 0) { setBoundsInPixels (event.getBoundsInPixels());
if (isDisposed ()) return LRESULT.ZERO; if (event.doit) { Rectangle boundsInPixels = event.getBoundsInPixels(); lastX = boundsInPixels.x; lastY = boundsInPixels.y;
@Override LRESULT WM_LBUTTONUP (int /*long*/ wParam, int /*long*/ lParam) { LRESULT result = super.WM_LBUTTONUP (wParam, lParam); if (result == LRESULT.ZERO) return result; /* Compute the banding rectangle */ if (!dragging) return result; dragging = false; RECT rect = new RECT (); OS.GetWindowRect (handle, rect); int width = rect.right - rect.left; int height = rect.bottom - rect.top; /* The event must be sent because doit flag is used */ Event event = new Event (); event.setBoundsInPixels(new Rectangle(lastX, lastY, width, height)); drawBand (lastX, lastY, width, height); sendSelectionEvent (SWT.Selection, event, true); if (isDisposed ()) return result; Rectangle bounds = event.getBoundsInPixels(); if (event.doit) { if ((style & SWT.SMOOTH) != 0) { setBoundsInPixels (bounds.x, bounds.y, width, height); // widget could be disposed at this point } } return result; }
boolean hitTestSelection (int index, int x, int y) { int count = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETITEMCOUNT, 0, 0); if (count == 0) return false; if (!hooks (SWT.MeasureItem)) return false; boolean result = false; if (0 <= index && index < count) { TableItem item = _getItem (index); int /*long*/ hDC = OS.GetDC (handle); int /*long*/ oldFont = 0, newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont); int /*long*/ hFont = item.fontHandle (0); if (hFont != -1) hFont = OS.SelectObject (hDC, hFont); Event event = sendMeasureItemEvent (item, index, 0, hDC); if (event.getBoundsInPixels ().contains (x, y)) result = true; if (hFont != -1) hFont = OS.SelectObject (hDC, hFont); if (newFont != 0) OS.SelectObject (hDC, oldFont); OS.ReleaseDC (handle, hDC); // if (isDisposed () || item.isDisposed ()) return false; } return result; }
boolean hitTestSelection (int /*long*/ hItem, int x, int y) { if (hItem == 0) return false; TreeItem item = _getItem (hItem); if (item == null) return false; if (!hooks (SWT.MeasureItem)) return false; boolean result = false; //BUG? - moved columns, only hittest first column //BUG? - check drag detect int [] order = new int [1], index = new int [1]; int /*long*/ hDC = OS.GetDC (handle); int /*long*/ oldFont = 0, newFont = OS.SendMessage (handle, OS.WM_GETFONT, 0, 0); if (newFont != 0) oldFont = OS.SelectObject (hDC, newFont); int /*long*/ hFont = item.fontHandle (order [index [0]]); if (hFont != -1) hFont = OS.SelectObject (hDC, hFont); int state = (int)/*64*/OS.SendMessage (handle, OS.TVM_GETITEMSTATE, hItem, OS.TVIS_SELECTED); int detail = (state & OS.TVIS_SELECTED) != 0 ? SWT.SELECTED : 0; Event event = sendMeasureItemEvent (item, order [index [0]], hDC, detail); if (event.getBoundsInPixels ().contains (x, y)) result = true; if (newFont != 0) OS.SelectObject (hDC, oldFont); OS.ReleaseDC (handle, hDC); // if (isDisposed () || item.isDisposed ()) return false; return result; }
Event event = sendMeasureItemEvent (item [0], order [index [0]], hDC, detail); if (isDisposed () || item [0].isDisposed ()) break; Rectangle boundsInPixels = event.getBoundsInPixels(); itemRect [0] = new RECT (); itemRect [0].left = boundsInPixels.x;
Event sendMeasureItemEvent (TreeItem item, int index, int /*long*/ hDC, int detail) { RECT itemRect = item.getBounds (index, true, true, false, false, false, hDC); int nSavedDC = OS.SaveDC (hDC); GCData data = new GCData (); data.device = display; data.font = item.getFont (index); GC gc = GC.win32_new (hDC, data); Event event = new Event (); event.item = item; event.gc = gc; event.index = index; event.setBoundsInPixels(new Rectangle(itemRect.left, itemRect.top, itemRect.right - itemRect.left, itemRect.bottom - itemRect.top)); event.detail = detail; sendEvent (SWT.MeasureItem, event); event.gc = null; gc.dispose (); OS.RestoreDC (hDC, nSavedDC); if (isDisposed () || item.isDisposed ()) return null; Rectangle rect = event.getBoundsInPixels (); if (hwndHeader != 0) { if (columnCount == 0) { if (rect.x + rect.width > scrollWidth) { setScrollWidth (scrollWidth = rect.x + rect.width); } } } if (rect.height > getItemHeightInPixels ()) setItemHeight (rect.height); return event; }
Rectangle bounds = event.getBoundsInPixels(); if (event.doit) { dragging = true;
Event event = parent.sendMeasureItemEvent (item, index, hDC, detail); if (isDisposed () || parent.isDisposed ()) break; Rectangle bounds = event.getBoundsInPixels(); itemRight = bounds.x + bounds.width; } else {
if (!isDisposed () && !item.isDisposed ()) { RECT itemRect = new RECT (); Rectangle boundsInPixels = event.getBoundsInPixels(); OS.SetRect (itemRect, boundsInPixels.x, boundsInPixels.y, boundsInPixels.x + boundsInPixels.width, boundsInPixels.y + boundsInPixels.height); if (hdr.code == OS.TTN_SHOW) {
OS.RestoreDC (hDC, nSavedDC); if (!isDisposed () && !item.isDisposed ()) { Rectangle boundsInPixels = event.getBoundsInPixels(); if (columnCount == 0) { int width = (int)/*64*/OS.SendMessage (handle, OS.LVM_GETCOLUMNWIDTH, 0, 0);
if (hFont != -1) hFont = OS.SelectObject (hDC, hFont); if (isDisposed () || parent.isDisposed ()) break; Rectangle bounds = event.getBoundsInPixels(); columnWidth = Math.max (columnWidth, bounds.x + bounds.width - headerRect.left);
if (hooks (SWT.MeasureItem)) { measureEvent = sendMeasureItemEvent (item, index, hDC, selected ? SWT.SELECTED : 0); boundsInPixels = measureEvent.getBoundsInPixels (); if (isDisposed () || item.isDisposed ()) return null;
if ((style & SWT.FULL_SELECTION) == 0) { if (measureEvent != null) { Rectangle boundInPixels = measureEvent.getBoundsInPixels(); textRect.right = Math.min (cellRect.right, boundInPixels.x + boundInPixels.width);