[5] | 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
|
---|