@@ -135,35 +135,7 @@ public final class Cursor extends Resource {
135
135
*/
136
136
public Cursor (Device device , int style ) {
137
137
this (device );
138
- long lpCursorName = 0 ;
139
- switch (style ) {
140
- case SWT .CURSOR_HAND : lpCursorName = OS .IDC_HAND ; break ;
141
- case SWT .CURSOR_ARROW : lpCursorName = OS .IDC_ARROW ; break ;
142
- case SWT .CURSOR_WAIT : lpCursorName = OS .IDC_WAIT ; break ;
143
- case SWT .CURSOR_CROSS : lpCursorName = OS .IDC_CROSS ; break ;
144
- case SWT .CURSOR_APPSTARTING : lpCursorName = OS .IDC_APPSTARTING ; break ;
145
- case SWT .CURSOR_HELP : lpCursorName = OS .IDC_HELP ; break ;
146
- case SWT .CURSOR_SIZEALL : lpCursorName = OS .IDC_SIZEALL ; break ;
147
- case SWT .CURSOR_SIZENESW : lpCursorName = OS .IDC_SIZENESW ; break ;
148
- case SWT .CURSOR_SIZENS : lpCursorName = OS .IDC_SIZENS ; break ;
149
- case SWT .CURSOR_SIZENWSE : lpCursorName = OS .IDC_SIZENWSE ; break ;
150
- case SWT .CURSOR_SIZEWE : lpCursorName = OS .IDC_SIZEWE ; break ;
151
- case SWT .CURSOR_SIZEN : lpCursorName = OS .IDC_SIZENS ; break ;
152
- case SWT .CURSOR_SIZES : lpCursorName = OS .IDC_SIZENS ; break ;
153
- case SWT .CURSOR_SIZEE : lpCursorName = OS .IDC_SIZEWE ; break ;
154
- case SWT .CURSOR_SIZEW : lpCursorName = OS .IDC_SIZEWE ; break ;
155
- case SWT .CURSOR_SIZENE : lpCursorName = OS .IDC_SIZENESW ; break ;
156
- case SWT .CURSOR_SIZESE : lpCursorName = OS .IDC_SIZENWSE ; break ;
157
- case SWT .CURSOR_SIZESW : lpCursorName = OS .IDC_SIZENESW ; break ;
158
- case SWT .CURSOR_SIZENW : lpCursorName = OS .IDC_SIZENWSE ; break ;
159
- case SWT .CURSOR_UPARROW : lpCursorName = OS .IDC_UPARROW ; break ;
160
- case SWT .CURSOR_IBEAM : lpCursorName = OS .IDC_IBEAM ; break ;
161
- case SWT .CURSOR_NO : lpCursorName = OS .IDC_NO ; break ;
162
- default :
163
- SWT .error (SWT .ERROR_INVALID_ARGUMENT );
164
- }
165
- handle = OS .LoadCursor (0 , lpCursorName );
166
- if (handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
138
+ this .handle = setupCursorFromStyle (style );
167
139
init ();
168
140
}
169
141
@@ -207,34 +179,7 @@ public Cursor(Device device, ImageData source, ImageData mask, int hotspotX, int
207
179
this .hotspotX = hotspotX ;
208
180
this .hotspotY = hotspotY ;
209
181
this .imageDataProvider = null ;
210
- if (source == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
211
- if (mask == null ) {
212
- if (source .getTransparencyType () != SWT .TRANSPARENCY_MASK ) {
213
- SWT .error (SWT .ERROR_NULL_ARGUMENT );
214
- }
215
- mask = source .getTransparencyMask ();
216
- }
217
- /* Check the bounds. Mask must be the same size as source */
218
- if (mask .width != source .width || mask .height != source .height ) {
219
- SWT .error (SWT .ERROR_INVALID_ARGUMENT );
220
- }
221
- /* Check the hotspots */
222
- if (hotspotX >= source .width || hotspotX < 0 ||
223
- hotspotY >= source .height || hotspotY < 0 ) {
224
- SWT .error (SWT .ERROR_INVALID_ARGUMENT );
225
- }
226
- /* Convert depth to 1 */
227
- mask = ImageData .convertMask (mask );
228
- source = ImageData .convertMask (source );
229
-
230
- /* Make sure source and mask scanline pad is 2 */
231
- byte [] sourceData = ImageData .convertPad (source .data , source .width , source .height , source .depth , source .scanlinePad , 2 );
232
- byte [] maskData = ImageData .convertPad (mask .data , mask .width , mask .height , mask .depth , mask .scanlinePad , 2 );
233
-
234
- /* Create the cursor */
235
- long hInst = OS .GetModuleHandle (null );
236
- handle = OS .CreateCursor (hInst , hotspotX , hotspotY , source .width , source .height , sourceData , maskData );
237
- if (handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
182
+ this .handle = setupCursorFromImageData (source , mask , hotspotX , hotspotY );
238
183
init ();
239
184
this .device .registerResourceWithZoomSupport (this );
240
185
}
@@ -275,10 +220,89 @@ public Cursor(Device device, ImageData source, int hotspotX, int hotspotY) {
275
220
this .hotspotX = hotspotX ;
276
221
this .hotspotY = hotspotY ;
277
222
this .imageDataProvider = null ;
278
- setupCursorFromImageData (source );
223
+ this .handle = setupCursorFromImageData (device , source , hotspotX , hotspotY );
224
+ isIcon = true ;
225
+ init ();
226
+ this .device .registerResourceWithZoomSupport (this );
227
+ }
228
+
229
+ /**
230
+ * Constructs a new cursor given a device, image describing
231
+ * the desired cursor appearance, and the x and y coordinates of
232
+ * the <em>hotspot</em> (that is, the point within the area
233
+ * covered by the cursor which is considered to be where the
234
+ * on-screen pointer is "pointing").
235
+ * <p>
236
+ * You must dispose the cursor when it is no longer required.
237
+ * </p>
238
+ *
239
+ * @param device the device on which to allocate the cursor
240
+ * @param imageDataProvider the ImageDataProvider for the cursor
241
+ * @param hotspotX the x coordinate of the cursor's hotspot
242
+ * @param hotspotY the y coordinate of the cursor's hotspot
243
+ *
244
+ * @exception IllegalArgumentException <ul>
245
+ * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
246
+ * <li>ERROR_NULL_ARGUMENT - if the image is null</li>
247
+ * <li>ERROR_INVALID_ARGUMENT - if the hotspot is outside the bounds of the
248
+ * image</li>
249
+ * </ul>
250
+ * @exception SWTError <ul>
251
+ * <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
252
+ * </ul>
253
+ *
254
+ * @see #dispose()
255
+ *
256
+ * @since 3.131
257
+ */
258
+ public Cursor (Device device , ImageDataProvider imageDataProvider , int hotspotX , int hotspotY ) {
259
+ super (device );
260
+ if (imageDataProvider == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
261
+ this .imageDataProvider = imageDataProvider ;
262
+ this .source = imageDataProvider .getImageData (100 );
263
+ this .mask = null ;
264
+ this .hotspotX = hotspotX ;
265
+ this .hotspotY = hotspotY ;
266
+ this .handle = setupCursorFromImageData (device , this .source , hotspotX , hotspotY );
267
+ isIcon = true ;
268
+ init ();
269
+ this .device .registerResourceWithZoomSupport (this );
270
+ }
271
+
272
+ private static long setupCursorFromStyle (int style ) {
273
+ long lpCursorName = 0 ;
274
+ switch (style ) {
275
+ case SWT .CURSOR_HAND : lpCursorName = OS .IDC_HAND ; break ;
276
+ case SWT .CURSOR_ARROW : lpCursorName = OS .IDC_ARROW ; break ;
277
+ case SWT .CURSOR_WAIT : lpCursorName = OS .IDC_WAIT ; break ;
278
+ case SWT .CURSOR_CROSS : lpCursorName = OS .IDC_CROSS ; break ;
279
+ case SWT .CURSOR_APPSTARTING : lpCursorName = OS .IDC_APPSTARTING ; break ;
280
+ case SWT .CURSOR_HELP : lpCursorName = OS .IDC_HELP ; break ;
281
+ case SWT .CURSOR_SIZEALL : lpCursorName = OS .IDC_SIZEALL ; break ;
282
+ case SWT .CURSOR_SIZENESW : lpCursorName = OS .IDC_SIZENESW ; break ;
283
+ case SWT .CURSOR_SIZENS : lpCursorName = OS .IDC_SIZENS ; break ;
284
+ case SWT .CURSOR_SIZENWSE : lpCursorName = OS .IDC_SIZENWSE ; break ;
285
+ case SWT .CURSOR_SIZEWE : lpCursorName = OS .IDC_SIZEWE ; break ;
286
+ case SWT .CURSOR_SIZEN : lpCursorName = OS .IDC_SIZENS ; break ;
287
+ case SWT .CURSOR_SIZES : lpCursorName = OS .IDC_SIZENS ; break ;
288
+ case SWT .CURSOR_SIZEE : lpCursorName = OS .IDC_SIZEWE ; break ;
289
+ case SWT .CURSOR_SIZEW : lpCursorName = OS .IDC_SIZEWE ; break ;
290
+ case SWT .CURSOR_SIZENE : lpCursorName = OS .IDC_SIZENESW ; break ;
291
+ case SWT .CURSOR_SIZESE : lpCursorName = OS .IDC_SIZENWSE ; break ;
292
+ case SWT .CURSOR_SIZESW : lpCursorName = OS .IDC_SIZENESW ; break ;
293
+ case SWT .CURSOR_SIZENW : lpCursorName = OS .IDC_SIZENWSE ; break ;
294
+ case SWT .CURSOR_UPARROW : lpCursorName = OS .IDC_UPARROW ; break ;
295
+ case SWT .CURSOR_IBEAM : lpCursorName = OS .IDC_IBEAM ; break ;
296
+ case SWT .CURSOR_NO : lpCursorName = OS .IDC_NO ; break ;
297
+ default :
298
+ SWT .error (SWT .ERROR_INVALID_ARGUMENT );
299
+ }
300
+ long handle = OS .LoadCursor (0 , lpCursorName );
301
+ if (handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
302
+ return handle ;
279
303
}
280
304
281
- private void setupCursorFromImageData (ImageData source ) {
305
+ private static long setupCursorFromImageData (Device device , ImageData source , int hotspotX , int hotspotY ) {
282
306
if (source == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
283
307
/* Check the hotspots */
284
308
if (hotspotX >= source .width || hotspotX < 0 ||
@@ -333,7 +357,7 @@ private void setupCursorFromImageData(ImageData source) {
333
357
if (hMask == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
334
358
} else {
335
359
ImageData mask = source .getTransparencyMask ();
336
- long [] result = Image .initIcon (this . device , source , mask );
360
+ long [] result = Image .initIcon (device , source , mask );
337
361
hBitmap = result [0 ];
338
362
hMask = result [1 ];
339
363
}
@@ -344,53 +368,44 @@ private void setupCursorFromImageData(ImageData source) {
344
368
info .hbmMask = hMask ;
345
369
info .xHotspot = hotspotX ;
346
370
info .yHotspot = hotspotY ;
347
- handle = OS .CreateIconIndirect (info );
371
+ long handle = OS .CreateIconIndirect (info );
348
372
OS .DeleteObject (hBitmap );
349
373
OS .DeleteObject (hMask );
350
374
if (handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
351
- isIcon = true ;
352
- init ();
353
- this .device .registerResourceWithZoomSupport (this );
375
+
376
+ return handle ;
354
377
}
355
378
356
- /**
357
- * Constructs a new cursor given a device, image describing
358
- * the desired cursor appearance, and the x and y coordinates of
359
- * the <em>hotspot</em> (that is, the point within the area
360
- * covered by the cursor which is considered to be where the
361
- * on-screen pointer is "pointing").
362
- * <p>
363
- * You must dispose the cursor when it is no longer required.
364
- * </p>
365
- *
366
- * @param device the device on which to allocate the cursor
367
- * @param imageDataProvider the ImageDataProvider for the cursor
368
- * @param hotspotX the x coordinate of the cursor's hotspot
369
- * @param hotspotY the y coordinate of the cursor's hotspot
370
- *
371
- * @exception IllegalArgumentException <ul>
372
- * <li>ERROR_NULL_ARGUMENT - if device is null and there is no current device</li>
373
- * <li>ERROR_NULL_ARGUMENT - if the image is null</li>
374
- * <li>ERROR_INVALID_ARGUMENT - if the hotspot is outside the bounds of the
375
- * image</li>
376
- * </ul>
377
- * @exception SWTError <ul>
378
- * <li>ERROR_NO_HANDLES - if a handle could not be obtained for cursor creation</li>
379
- * </ul>
380
- *
381
- * @see #dispose()
382
- *
383
- * @since 3.131
384
- */
385
- public Cursor (Device device , ImageDataProvider imageDataProvider , int hotspotX , int hotspotY ) {
386
- super (device );
387
- if (imageDataProvider == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
388
- this .imageDataProvider = imageDataProvider ;
389
- this .source = imageDataProvider .getImageData (100 );
390
- this .mask = null ;
391
- this .hotspotX = hotspotX ;
392
- this .hotspotY = hotspotY ;
393
- setupCursorFromImageData (this .source );
379
+ private static long setupCursorFromImageData (ImageData source , ImageData mask , int hotspotX , int hotspotY ) {
380
+ if (source == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
381
+ if (mask == null ) {
382
+ if (source .getTransparencyType () != SWT .TRANSPARENCY_MASK ) {
383
+ SWT .error (SWT .ERROR_NULL_ARGUMENT );
384
+ }
385
+ mask = source .getTransparencyMask ();
386
+ }
387
+ /* Check the bounds. Mask must be the same size as source */
388
+ if (mask .width != source .width || mask .height != source .height ) {
389
+ SWT .error (SWT .ERROR_INVALID_ARGUMENT );
390
+ }
391
+ /* Check the hotspots */
392
+ if (hotspotX >= source .width || hotspotX < 0 ||
393
+ hotspotY >= source .height || hotspotY < 0 ) {
394
+ SWT .error (SWT .ERROR_INVALID_ARGUMENT );
395
+ }
396
+ /* Convert depth to 1 */
397
+ mask = ImageData .convertMask (mask );
398
+ source = ImageData .convertMask (source );
399
+
400
+ /* Make sure source and mask scanline pad is 2 */
401
+ byte [] sourceData = ImageData .convertPad (source .data , source .width , source .height , source .depth , source .scanlinePad , 2 );
402
+ byte [] maskData = ImageData .convertPad (mask .data , mask .width , mask .height , mask .depth , mask .scanlinePad , 2 );
403
+
404
+ /* Create the cursor */
405
+ long hInst = OS .GetModuleHandle (null );
406
+ long handle = OS .CreateCursor (hInst , hotspotX , hotspotY , source .width , source .height , sourceData , maskData );
407
+ if (handle == 0 ) SWT .error (SWT .ERROR_NO_HANDLES );
408
+ return handle ;
394
409
}
395
410
396
411
/**
0 commit comments