1 | //
|
---|
2 | // NJRVendingImageView.m
|
---|
3 | // DockCam
|
---|
4 | //
|
---|
5 | // Created by Nicholas Riley on Fri Jun 28 2002.
|
---|
6 | // Copyright (c) 2002 Nicholas Riley. All rights reserved.
|
---|
7 | //
|
---|
8 |
|
---|
9 | #import "NJRVendingImageView.h"
|
---|
10 |
|
---|
11 | @implementation NJRVendingImageView
|
---|
12 |
|
---|
13 | NSCursor *openHandCursor = nil, *closedHandCursor = nil;
|
---|
14 |
|
---|
15 | + (void)initialize;
|
---|
16 | {
|
---|
17 | openHandCursor = [[NSCursor alloc] initWithImage: [NSImage imageNamed: @"Open hand"] hotSpot: NSMakePoint(7, 7)];
|
---|
18 | closedHandCursor = [[NSCursor alloc] initWithImage: [NSImage imageNamed: @"Closed hand"] hotSpot: NSMakePoint(7, 7)];
|
---|
19 | }
|
---|
20 |
|
---|
21 | - (void)putImageOnPasteboard:(NSPasteboard *)pboard;
|
---|
22 | {
|
---|
23 | [pboard declareTypes: [NSArray arrayWithObject: NSTIFFPboardType] owner: self];
|
---|
24 | [pboard setData: [[self image] TIFFRepresentation] forType: NSTIFFPboardType];
|
---|
25 | }
|
---|
26 |
|
---|
27 | - (void)mouseDown:(NSEvent *)event;
|
---|
28 | {
|
---|
29 | NSPasteboard *pboard = [NSPasteboard pasteboardWithName: NSDragPboard];
|
---|
30 | NSImage *image = [self image];
|
---|
31 | NSRect viewRect = { NSZeroPoint, [self bounds].size };
|
---|
32 | NSRect imageRect = { NSZeroPoint, [image size] };
|
---|
33 | NSImage *draggingImage = [[NSImage alloc] initWithSize: viewRect.size];
|
---|
34 |
|
---|
35 | [draggingImage lockFocus];
|
---|
36 | [image drawInRect: viewRect fromRect: imageRect operation: NSCompositeCopy fraction: 0.6];
|
---|
37 | [draggingImage unlockFocus];
|
---|
38 |
|
---|
39 | [self putImageOnPasteboard: pboard];
|
---|
40 |
|
---|
41 | [NSApp currentEvent];
|
---|
42 |
|
---|
43 | [closedHandCursor push]; // XXX doesn't always work, bug 2976315
|
---|
44 |
|
---|
45 | [self dragImage: draggingImage at: NSZeroPoint offset: NSZeroSize event: event pasteboard: pboard source: self slideBack: YES];
|
---|
46 |
|
---|
47 | [closedHandCursor pop];
|
---|
48 | }
|
---|
49 |
|
---|
50 | // XXX guess at size of resize corner
|
---|
51 | #define RESIZE_CORNER_EDGE 15
|
---|
52 |
|
---|
53 | // XXX assumes that the view takes up the entire window, fine for this app but not in general
|
---|
54 | - (void)resetCursorRects;
|
---|
55 | {
|
---|
56 | NSRect rect = [self bounds];
|
---|
57 |
|
---|
58 | rect.origin.y += RESIZE_CORNER_EDGE;
|
---|
59 | rect.size.height -= RESIZE_CORNER_EDGE;
|
---|
60 | [self addCursorRect: rect cursor: openHandCursor];
|
---|
61 |
|
---|
62 | rect.origin.y -= RESIZE_CORNER_EDGE;
|
---|
63 | rect.size.height = RESIZE_CORNER_EDGE;
|
---|
64 | rect.size.width -= RESIZE_CORNER_EDGE;
|
---|
65 | [self addCursorRect: rect cursor: openHandCursor];
|
---|
66 | }
|
---|
67 |
|
---|
68 | @end
|
---|