| /******************************************************************************* |
| * Copyright (c) 2015 Tasktop Technologies and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Tasktop Technologies - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.mylyn.commons.ui; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.graphics.Cursor; |
| import org.eclipse.swt.graphics.Point; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Shell; |
| |
| /** |
| * Allows users to move a shell by dragging the given composite. |
| * |
| * @since 3.17 |
| */ |
| public final class ShellDragSupport implements Listener { |
| private int x = -1, y; |
| |
| private final Cursor moveCursor; |
| |
| private final Shell shell; |
| |
| public ShellDragSupport(Composite composite) { |
| moveCursor = new Cursor(composite.getDisplay(), SWT.CURSOR_SIZEALL); |
| shell = composite.getShell(); |
| composite.addListener(SWT.MouseEnter, this); |
| composite.addListener(SWT.MouseExit, this); |
| composite.addListener(SWT.MouseMove, this); |
| composite.addListener(SWT.MouseDown, this); |
| composite.addListener(SWT.MouseUp, this); |
| composite.addListener(SWT.Dispose, this); |
| } |
| |
| @Override |
| public void handleEvent(Event event) { |
| Point pt = shell.toDisplay(event.x, event.y); |
| switch (event.type) { |
| case SWT.MouseEnter: |
| shell.setCursor(moveCursor); |
| break; |
| case SWT.MouseExit: |
| shell.setCursor(null); |
| break; |
| case SWT.MouseMove: |
| if (x == -1) { |
| break; |
| } |
| Point location = shell.getLocation(); |
| shell.setLocation(location.x + pt.x - x, location.y + pt.y - y); |
| // fall through |
| case SWT.MouseDown: |
| x = pt.x; |
| y = pt.y; |
| break; |
| case SWT.MouseUp: |
| x = -1; |
| break; |
| case SWT.Dispose: |
| moveCursor.dispose(); |
| } |
| } |
| |
| Cursor getMoveCursor() { |
| return moveCursor; |
| } |
| } |