Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @implementation MyView
- - (id)initWithFrame:(NSRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- pointXPosition = 200.0f;
- pointYPosition = 200.0f;
- locked = NO;
- }
- return self;
- }
- - (void) drawRect:(NSRect)rect {
- NSRect point = NSMakeRect(pointXPosition, pointYPosition, 6.0f, 6.0f);
- [[NSColor redColor] set];
- NSRectFill(point);
- }
- - (void)mouseDown:(NSEvent *)theEvent {
- NSPoint mousePos = [theEvent locationInWindow];
- NSRect frame = [super frame];
- CGFloat deltaX = mousePos.x - frame.origin.x - pointXPosition;
- CGFloat deltaY = mousePos.y - frame.origin.y - pointYPosition;
- if(sqrtf(deltaX * deltaX + deltaY * deltaY) < 100.0f)
- locked = YES;
- }
- - (void)mouseUp:(NSEvent *)theEvent {
- locked = NO;
- }
- - (void)mouseDragged:(NSEvent *)theEvent {
- if(locked) {
- NSPoint mousePos = [theEvent locationInWindow];
- NSRect frame = [super frame];
- CGFloat oldXPos = pointXPosition;
- CGFloat oldYPos = pointYPosition;
- pointXPosition = mousePos.x - frame.origin.x;
- pointYPosition = mousePos.y - frame.origin.y;
- CGFloat rectToDisplayXMin = MIN(oldXPos, pointXPosition);
- CGFloat rectToDisplayYMin = MIN(oldYPos, pointYPosition);
- CGFloat rectWidthToDisplay = MAX(oldXPos, pointXPosition) - rectToDisplayXMin;
- CGFloat rectHeigthToDisplay = MAX(oldYPos, pointYPosition) - rectToDisplayYMin;
- NSRect dirtyRect = NSMakeRect(rectToDisplayXMin,
- rectToDisplayYMin,
- rectWidthToDisplay + 6.0f,
- rectHeigthToDisplay + 6.0f);
- [self setNeedsDisplayInRect:dirtyRect];
- }
- }
- // convert from the window's coordinate system to the local coordinate system
- NSPoint clickPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
- // convert from some other view's cooridinate system
- NSPoint otherPoint = [self convertPoint:somePoint fromView:someSuperview];
Add Comment
Please, Sign In to add comment