mirror of
https://github.com/mauiaaron/apple2.git
synced 2024-11-19 11:31:13 +00:00
163 lines
4.1 KiB
Objective-C
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
|