diff --git a/ChangeLog b/ChangeLog index f5fc4e9a4..979db1ed4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2013-09-18 18:17-EDT Gregory John Casamento + + * Headers/AppKit/AppKit.h: Add NSTrackingArea.h + * Headers/AppKit/NSTrackingArea.h: Add interface for NSTrackingArea + * Source/GNUmakefile: Add NSTrackingArea.[hm] to makefile. + * Source/NSTrackingArea.m: Add implementation for NSTrackingArea + 2013-09-17 Riccardo Mottola * Source/NSSplitView.m diff --git a/Headers/AppKit/AppKit.h b/Headers/AppKit/AppKit.h index dcbed3614..ad06d9ce0 100644 --- a/Headers/AppKit/AppKit.h +++ b/Headers/AppKit/AppKit.h @@ -182,6 +182,7 @@ #import #import #import +#import #import #import #import diff --git a/Headers/AppKit/NSTrackingArea.h b/Headers/AppKit/NSTrackingArea.h new file mode 100644 index 000000000..98032ef03 --- /dev/null +++ b/Headers/AppKit/NSTrackingArea.h @@ -0,0 +1,76 @@ +/* + NSTrackingArea.h + + Create a rectangle to track mouse movements. + + Copyright (C) 2013 Free Software Foundation, Inc. + + Written by: Gregory Casamento + Date: September 2013 + + This file is part of the GNUstep GUI Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; see the file COPYING.LIB. + If not, see or write to the + Free Software Foundation, 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef _GNUstep_H_NSTrackingArea +#define _GNUstep_H_NSTrackingArea + +#import +#import +#import "GNUstepGUI/GSTrackingRect.h" + +/* + * Options pulled from Cocoa documentation. + */ +enum { + NSTrackingMouseEnteredAndExited = 1, + NSTrackingMouseMoved = 2, + NSTrackingCursorUpdate = 4, + NSTrackingActiveWhenFirstResponder = 8, + NSTrackingActiveInKeyWindow = 16, + NSTrackingActiveInActiveApp = 32, + NSTrackingActiveAlways = 64, + NSTrackingAssumeInside = 128, + NSTrackingInVisibleRect = 256, + NSTrackingEnabledDuringMouseDrag = 512 +}; +typedef NSUInteger NSTrackingAreaOptions; + +@class NSDictionary; + +@interface NSTrackingArea : NSObject +{ + NSDictionary *_userInfo; + GSTrackingRect *_trackingRect; + NSTrackingAreaOptions _options; +} + +- (id)initWithRect: (NSRect)rect + options: (NSTrackingAreaOptions)options + owner: (id)owner + userInfo: (NSDictionary *)userInfo; + +- (NSTrackingAreaOptions) options; +- (id) owner; +- (NSRect) rect; +- (NSDictionary *) userInfo; + +@end + +#endif // _GNUstep_H_NSTrackingArea + diff --git a/Source/GNUmakefile b/Source/GNUmakefile index fff776712..6509a03e3 100644 --- a/Source/GNUmakefile +++ b/Source/GNUmakefile @@ -188,6 +188,7 @@ NSToolbarItem.m \ NSToolbarItemGroup.m \ NSTokenField.m \ NSTokenFieldCell.m \ +NSTrackingArea.m \ NSTreeController.m \ NSTreeNode.m \ NSUserDefaultsController.m \ @@ -400,6 +401,7 @@ NSToolbarItem.h \ NSToolbarItemGroup.h \ NSTokenField.h \ NSTokenFieldCell.h \ +NSTrackingArea.h \ NSTreeController.h \ NSTreeNode.h \ NSUserDefaultsController.h \ diff --git a/Source/NSTrackingArea.m b/Source/NSTrackingArea.m new file mode 100644 index 000000000..ff037df19 --- /dev/null +++ b/Source/NSTrackingArea.m @@ -0,0 +1,108 @@ +/* + NSTrackingArea.h + + Track mouse movements in and out of a rectangle on screen. + + Copyright (C) 2013 Free Software Foundation, Inc. + + Written by: Gregory Casamento + Date: September 2013 + + This file is part of the GNUstep GUI Library. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; see the file COPYING.LIB. + If not, see or write to the + Free Software Foundation, 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#import + +@implementation NSTrackingArea + +- (id)initWithRect: (NSRect)rect + options: (NSTrackingAreaOptions)options + owner: (id)owner + userInfo: (NSDictionary *)userInfo +{ + if((self = [super init]) != nil) + { + BOOL flag = (BOOL)(options & NSTrackingAssumeInside); + + _userInfo = RETAIN(_userInfo); + _options = options; + _trackingRect = [[GSTrackingRect alloc] initWithRect:rect + tag:0 + owner:owner + userData:(void *)userInfo + inside:flag]; + } + return self; +} + +- (void) dealloc +{ + [_userInfo release]; + [_trackingRect release]; + [super dealloc]; +} + +- (NSTrackingAreaOptions) options +{ + return _options; +} + +- (id) owner +{ + return [_trackingRect owner]; +} + +- (NSRect) rect +{ + return [_trackingRect rectangle]; +} + +- (NSDictionary *) userInfo +{ + return _userInfo; +} + +- (void) encodeWithCoder: (NSCoder *)coder +{ + // [super encodeWithCoder:coder]; +} + +- (id) initWithCoder: (NSCoder *)coder +{ + //[super initWithCoder:coder]; + return self; +} + +- (id) copyWithZone: (NSZone *)zone +{ + NSRect rect = [self rect]; + NSTrackingAreaOptions options = [self options]; + id owner = [self owner]; + id info = [self userInfo]; + NSTrackingArea *newArea = [[NSTrackingArea allocWithZone:zone] + initWithRect: rect + options: options + owner: owner + userInfo: info]; + + return newArea; +} + +@end +