apple2ix/Apple2Mac/DDHidLib/device_test/RemoteFeedbackView.m

163 lines
4.1 KiB
Objective-C

/*
* Copyright (c) 2007 Dave Dribin
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use, copy,
* modify, merge, publish, distribute, sublicense, and/or sell copies
* of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
// Based on Martin Kahr's Apple Remote wrapper
// http://www.martinkahr.com/source-code/
#import "RemoteFeedbackView.h"
@implementation RemoteFeedbackView
- (id)initWithFrame:(NSRect)frameRect
{
if ((self = [super initWithFrame:frameRect]) != nil) {
remoteImage = [[NSImage imageNamed:@"AppleRemote"] retain];
lastButtonIdentifier = -1;
}
return self;
}
- (void) dealloc {
[remoteImage release];
[super dealloc];
}
- (void) clearAfterRedraw: (id) sender
{
clearAfterDraw = NO;
[self ddhidAppleRemoteButton: lastButtonIdentifier pressedDown: NO];
}
- (void) ddhidAppleRemoteButton: (DDHidAppleRemoteEventIdentifier)buttonIdentifier
pressedDown: (BOOL) pressedDown;
{
clearAfterDraw = NO;
if (pressedDown) {
lastButtonIdentifier = buttonIdentifier;
} else {
if (drawn)
lastButtonIdentifier = -1;
else {
lastButtonIdentifier = buttonIdentifier;
clearAfterDraw = YES;
}
}
drawn = NO;
[self setNeedsDisplay:YES];
}
- (void)drawRect:(NSRect)rect
{
drawn = YES;
NSRect imageRect;
NSRect drawingRect;
imageRect.origin = NSZeroPoint;
imageRect.size = [remoteImage size];
int x = ([self bounds].size.width - [remoteImage size].width)/2;
int y = ([self bounds].size.height - [remoteImage size].height)/2;
drawingRect.origin = NSMakePoint(x, y);
drawingRect.size = imageRect.size;
[remoteImage drawInRect: drawingRect
fromRect: imageRect
operation: NSCompositeSourceOver
fraction: 1.0];
if (lastButtonIdentifier == -1) {
return;
}
DDHidAppleRemoteEventIdentifier buttonToSelect = lastButtonIdentifier;
NSPoint buttonPos = NSZeroPoint;
float opacity = 0.5;
switch(buttonToSelect) {
case kDDHidRemoteButtonVolume_Plus:
buttonPos.x = 53;
buttonPos.y = 240;
break;
case kDDHidRemoteButtonVolume_Minus:
buttonPos.x = 53;
buttonPos.y = 180;
break;
case kDDHidRemoteButtonMenu_Hold:
opacity = 0.8;
case kDDHidRemoteButtonMenu:
buttonPos.x = 53;
buttonPos.y = 137;
clearAfterDraw = YES;
break;
case kDDHidRemoteButtonPlay_Sleep:
opacity = 0.8;
case kDDHidRemoteButtonPlay:
buttonPos.x = 53;
buttonPos.y = 210;
clearAfterDraw = YES;
break;
case kDDHidRemoteButtonRight_Hold:
opacity = 0.8;
buttonPos.x = 83;
buttonPos.y = 210;
break;
case kDDHidRemoteButtonRight:
buttonPos.x = 83;
buttonPos.y = 210;
clearAfterDraw = YES;
break;
case kDDHidRemoteButtonLeft_Hold:
opacity = 0.8;
buttonPos.x = 23;
buttonPos.y = 210;
break;
case kDDHidRemoteButtonLeft:
buttonPos.x = 23;
buttonPos.y = 210;
clearAfterDraw = YES;
break;
default:
break;
}
float width = 20.0;
float height= 20.0;
NSRect r = NSMakeRect(buttonPos.x + x - (width/2), buttonPos.y + y - (height/2), width, height);
NSBezierPath* bp = [NSBezierPath bezierPathWithOvalInRect:r];
[[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:opacity] set];
[bp fill];
if (clearAfterDraw) {
[self performSelector:@selector(clearAfterRedraw:) withObject:self afterDelay:0.1];
}
}
@end