blob: ce7061f7a34113120094ba3fc47f3b9dc9b8ad8c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2006 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.widgets.Display;
/**
* Provides the set of cursors used for drag-and-drop.
*/
public class DragCursors {
public static final int INVALID = 0;
public static final int LEFT = 1;
public static final int RIGHT = 2;
public static final int TOP = 3;
public static final int BOTTOM = 4;
public static final int CENTER = 5;
public static final int OFFSCREEN = 6;
public static final int FASTVIEW = 7;
private final static Cursor cursors[] = new Cursor[8];
public static int positionToDragCursor(int swtPositionConstant) {
switch (swtPositionConstant) {
case SWT.LEFT:
return LEFT;
case SWT.RIGHT:
return RIGHT;
case SWT.TOP:
return TOP;
case SWT.BOTTOM:
return BOTTOM;
case SWT.CENTER:
return CENTER;
}
return INVALID;
}
/**
* Converts a drag cursor (LEFT, RIGHT, TOP, BOTTOM, CENTER) into an SWT constant
* (SWT.LEFT, SWT.RIGHT, SWT.TOP, SWT.BOTTOM, SWT.CENTER)
*
* @param dragCursorId
* @return an SWT.* constant
*/
public static int dragCursorToSwtConstant(int dragCursorId) {
switch (dragCursorId) {
case LEFT:
return SWT.LEFT;
case RIGHT:
return SWT.RIGHT;
case TOP:
return SWT.TOP;
case BOTTOM:
return SWT.BOTTOM;
case CENTER:
return SWT.CENTER;
}
return SWT.DEFAULT;
}
/**
* Return the cursor for a drop scenario, as identified by code.
* Code must be one of INVALID, LEFT, RIGHT, TOP, etc.
* If the code is not found default to INVALID.
*/
public static Cursor getCursor(int code) {
Display display = Display.getCurrent();
if (cursors[code] == null) {
ImageDescriptor source = null;
ImageDescriptor mask = null;
switch (code) {
case LEFT:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_LEFT_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_LEFT_MASK);
cursors[LEFT] = new Cursor(display, source.getImageData(), mask
.getImageData(), 16, 16);
break;
case RIGHT:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_RIGHT_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_RIGHT_MASK);
cursors[RIGHT] = new Cursor(display, source.getImageData(),
mask.getImageData(), 16, 16);
break;
case TOP:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOP_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOP_MASK);
cursors[TOP] = new Cursor(display, source.getImageData(), mask
.getImageData(), 16, 16);
break;
case BOTTOM:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_BOTTOM_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_BOTTOM_MASK);
cursors[BOTTOM] = new Cursor(display, source.getImageData(),
mask.getImageData(), 16, 16);
break;
case CENTER:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_STACK_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_STACK_MASK);
cursors[CENTER] = new Cursor(display, source.getImageData(),
mask.getImageData(), 16, 16);
break;
case OFFSCREEN:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_OFFSCREEN_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_OFFSCREEN_MASK);
cursors[OFFSCREEN] = new Cursor(display, source.getImageData(),
mask.getImageData(), 16, 16);
break;
case FASTVIEW:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOFASTVIEW_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_TOFASTVIEW_MASK);
cursors[FASTVIEW] = new Cursor(Display.getCurrent(), source
.getImageData(), mask.getImageData(), 16, 16);
default:
case INVALID:
source = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_INVALID_SOURCE);
mask = WorkbenchImages
.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJS_DND_INVALID_MASK);
cursors[INVALID] = new Cursor(display, source.getImageData(),
mask.getImageData(), 16, 16);
break;
}
}
return cursors[code];
}
/**
* Disposes all drag-and-drop cursors.
*/
public static void dispose() {
for (int idx = 0; idx < cursors.length; idx++) {
cursors[idx].dispose();
cursors[idx] = null;
}
}
}