mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-22 13:10:59 +00:00
Initial implementation of NSScroller.
Reinstate NSCursor and NSColorWell changes that got lost. Utilize config.h file instead of compiler defines. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@2228 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
8ed2402f35
commit
e3b40cf7bc
24 changed files with 916 additions and 144 deletions
42
ChangeLog
42
ChangeLog
|
@ -1,3 +1,20 @@
|
|||
Tue Mar 4 17:04:16 1997 GNUstep Development <gnustep@net-community.com>
|
||||
|
||||
* Reinstate NSCursor and NSColorWell changes that got lost.
|
||||
|
||||
* configure.in: Utilize config.h file instead of compiler defines.
|
||||
* configure: Regenerate for configure.in changes.
|
||||
* Headers/gnustep/dps/DPSOperators.h: Correct name.
|
||||
* Headers/gnsutep/gui/Headers/TypesandConstants.h: Correct name.
|
||||
* Headers/gnustep/gui/config.h.in: Correct names.
|
||||
* Headers/gnustep/gui/nsimage-tiff.h: Correct name.
|
||||
|
||||
* Source/NSCell.m: Redraw cell when needed during tracking.
|
||||
|
||||
* Initial NSScroller implementation.
|
||||
* Headers/gnustep/gui/NSScroller.h: Likewise.
|
||||
* Source/NSScroller.m: Likewise.
|
||||
|
||||
Tue Mar 4 09:28:57 1997 GNUstep Development <gnustep@net-community.com>
|
||||
|
||||
* Headers/gnustep/gui/NSEvent.h: Include needed header file.
|
||||
|
@ -58,6 +75,31 @@ Sat Feb 15 23:12:35 1997 Ovidiu Predescu <ovidiu@bx.logicnet.ro>
|
|||
* Headers/gnustep/gui/NSNibLoading.h: Added category to NSBundle that
|
||||
deals with nib loading.
|
||||
|
||||
Wed Feb 12 14:14:47 1997 GNUstep Development <gnustep@net-community.com>
|
||||
|
||||
* Initial implementation of NSCursor.
|
||||
* Headers/gnustep/gui/NSCursor.h: Likewise.
|
||||
* Source/NSCursor.m: Likewise.
|
||||
* Headers/gnustep/gui/NSWindow.h: Implement cursor rectangles.
|
||||
* Source/NSView.m: Likewise.
|
||||
* Source/NSWindow.m: Likewise.
|
||||
* Source/Makefile.in: Clean up variables
|
||||
* Source/NSApplication.m: Fixes to event posting. Unhide the
|
||||
cursor when a mouse event occurs.
|
||||
* Source/NSEvent.m: NSCursorUpdate events are implemented
|
||||
as enter/exit events instead of other events.
|
||||
* Headers/gnustep/gui/NSTextField.h: Add text field cursor.
|
||||
* Source/NSTextField.m: Likewise.
|
||||
|
||||
Thu Feb 6 19:31:54 1997 GNUstep Development <gnustep@net-community.com>
|
||||
|
||||
* Fill out implementation of NSColorWell.
|
||||
* Headers/gnustep/gui/NSColorWell.h: Add backend instance variable
|
||||
and backend method.
|
||||
* Source/NSColorWell.m: Initial implementation.
|
||||
* NSView.m: Don't use -isKindOfClass: because it isn't working
|
||||
as we expect with the backend classes doing a +poseAs:
|
||||
|
||||
Mon Feb 10 17:23:06 1997 Ovidiu Predescu <ovidiu@bx.logicnet.ro>
|
||||
|
||||
* Source/NSFont.m: Completely reworked. Get the default fonts using
|
||||
|
|
|
@ -32,11 +32,11 @@
|
|||
#include <gnustep/gui/config.h>
|
||||
|
||||
// Use the DPSclient library if we have it
|
||||
#ifdef HAVE_DPSCLIENT
|
||||
#ifdef HAVE_DPS_DPSCLIENT_H
|
||||
|
||||
#include <DPS/dpsclient.h>
|
||||
#include <DPS/psops.h>
|
||||
|
||||
#endif /* HAVE_DPSCLIENT */
|
||||
#endif /* HAVE_DPS_DPSCLIENT_H */
|
||||
|
||||
#endif /* _GNUstep_H_DPSOperators */
|
||||
|
|
|
@ -34,14 +34,14 @@
|
|||
@class NSString;
|
||||
|
||||
// These are already defined in the DPSclient headers
|
||||
#ifndef HAVE_DPSCLIENT
|
||||
#ifndef HAVE_DPS_DPSCLIENT_H
|
||||
typedef void *DPSProgramEncoding;
|
||||
typedef void *DPSNameEncoding;
|
||||
typedef void *DPSTextProc;
|
||||
typedef void *DPSErrorProc;
|
||||
typedef void DPSBinObjSeqRec;
|
||||
typedef unsigned int DPSDefinedType;
|
||||
#endif /* HAVE_DPSCLIENT */
|
||||
#endif /* HAVE_DPS_DPSCLIENT_H */
|
||||
|
||||
//
|
||||
// Backing Store Types
|
||||
|
|
|
@ -40,6 +40,9 @@
|
|||
NSColor *the_color;
|
||||
BOOL is_active;
|
||||
BOOL is_bordered;
|
||||
|
||||
// Reserved for back-end use
|
||||
void *be_cwell_reserved;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -75,4 +78,13 @@
|
|||
|
||||
@end
|
||||
|
||||
//
|
||||
// GNUstep backend methods
|
||||
//
|
||||
@interface NSColorWell (GNUstepBackend)
|
||||
|
||||
- (void)drawBorderRect:(NSRect)aRect;
|
||||
|
||||
@end
|
||||
|
||||
#endif // _GNUstep_H_NSColorWell
|
||||
|
|
|
@ -66,10 +66,12 @@ extern const float NSScrollerWidth;
|
|||
{
|
||||
// Attributes
|
||||
BOOL is_horizontal;
|
||||
SEL action;
|
||||
id target;
|
||||
float percent;
|
||||
float cur_value;
|
||||
float knob_proportion;
|
||||
NSScrollerPart hit_part;
|
||||
NSScrollArrowPosition arrows_position;
|
||||
NSImage *increment_arrow;
|
||||
NSImage *decrement_arrow;
|
||||
NSImage *knob_dimple;
|
||||
|
||||
// Reserved for back-end use
|
||||
void *be_scroll_reserved;
|
||||
|
@ -119,4 +121,18 @@ extern const float NSScrollerWidth;
|
|||
|
||||
@end
|
||||
|
||||
//
|
||||
// Methods implemented by the backend
|
||||
//
|
||||
@interface NSScroller (GNUstepBackend)
|
||||
|
||||
- (void)drawBar;
|
||||
- (NSRect)boundsOfScrollerPart:(NSScrollerPart)part;
|
||||
- (BOOL)isPointInIncrementArrow:(NSPoint)aPoint;
|
||||
- (BOOL)isPointInDecrementArrow:(NSPoint)aPoint;
|
||||
- (BOOL)isPointInKnob:(NSPoint)aPoint;
|
||||
- (BOOL)isPointInBar:(NSPoint)aPoint;
|
||||
|
||||
@end
|
||||
|
||||
#endif // _GNUstep_H_NSScroller
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
@class NSNotification;
|
||||
@class NSColor;
|
||||
@class NSText;
|
||||
@class NSCursor;
|
||||
|
||||
@interface NSTextField : NSControl <NSCoding>
|
||||
{
|
||||
|
@ -42,6 +43,7 @@
|
|||
id previous_text;
|
||||
id text_delegate;
|
||||
SEL error_action;
|
||||
NSCursor *text_cursor;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -74,6 +74,7 @@ enum {
|
|||
NSMutableArray *sub_views;
|
||||
id window;
|
||||
NSMutableArray *tracking_rects;
|
||||
NSMutableArray *cursor_rects;
|
||||
|
||||
BOOL is_flipped;
|
||||
BOOL is_rotated_from_base;
|
||||
|
@ -229,6 +230,7 @@ enum {
|
|||
- (void)removeCursorRect:(NSRect)aRect
|
||||
cursor:(NSCursor *)anObject;
|
||||
- (void)resetCursorRects;
|
||||
- (NSArray *)cursorRectangles;
|
||||
|
||||
//
|
||||
// Assigning a Tag
|
||||
|
|
|
@ -98,6 +98,7 @@ extern NSSize NSTokenSize;
|
|||
BOOL dynamic_depth_limit;
|
||||
|
||||
BOOL cursor_rects_enabled;
|
||||
BOOL cursor_rects_valid;
|
||||
|
||||
BOOL visible;
|
||||
BOOL is_key;
|
||||
|
|
|
@ -33,10 +33,11 @@
|
|||
|
||||
#include <Foundation/NSGeometry.h>
|
||||
|
||||
@config_include@
|
||||
/* Do we have the TIFF Graphics library */
|
||||
#undef HAVE_TIFF_H
|
||||
|
||||
#define HAVE_TIFF @HAVE_TIFF@
|
||||
#define HAVE_DPSCLIENT @HAVE_DPSCLIENT@
|
||||
/* Do we have the DPS Client library? */
|
||||
#undef HAVE_DPS_DPSCLIENT_H
|
||||
|
||||
#endif /* _GNUstep_H_AppKitConfig */
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
#ifndef _GNUstep_H_tiff
|
||||
#define _GNUstep_H_tiff
|
||||
|
||||
#ifdef HAVE_TIFF
|
||||
#ifdef HAVE_TIFF_H
|
||||
#include <tiffio.h>
|
||||
#else
|
||||
#define TIFF void
|
||||
|
|
|
@ -55,8 +55,8 @@ common_RadioOn.tiff \
|
|||
common_RadioOff.tiff \
|
||||
common_SwitchOn.tiff \
|
||||
common_SwitchOff.tiff \
|
||||
common_ret.tiff \
|
||||
common_Dimple.tiff
|
||||
common_Dimple.tiff \
|
||||
common_ret.tiff
|
||||
|
||||
installdirs:
|
||||
$(srcdir)/../mkinstalldirs $(libdir) $(gnustep_libdir) $(imagedir)
|
||||
|
|
|
@ -45,9 +45,11 @@ bindir = @bindir@
|
|||
|
||||
MAKEDEFINES =
|
||||
|
||||
CC = @CC@ -g
|
||||
CC = @CC@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CFLAGS = -c $(GCCFLAGS) -I../Headers $(CPPFLAGS)
|
||||
CFLAGS = -g -O -Wall $(GCCFLAGS)
|
||||
ALL_CPPFLAGS = $(CPPFLAGS) -I../Headers
|
||||
ALL_CFLAGS = $(ALL_CPPFLAGS) $(CFLAGS)
|
||||
DEFS = -DGNUSTEP_INSTALL_LIBDIR=\"$(gnustep_libdir)\" @DEFS@
|
||||
|
||||
GCC_LIB =
|
||||
|
@ -236,9 +238,9 @@ OBJS = $(OBJS_WITHOUT_INIT)
|
|||
|
||||
.SUFFIXES: .m
|
||||
.m$(oext):
|
||||
$(CC) $(CFLAGS) $(DEFS) $<
|
||||
$(CC) -c $(ALL_CFLAGS) $(DEFS) -o $@ $<
|
||||
.c$(oext):
|
||||
$(CC) $(CFLAGS) $(DEFS) $<
|
||||
$(CC) -c $(ALL_CFLAGS) $(DEFS) -o $@ $<
|
||||
|
||||
#
|
||||
# libraries
|
||||
|
@ -270,7 +272,7 @@ $(MAIN_FILE)$(libext): $(OBJS)
|
|||
$(INIT_FILE_OBJ): $(OBJS_WITHOUT_INIT)
|
||||
nm $(OBJS_WITHOUT_INIT) | grep " __GLOBAL_" > tmpinit.c
|
||||
collect tmpinit.c $(INIT_FILE)
|
||||
$(CC) $(CFLAGS) $(INIT_FILE).c
|
||||
$(CC) $(ALL_CFLAGS) $(INIT_FILE).c
|
||||
rm tmpinit.c
|
||||
|
||||
install: installdirs install-lib install-headers
|
||||
|
@ -315,6 +317,9 @@ uninstall:
|
|||
rm -rf $(includedir)/DPSClient
|
||||
rm -rf $(libdir)/$(MAIN_FILE)$(libext)
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in ../config.status
|
||||
cd ..; $(SHELL) config.status
|
||||
|
||||
#
|
||||
# Cleaning
|
||||
#
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <AppKit/NSImage.h>
|
||||
#include <AppKit/NSMenu.h>
|
||||
#include <AppKit/NSMenuCell.h>
|
||||
#include <AppKit/NSCursor.h>
|
||||
|
||||
//
|
||||
// Class variables
|
||||
|
@ -269,7 +270,7 @@ NSString *NSApplicationWillUpdateNotification = @"ApplicationWillUpdate";
|
|||
e = [self nextEventMatchingMask:NSAnyEventMask untilDate:nil
|
||||
inMode:nil dequeue:YES];
|
||||
if (e)
|
||||
[self postEvent:e atStart:YES];
|
||||
[self sendEvent: e];
|
||||
else
|
||||
{
|
||||
// Null event
|
||||
|
@ -446,7 +447,7 @@ NSString *NSApplicationWillUpdateNotification = @"ApplicationWillUpdate";
|
|||
if ([event_queue count])
|
||||
{
|
||||
j = [event_queue count];
|
||||
for (i = j-1;i > 0; --i)
|
||||
for (i = j-1;i >= 0; --i)
|
||||
{
|
||||
e = [event_queue objectAtIndex: i];
|
||||
if ([self event: e matchMask: mask])
|
||||
|
@ -475,13 +476,32 @@ NSString *NSApplicationWillUpdateNotification = @"ApplicationWillUpdate";
|
|||
}
|
||||
}
|
||||
|
||||
// Unhide the cursor if necessary
|
||||
{
|
||||
NSEventType type;
|
||||
|
||||
// Only if we should unhide when mouse moves
|
||||
if ([NSCursor isHiddenUntilMouseMoves])
|
||||
{
|
||||
// Make sure the event is a mouse event before unhiding
|
||||
type = [e type];
|
||||
if ((type == NSLeftMouseDown) || (type == NSLeftMouseUp)
|
||||
|| (type == NSRightMouseDown) || (type == NSRightMouseUp)
|
||||
|| (type == NSMouseMoved))
|
||||
[NSCursor unhide];
|
||||
}
|
||||
}
|
||||
|
||||
[self setCurrentEvent: e];
|
||||
return e;
|
||||
}
|
||||
|
||||
- (void)postEvent:(NSEvent *)event atStart:(BOOL)flag
|
||||
{
|
||||
[self sendEvent:event];
|
||||
if (flag)
|
||||
[event_queue addObject: event];
|
||||
else
|
||||
[event_queue insertObject: event atIndex: 0];
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
//
|
||||
// class variables
|
||||
//
|
||||
static id MB_NSBUTTON_CLASS = nil;
|
||||
id gnustep_gui_nsbutton_class = nil;
|
||||
|
||||
//
|
||||
// NSButton implementation
|
||||
|
@ -61,12 +61,12 @@ static id MB_NSBUTTON_CLASS = nil;
|
|||
//
|
||||
+ (Class)cellClass
|
||||
{
|
||||
return MB_NSBUTTON_CLASS;
|
||||
return gnustep_gui_nsbutton_class;
|
||||
}
|
||||
|
||||
+ (void)setCellClass:(Class)classId
|
||||
{
|
||||
MB_NSBUTTON_CLASS = classId;
|
||||
gnustep_gui_nsbutton_class = classId;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -86,7 +86,7 @@ static id MB_NSBUTTON_CLASS = nil;
|
|||
|
||||
// set our cell
|
||||
[[self cell] release];
|
||||
[self setCell:[[MB_NSBUTTON_CLASS alloc] init]];
|
||||
[self setCell:[[gnustep_gui_nsbutton_class alloc] init]];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
|
|
@ -640,26 +640,42 @@
|
|||
// should be in the window coordinates, but is in the receiving
|
||||
// view's coordinate.
|
||||
location = [e locationInWindow];
|
||||
// point = [controlView convertPoint: location fromView: nil];
|
||||
point = [controlView convertPoint: location fromView: nil];
|
||||
NSDebugLog(@"NSCell location %f %f\n", location.x, location.y);
|
||||
NSDebugLog(@"NSCell point %f %f\n", point.x, point.y);
|
||||
|
||||
// Point is not in cell
|
||||
if (![controlView mouse: point inRect: cellFrame])
|
||||
{
|
||||
NSDebugLog(@"NSCell point not in cell frame\n");
|
||||
// If point not in cell then unhighlight cell
|
||||
[self highlight: NO withFrame: cellFrame
|
||||
inView: controlView];
|
||||
// unhighlight cell is highlighted
|
||||
if (cell_highlighted)
|
||||
{
|
||||
[self highlight: NO withFrame: cellFrame
|
||||
inView: controlView];
|
||||
[self drawWithFrame: cellFrame inView: controlView];
|
||||
}
|
||||
|
||||
// Do we now return or keep tracking
|
||||
if ((![[self class] prefersTrackingUntilMouseUp])
|
||||
|| (!flag))
|
||||
&& (!flag))
|
||||
{
|
||||
NSDebugLog(@"NSCell return immediately\n");
|
||||
done = YES;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Point is in cell
|
||||
// highlight cell if not highlighted
|
||||
if (!cell_highlighted)
|
||||
{
|
||||
[self highlight: YES withFrame: cellFrame
|
||||
inView: controlView];
|
||||
//[self drawWithFrame: cellFrame inView: controlView];
|
||||
}
|
||||
}
|
||||
|
||||
// should we continue tracking?
|
||||
if (![self continueTracking: last_point at: point
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
#include <AppKit/NSColorWell.h>
|
||||
#include <AppKit/NSColor.h>
|
||||
|
||||
@implementation NSColorWell
|
||||
|
||||
|
@ -45,14 +46,30 @@
|
|||
//
|
||||
// Instance methods
|
||||
//
|
||||
- initWithFrame:(NSRect)frameRect
|
||||
{
|
||||
[super initWithFrame: frameRect];
|
||||
|
||||
is_bordered = YES;
|
||||
is_active = NO;
|
||||
the_color = [NSColor blackColor];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
//
|
||||
// Drawing
|
||||
//
|
||||
- (void)drawRect:(NSRect)rect
|
||||
{
|
||||
// xxx Draw border
|
||||
NSLog(@"NSColorWell drawRect: %f %f %f %f\n", rect.origin.x, rect.origin.y,
|
||||
rect.size.width, rect.size.height);
|
||||
|
||||
// Draw border
|
||||
if (is_bordered)
|
||||
[self drawBorderRect: rect];
|
||||
|
||||
// Draw the color inside
|
||||
[self drawWellInside: rect];
|
||||
}
|
||||
|
||||
|
@ -133,3 +150,14 @@
|
|||
}
|
||||
|
||||
@end
|
||||
|
||||
//
|
||||
// GNUstep backend methods
|
||||
//
|
||||
@implementation NSColorWell (GNUstepBackend)
|
||||
|
||||
- (void)drawBorderRect:(NSRect)aRect
|
||||
{
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -163,7 +163,8 @@
|
|||
e = [[[NSEvent alloc] init] autorelease];
|
||||
|
||||
// Make sure it is one of the right event types
|
||||
if ((type != NSMouseEntered) && (type != NSMouseExited))
|
||||
if ((type != NSMouseEntered) && (type != NSMouseExited)
|
||||
&& (type != NSCursorUpdate))
|
||||
return nil;
|
||||
|
||||
// Set the event fields
|
||||
|
@ -264,8 +265,7 @@
|
|||
e = [[[NSEvent alloc] init] autorelease];
|
||||
|
||||
// Make sure it is one of the right event types
|
||||
if ((type != NSFlagsChanged) && (type != NSCursorUpdate) &&
|
||||
(type != NSPeriodic))
|
||||
if ((type != NSFlagsChanged) && (type != NSPeriodic))
|
||||
return nil;
|
||||
|
||||
// Set the event fields
|
||||
|
@ -428,7 +428,8 @@
|
|||
//
|
||||
- (int)trackingNumber
|
||||
{
|
||||
if ((event_type != NSMouseEntered) && (event_type != NSMouseExited))
|
||||
if ((event_type != NSMouseEntered) && (event_type != NSMouseExited)
|
||||
&& (event_type != NSCursorUpdate))
|
||||
return 0;
|
||||
|
||||
return event_data.tracking.tracking_num;
|
||||
|
@ -436,7 +437,8 @@
|
|||
|
||||
- (void *)userData
|
||||
{
|
||||
if ((event_type != NSMouseEntered) && (event_type != NSMouseExited))
|
||||
if ((event_type != NSMouseEntered) && (event_type != NSMouseExited)
|
||||
&& (event_type != NSCursorUpdate))
|
||||
return NULL;
|
||||
|
||||
return event_data.tracking.user_data;
|
||||
|
@ -448,8 +450,7 @@
|
|||
- (int)data1
|
||||
{
|
||||
// Make sure it is one of the right event types
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSCursorUpdate) &&
|
||||
(event_type != NSPeriodic))
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSPeriodic))
|
||||
return 0;
|
||||
|
||||
return event_data.misc.data1;
|
||||
|
@ -458,8 +459,7 @@
|
|||
- (int)data2
|
||||
{
|
||||
// Make sure it is one of the right event types
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSCursorUpdate) &&
|
||||
(event_type != NSPeriodic))
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSPeriodic))
|
||||
return 0;
|
||||
|
||||
return event_data.misc.data2;
|
||||
|
@ -468,8 +468,7 @@
|
|||
- (short)subtype
|
||||
{
|
||||
// Make sure it is one of the right event types
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSCursorUpdate) &&
|
||||
(event_type != NSPeriodic))
|
||||
if ((event_type != NSFlagsChanged) && (event_type != NSPeriodic))
|
||||
return 0;
|
||||
|
||||
return event_data.misc.sub_type;;
|
||||
|
@ -505,6 +504,7 @@
|
|||
|
||||
case NSMouseEntered:
|
||||
case NSMouseExited:
|
||||
case NSCursorUpdate:
|
||||
// Can't do anything with the user_data!?
|
||||
[aCoder encodeValuesOfObjCTypes: "ii", &event_data.tracking.event_num,
|
||||
&event_data.tracking.tracking_num];
|
||||
|
@ -520,7 +520,6 @@
|
|||
|
||||
case NSFlagsChanged:
|
||||
case NSPeriodic:
|
||||
case NSCursorUpdate:
|
||||
[aCoder encodeValuesOfObjCTypes: "sii", &event_data.misc.sub_type,
|
||||
&event_data.misc.data1, &event_data.misc.data2];
|
||||
break;
|
||||
|
@ -551,6 +550,7 @@
|
|||
|
||||
case NSMouseEntered:
|
||||
case NSMouseExited:
|
||||
case NSCursorUpdate:
|
||||
// Can't do anything with the user_data!?
|
||||
[aDecoder decodeValuesOfObjCTypes: "ii", &event_data.tracking.event_num,
|
||||
&event_data.tracking.tracking_num];
|
||||
|
@ -567,7 +567,6 @@
|
|||
|
||||
case NSFlagsChanged:
|
||||
case NSPeriodic:
|
||||
case NSCursorUpdate:
|
||||
[aDecoder decodeValuesOfObjCTypes: "sii", &event_data.misc.sub_type,
|
||||
&event_data.misc.data1, &event_data.misc.data2];
|
||||
break;
|
||||
|
|
|
@ -151,6 +151,18 @@ set_repd_for_rep(NSMutableArray *_reps, NSImageRep *rep, rep_data_t *new_repd)
|
|||
|
||||
@implementation NSImage
|
||||
|
||||
+ (void)initialize
|
||||
{
|
||||
if (self == [NSImage class])
|
||||
{
|
||||
// Initial version
|
||||
[self setVersion:1];
|
||||
|
||||
// initialize the class variables
|
||||
nameDict = [[NSMutableDictionary alloc] initWithCapacity: 10];
|
||||
}
|
||||
}
|
||||
|
||||
+ imageNamed: (NSString *)aName
|
||||
{
|
||||
/* If there is no image with that name, search in the main bundle */
|
||||
|
@ -220,6 +232,7 @@ set_repd_for_rep(NSMutableArray *_reps, NSImageRep *rep, rep_data_t *new_repd)
|
|||
NSImage* image = [[NSImage alloc] initByReferencingFile:path];
|
||||
if (image)
|
||||
[image setName:_base_name(path)];
|
||||
[nameDict setObject: image forKey: [image name]];
|
||||
return image;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,6 +29,15 @@
|
|||
#include <Foundation/NSCoder.h>
|
||||
#include <AppKit/NSScroller.h>
|
||||
#include <AppKit/NSWindow.h>
|
||||
#include <AppKit/NSActionCell.h>
|
||||
#include <AppKit/NSApplication.h>
|
||||
#include <AppKit/NSImage.h>
|
||||
|
||||
//
|
||||
// Class variables
|
||||
//
|
||||
static float gnustep_gui_scroller_width = 18;
|
||||
id gnustep_gui_nsscroller_class = nil;
|
||||
|
||||
@implementation NSScroller
|
||||
|
||||
|
@ -41,42 +50,72 @@
|
|||
{
|
||||
// Initial version
|
||||
[self setVersion:1];
|
||||
|
||||
// Set our cell class to NSButtonCell
|
||||
[self setCellClass:[NSActionCell class]];
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Initializing the NSScroller Factory
|
||||
//
|
||||
+ (Class)cellClass
|
||||
{
|
||||
return gnustep_gui_nsscroller_class;
|
||||
}
|
||||
|
||||
+ (void)setCellClass:(Class)classId
|
||||
{
|
||||
gnustep_gui_nsscroller_class = classId;
|
||||
}
|
||||
|
||||
//
|
||||
// Laying out the NSScroller
|
||||
//
|
||||
+ (float)scrollerWidth
|
||||
{
|
||||
return 0;
|
||||
return gnustep_gui_scroller_width;
|
||||
}
|
||||
|
||||
//
|
||||
// Instance methods
|
||||
//
|
||||
- init
|
||||
{
|
||||
return [self initWithFrame:NSZeroRect];
|
||||
}
|
||||
|
||||
- initWithFrame:(NSRect)frameRect
|
||||
{
|
||||
[super initWithFrame:frameRect];
|
||||
if (frame.size.width > frame.size.height)
|
||||
is_horizontal = YES;
|
||||
// Determine if its horizontal or vertical
|
||||
// then adjust the width to the standard
|
||||
if (frameRect.size.width > frameRect.size.height)
|
||||
{
|
||||
is_horizontal = YES;
|
||||
frameRect.size.height = gnustep_gui_scroller_width;
|
||||
}
|
||||
else
|
||||
is_horizontal = NO;
|
||||
target = nil;
|
||||
action = NULL;
|
||||
{
|
||||
is_horizontal = NO;
|
||||
frameRect.size.width = gnustep_gui_scroller_width;
|
||||
}
|
||||
|
||||
[super initWithFrame:frameRect];
|
||||
|
||||
// set our cell
|
||||
[[self cell] release];
|
||||
[self setCell:[[gnustep_gui_nsscroller_class alloc] init]];
|
||||
[self selectCell: cell];
|
||||
|
||||
arrows_position = NSScrollerArrowsMaxEnd;
|
||||
knob_proportion = 0.1;
|
||||
hit_part = NSScrollerNoPart;
|
||||
[self setFloatValue: 0];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
//
|
||||
// Laying out the NSScroller
|
||||
//
|
||||
- (NSScrollArrowPosition)arrowsPosition
|
||||
{
|
||||
return 0;
|
||||
return arrows_position;
|
||||
}
|
||||
|
||||
- (void)checkSpaceForParts
|
||||
|
@ -88,11 +127,13 @@
|
|||
}
|
||||
|
||||
- (void)setArrowsPosition:(NSScrollArrowPosition)where
|
||||
{}
|
||||
{
|
||||
arrows_position = where;
|
||||
}
|
||||
|
||||
- (NSUsableScrollerParts)usableParts
|
||||
{
|
||||
return 0;
|
||||
return NSNoScrollerParts;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -100,18 +141,31 @@
|
|||
//
|
||||
- (float)knobProportion
|
||||
{
|
||||
return 0;
|
||||
return knob_proportion;
|
||||
}
|
||||
|
||||
- (void)setFloatValue:(float)aFloat
|
||||
knobProportion:(float)ratio
|
||||
{}
|
||||
{
|
||||
[cell setFloatValue: aFloat];
|
||||
knob_proportion = ratio;
|
||||
}
|
||||
|
||||
- (void)setFloatValue:(float)aFloat
|
||||
{
|
||||
if (aFloat < 0)
|
||||
aFloat = 0;
|
||||
if (aFloat > 1)
|
||||
aFloat = 1;
|
||||
[super setFloatValue: aFloat];
|
||||
}
|
||||
|
||||
//
|
||||
// Displaying
|
||||
//
|
||||
- (void)drawRect:(NSRect)rect
|
||||
{
|
||||
[self drawParts];
|
||||
}
|
||||
|
||||
- (void)drawArrow:(NSScrollerArrow)whichButton
|
||||
|
@ -122,7 +176,38 @@
|
|||
{}
|
||||
|
||||
- (void)drawParts
|
||||
{}
|
||||
{
|
||||
// Draw the bar
|
||||
[self drawBar];
|
||||
|
||||
// Cache the arrow images
|
||||
if (arrows_position != NSScrollerArrowsNone)
|
||||
{
|
||||
if (!increment_arrow)
|
||||
{
|
||||
if (is_horizontal)
|
||||
increment_arrow = [NSImage imageNamed: @"common_ArrowLeft"];
|
||||
else
|
||||
increment_arrow = [NSImage imageNamed: @"common_ArrowUp"];
|
||||
}
|
||||
if (!decrement_arrow)
|
||||
{
|
||||
if (is_horizontal)
|
||||
decrement_arrow = [NSImage imageNamed: @"common_ArrowRight"];
|
||||
else
|
||||
decrement_arrow = [NSImage imageNamed: @"common_ArrowDown"];
|
||||
}
|
||||
|
||||
// Draw the arrows
|
||||
[self drawArrow: NSScrollerIncrementArrow highlight: NO];
|
||||
[self drawArrow: NSScrollerDecrementArrow highlight: NO];
|
||||
}
|
||||
|
||||
// Draw the knob
|
||||
if (!knob_dimple)
|
||||
knob_dimple = [NSImage imageNamed: @"common_Dimple"];
|
||||
[self drawKnob];
|
||||
}
|
||||
|
||||
- (void)highlight:(BOOL)flag
|
||||
{}
|
||||
|
@ -132,19 +217,195 @@
|
|||
//
|
||||
- (NSScrollerPart)hitPart
|
||||
{
|
||||
return 0;
|
||||
return hit_part;
|
||||
}
|
||||
|
||||
- (NSScrollerPart)testPart:(NSPoint)thePoint
|
||||
{
|
||||
return 0;
|
||||
NSScrollerPart the_part = NSScrollerNoPart;
|
||||
NSRect partRect;
|
||||
|
||||
// Test hit on arrow buttons
|
||||
if (arrows_position != NSScrollerArrowsNone)
|
||||
{
|
||||
partRect = [self boundsOfScrollerPart: NSScrollerIncrementLine];
|
||||
if ([self mouse: thePoint inRect: partRect])
|
||||
the_part = NSScrollerIncrementLine;
|
||||
else
|
||||
{
|
||||
partRect = [self boundsOfScrollerPart: NSScrollerDecrementLine];
|
||||
if ([self mouse: thePoint inRect: partRect])
|
||||
the_part = NSScrollerDecrementLine;
|
||||
}
|
||||
}
|
||||
|
||||
// If not on the arrow buttons
|
||||
// then test the know area
|
||||
if (the_part == NSScrollerNoPart)
|
||||
{
|
||||
partRect = [self boundsOfScrollerPart: NSScrollerKnob];
|
||||
if ([self mouse: thePoint inRect: partRect])
|
||||
the_part = NSScrollerKnob;
|
||||
else
|
||||
{
|
||||
partRect = [self boundsOfScrollerPart: NSScrollerKnobSlot];
|
||||
if ([self mouse: thePoint inRect: partRect])
|
||||
the_part = NSScrollerKnobSlot;
|
||||
}
|
||||
}
|
||||
|
||||
return the_part;
|
||||
}
|
||||
|
||||
- (void)trackKnob:(NSEvent *)theEvent
|
||||
{}
|
||||
{
|
||||
NSApplication *theApp = [NSApplication sharedApplication];
|
||||
BOOL mouseUp, done;
|
||||
NSEvent *e;
|
||||
|
||||
unsigned int event_mask = NSLeftMouseDownMask | NSLeftMouseUpMask |
|
||||
NSMouseMovedMask | NSLeftMouseDraggedMask | NSRightMouseDraggedMask;
|
||||
NSRect partRect = [self boundsOfScrollerPart: NSScrollerKnob];
|
||||
NSPoint point = [self convertPoint: [theEvent locationInWindow]
|
||||
fromView: nil];
|
||||
NSPoint last_point;
|
||||
NSRect barRect = [self boundsOfScrollerPart: NSScrollerKnobSlot];
|
||||
float pos;
|
||||
|
||||
// capture mouse
|
||||
[[self window] captureMouse: self];
|
||||
|
||||
done = NO;
|
||||
e = theEvent;
|
||||
mouseUp = NO;
|
||||
while (!done)
|
||||
{
|
||||
last_point = point;
|
||||
e = [theApp nextEventMatchingMask:event_mask untilDate:nil
|
||||
inMode:nil dequeue:YES];
|
||||
point = [self convertPoint: [e locationInWindow] fromView: nil];
|
||||
|
||||
if (is_horizontal)
|
||||
{
|
||||
pos = (point.x - barRect.origin.x) / barRect.size.width;
|
||||
[self setFloatValue: pos];
|
||||
[self lockFocus];
|
||||
[self drawBar];
|
||||
[self drawKnob];
|
||||
[self unlockFocus];
|
||||
}
|
||||
else
|
||||
{
|
||||
pos = (point.y - barRect.origin.y) / barRect.size.height;
|
||||
[self setFloatValue: pos];
|
||||
[self lockFocus];
|
||||
[self drawBar];
|
||||
[self drawKnob];
|
||||
[self unlockFocus];
|
||||
}
|
||||
|
||||
// Did the mouse go up?
|
||||
if ([e type] == NSLeftMouseUp)
|
||||
{
|
||||
mouseUp = YES;
|
||||
done = YES;
|
||||
}
|
||||
}
|
||||
|
||||
// Release mouse
|
||||
[[self window] releaseMouse: self];
|
||||
|
||||
// Have the target perform the action
|
||||
[self sendAction:[self action] to:[self target]];
|
||||
}
|
||||
|
||||
- (void)trackScrollButtons:(NSEvent *)theEvent
|
||||
{}
|
||||
{
|
||||
NSApplication *theApp = [NSApplication sharedApplication];
|
||||
BOOL mouseUp, done;
|
||||
NSEvent *e;
|
||||
unsigned int event_mask = NSLeftMouseDownMask | NSLeftMouseUpMask |
|
||||
NSMouseMovedMask | NSLeftMouseDraggedMask | NSRightMouseDraggedMask;
|
||||
|
||||
// capture mouse
|
||||
[[self window] captureMouse: self];
|
||||
|
||||
done = NO;
|
||||
e = theEvent;
|
||||
while (!done)
|
||||
{
|
||||
mouseUp = [cell trackMouse: e inRect: bounds
|
||||
ofView:self untilMouseUp:YES];
|
||||
e = [theApp currentEvent];
|
||||
|
||||
// If mouse went up then we are done
|
||||
if ((mouseUp) || ([e type] == NSLeftMouseUp))
|
||||
done = YES;
|
||||
else
|
||||
{
|
||||
NSDebugLog(@"NSScroller process another event\n");
|
||||
e = [theApp nextEventMatchingMask:event_mask untilDate:nil
|
||||
inMode:nil dequeue:YES];
|
||||
}
|
||||
}
|
||||
|
||||
// Release mouse
|
||||
[[self window] releaseMouse: self];
|
||||
|
||||
// If the mouse went up in the button
|
||||
if (mouseUp)
|
||||
{
|
||||
// Set a new value
|
||||
|
||||
// Have the target perform the action
|
||||
[self sendAction:[self action] to:[self target]];
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Handling Events and Action Messages
|
||||
//
|
||||
- (void)mouseDown:(NSEvent *)theEvent
|
||||
{
|
||||
NSScrollerPart area;
|
||||
NSPoint p = [self convertPoint: [theEvent locationInWindow] fromView: nil];
|
||||
|
||||
NSDebugLog(@"NSScroller mouseDown\n");
|
||||
|
||||
// If we are not enabled then ignore the mouse
|
||||
if (![self isEnabled])
|
||||
return;
|
||||
|
||||
// Test where the mouse down is
|
||||
area = [self testPart: p];
|
||||
|
||||
// If we didn't hit anywhere on the scroller then ignore
|
||||
if (area == NSScrollerNoPart)
|
||||
return;
|
||||
|
||||
// Do we have the ALT key held down?
|
||||
if ([theEvent modifierFlags] & NSAlternateKeyMask)
|
||||
{
|
||||
if (area == NSScrollerDecrementLine)
|
||||
area = NSScrollerDecrementPage;
|
||||
if (area == NSScrollerIncrementLine)
|
||||
area = NSScrollerIncrementPage;
|
||||
}
|
||||
|
||||
// We must have hit a real part so record it
|
||||
hit_part = area;
|
||||
|
||||
// Track the knob if that's where it hit
|
||||
if ((hit_part == NSScrollerKnob) || (hit_part == NSScrollerKnobSlot))
|
||||
[self trackKnob: theEvent];
|
||||
|
||||
// Track the scroll buttons if that's where it hit
|
||||
if ((hit_part == NSScrollerDecrementPage) ||
|
||||
(hit_part == NSScrollerDecrementLine) ||
|
||||
(hit_part == NSScrollerIncrementPage) ||
|
||||
(hit_part == NSScrollerIncrementLine))
|
||||
[self trackScrollButtons: theEvent];
|
||||
}
|
||||
|
||||
//
|
||||
// NSCoding protocol
|
||||
|
@ -154,13 +415,11 @@
|
|||
[super encodeWithCoder:aCoder];
|
||||
|
||||
[aCoder encodeValueOfObjCType: @encode(BOOL) at: &is_horizontal];
|
||||
[aCoder encodeValueOfObjCType: @encode(SEL) at: &action];
|
||||
#if 0
|
||||
[aCoder encodeObjectReference: target withName: @"Target"];
|
||||
#else
|
||||
[aCoder encodeConditionalObject:target];
|
||||
#endif
|
||||
[aCoder encodeValuesOfObjCTypes: "ff", &percent, &cur_value];
|
||||
[aCoder encodeValueOfObjCType: @encode(float) at: &knob_proportion];
|
||||
[aCoder encodeValueOfObjCType: @encode(NSScrollerPart) at: &hit_part];
|
||||
[aCoder encodeValueOfObjCType: @encode(NSScrollArrowPosition)
|
||||
at: &arrows_position];
|
||||
/* xxx What about the images? */
|
||||
}
|
||||
|
||||
- initWithCoder:aDecoder
|
||||
|
@ -168,16 +427,48 @@
|
|||
[super initWithCoder:aDecoder];
|
||||
|
||||
[aDecoder decodeValueOfObjCType: @encode(BOOL) at: &is_horizontal];
|
||||
[aDecoder decodeValueOfObjCType: @encode(SEL) at: &action];
|
||||
#if 0
|
||||
[aDecoder decodeObjectAt: &target withName: NULL];
|
||||
#else
|
||||
target = [aDecoder decodeObject];
|
||||
#endif
|
||||
[aDecoder decodeValuesOfObjCTypes: "ff", &percent, &cur_value];
|
||||
[aDecoder decodeValueOfObjCType: @encode(float) at: &knob_proportion];
|
||||
[aDecoder decodeValueOfObjCType: @encode(NSScrollerPart) at: &hit_part];
|
||||
[aDecoder decodeValueOfObjCType: @encode(NSScrollArrowPosition)
|
||||
at: &arrows_position];
|
||||
/* xxx What about the images? */
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
//
|
||||
// Methods implemented by the backend
|
||||
//
|
||||
@implementation NSScroller (GNUstepBackend)
|
||||
|
||||
- (void)drawBar
|
||||
{}
|
||||
|
||||
- (NSRect)boundsOfScrollerPart:(NSScrollerPart)part
|
||||
{
|
||||
return NSZeroRect;
|
||||
}
|
||||
|
||||
- (BOOL)isPointInIncrementArrow:(NSPoint)aPoint
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)isPointInDecrementArrow:(NSPoint)aPoint
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)isPointInKnob:(NSPoint)aPoint
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
- (BOOL)isPointInBar:(NSPoint)aPoint
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <AppKit/NSWindow.h>
|
||||
#include <AppKit/NSTextFieldCell.h>
|
||||
#include <AppKit/NSApplication.h>
|
||||
#include <AppKit/NSCursor.h>
|
||||
|
||||
//
|
||||
// class variables
|
||||
|
@ -82,6 +83,7 @@ static id MB_NSTEXTFIELDCELL_CLASS = nil;
|
|||
[[self cell] release];
|
||||
[self setCell:[[MB_NSTEXTFIELDCELL_CLASS alloc] init]];
|
||||
[cell setState:1];
|
||||
text_cursor = [NSCursor IBeamCursor];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -393,6 +395,14 @@ static id MB_NSTEXTFIELDCELL_CLASS = nil;
|
|||
return YES;
|
||||
}
|
||||
|
||||
//
|
||||
// Manage the cursor
|
||||
//
|
||||
- (void)resetCursorRects
|
||||
{
|
||||
[self addCursorRect: bounds cursor: text_cursor];
|
||||
}
|
||||
|
||||
//
|
||||
// NSCoding protocol
|
||||
//
|
||||
|
|
|
@ -155,6 +155,9 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
// Initialize tracking rectangle list
|
||||
tracking_rects = [NSMutableArray array];
|
||||
|
||||
// Initialize cursor rect list
|
||||
cursor_rects = [NSMutableArray array];
|
||||
|
||||
super_view = nil;
|
||||
window = nil;
|
||||
is_flipped = NO;
|
||||
|
@ -187,6 +190,11 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
for (i = 0;i < j; ++i)
|
||||
[[tracking_rects objectAtIndex:i] release];
|
||||
|
||||
// Free the cursor rectangles
|
||||
j = [cursor_rects count];
|
||||
for (i = 0;i < j; ++i)
|
||||
[[cursor_rects objectAtIndex:i] release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
|
@ -196,10 +204,22 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
- (void)addSubview:(NSView *)aView
|
||||
{
|
||||
// Not a NSView --then forget it
|
||||
// xxx but NSView will really be the backend class
|
||||
// so how do we check that its really a subclass of NSView
|
||||
// and not of the backend class?
|
||||
#if 0
|
||||
if (![aView isKindOfClass:[NSView class]])
|
||||
{
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
// make sure we aren't making ourself a subview of ourself
|
||||
if (self == aView)
|
||||
{
|
||||
NSLog(@"Attempt to make view a subview of itself\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// retain the object
|
||||
[aView retain];
|
||||
|
@ -216,9 +236,14 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
relativeTo:(NSView *)otherView
|
||||
{
|
||||
// Not a NSView --then forget it
|
||||
// xxx but NSView will really be the backend class
|
||||
// so how do we check that its really a subclass of NSView
|
||||
// and not of the backend class?
|
||||
#if 0
|
||||
if (![aView isKindOfClass:[NSView class]]) return;
|
||||
#endif
|
||||
|
||||
// retain the object
|
||||
// retain the object
|
||||
[aView retain];
|
||||
|
||||
// Add to our subview list
|
||||
|
@ -242,7 +267,12 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
- (BOOL)isDescendantOf:(NSView *)aView
|
||||
{
|
||||
// Not a NSView --then forget it
|
||||
// xxx but NSView will really be the backend class
|
||||
// so how do we check that its really a subclass of NSView
|
||||
// and not of the backend class?
|
||||
#if o
|
||||
if (![aView isKindOfClass:[NSView class]]) return NO;
|
||||
#endif
|
||||
|
||||
// Quick check
|
||||
if (aView == self) return YES;
|
||||
|
@ -284,7 +314,12 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
NSView *v;
|
||||
|
||||
// Not a NSView --then forget it
|
||||
// xxx but NSView will really be the backend class
|
||||
// so how do we check that its really a subclass of NSView
|
||||
// and not of the backend class?
|
||||
#if 0
|
||||
if (![newView isKindOfClass:[NSView class]]) return;
|
||||
#endif
|
||||
|
||||
j = [sub_views count];
|
||||
for (i = 0;i < j; ++i)
|
||||
|
@ -322,7 +357,12 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
- (void)setSuperview:(NSView *)superview
|
||||
{
|
||||
// Not a NSView --then forget it
|
||||
// xxx but NSView will really be the backend class
|
||||
// so how do we check that its really a subclass of NSView
|
||||
// and not of the backend class?
|
||||
#if 0
|
||||
if (![superview isKindOfClass:[NSView class]]) return;
|
||||
#endif
|
||||
|
||||
super_view = superview;
|
||||
}
|
||||
|
@ -811,20 +851,55 @@ NSString *NSViewFocusChangedNotification = @"NSViewFocusChangedNotification";
|
|||
//
|
||||
// Managing the Cursor
|
||||
//
|
||||
// We utilize the tracking rectangle class
|
||||
// to also maintain the cursor rects
|
||||
//
|
||||
- (void)addCursorRect:(NSRect)aRect
|
||||
cursor:(NSCursor *)anObject
|
||||
{}
|
||||
{
|
||||
TrackingRectangle *m;
|
||||
|
||||
m = [[TrackingRectangle alloc] initWithRect: aRect tag: 0 owner: anObject
|
||||
userData: NULL inside: YES];
|
||||
[cursor_rects addObject:m];
|
||||
}
|
||||
|
||||
- (void)discardCursorRects
|
||||
{}
|
||||
{
|
||||
[cursor_rects removeAllObjects];
|
||||
}
|
||||
|
||||
- (void)removeCursorRect:(NSRect)aRect
|
||||
cursor:(NSCursor *)anObject
|
||||
{}
|
||||
{
|
||||
id e = [cursor_rects objectEnumerator];
|
||||
TrackingRectangle *o;
|
||||
NSCursor *c;
|
||||
BOOL found = NO;
|
||||
|
||||
// Base remove test upon cursor object
|
||||
o = [e nextObject];
|
||||
while (o && (!found))
|
||||
{
|
||||
c = [o owner];
|
||||
if (c == anObject)
|
||||
found = YES;
|
||||
else
|
||||
o = [e nextObject];
|
||||
}
|
||||
|
||||
if (found)
|
||||
[cursor_rects removeObject: o];
|
||||
}
|
||||
|
||||
- (void)resetCursorRects
|
||||
{}
|
||||
|
||||
- (NSArray *)cursorRectangles
|
||||
{
|
||||
return cursor_rects;
|
||||
}
|
||||
|
||||
//
|
||||
// Assigning a Tag
|
||||
//
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include <AppKit/TrackingRectangle.h>
|
||||
#include <AppKit/NSSliderCell.h>
|
||||
#include <AppKit/NSScreen.h>
|
||||
#include <AppKit/NSCursor.h>
|
||||
|
||||
// NSWindow notifications
|
||||
NSString *NSWindowDidBecomeKeyNotification = @"WindowDidBecomeKey";
|
||||
|
@ -180,6 +181,10 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
// Next responder is the application
|
||||
[self setNextResponder:theApp];
|
||||
|
||||
// Cursor management
|
||||
cursor_rects_enabled = YES;
|
||||
cursor_rects_valid = NO;
|
||||
|
||||
// Create our content view
|
||||
[self setContentView:[[NSView alloc] initWithFrame:frame]];
|
||||
|
||||
|
@ -352,6 +357,9 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
// We are the key window
|
||||
is_key = YES;
|
||||
|
||||
// Reset the cursor rects
|
||||
[self resetCursorRects];
|
||||
|
||||
// Post notification
|
||||
[nc postNotificationName: NSWindowDidBecomeKeyNotification object: self];
|
||||
}
|
||||
|
@ -474,6 +482,9 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
|
||||
is_key = NO;
|
||||
|
||||
// Discard the cursor rects
|
||||
[self discardCursorRects];
|
||||
|
||||
// Post notification
|
||||
[nc postNotificationName: NSWindowDidResignKeyNotification object: self];
|
||||
}
|
||||
|
@ -719,8 +730,26 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
cursor_rects_enabled = NO;
|
||||
}
|
||||
|
||||
- (void)discardCursorRectsForView:(NSView *)theView
|
||||
{
|
||||
NSArray *s;
|
||||
id e;
|
||||
NSView *v;
|
||||
|
||||
// Discard for the view
|
||||
[theView discardCursorRects];
|
||||
|
||||
// Discard for the view's subviews
|
||||
s = [theView subviews];
|
||||
e = [s objectEnumerator];
|
||||
while ((v = [e nextObject]))
|
||||
[self discardCursorRectsForView: v];
|
||||
}
|
||||
|
||||
- (void)discardCursorRects
|
||||
{}
|
||||
{
|
||||
[self discardCursorRectsForView: content_view];
|
||||
}
|
||||
|
||||
- (void)enableCursorRects
|
||||
{
|
||||
|
@ -728,10 +757,34 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
}
|
||||
|
||||
- (void)invalidateCursorRectsForView:(NSView *)aView
|
||||
{}
|
||||
{
|
||||
cursor_rects_valid = NO;
|
||||
}
|
||||
|
||||
- (void)resetCursorRectsForView:(NSView *)theView
|
||||
{
|
||||
NSArray *s;
|
||||
id e;
|
||||
NSView *v;
|
||||
|
||||
// Reset the view
|
||||
[theView resetCursorRects];
|
||||
|
||||
// Reset the view's subviews
|
||||
s = [theView subviews];
|
||||
e = [s objectEnumerator];
|
||||
while ((v = [e nextObject]))
|
||||
[self resetCursorRectsForView: v];
|
||||
}
|
||||
|
||||
- (void)resetCursorRects
|
||||
{}
|
||||
{
|
||||
// Tell all the views to reset their cursor rects
|
||||
[self resetCursorRectsForView: content_view];
|
||||
|
||||
// Cursor rects are now valid
|
||||
cursor_rects_valid = YES;
|
||||
}
|
||||
|
||||
//
|
||||
// Handling user actions and events
|
||||
|
@ -931,27 +984,31 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
// Mouse entered event
|
||||
if ((!last) && (now))
|
||||
{
|
||||
id owner = [r owner];
|
||||
e = [NSEvent enterExitEventWithType:NSMouseEntered
|
||||
location:[theEvent locationInWindow]
|
||||
modifierFlags:[theEvent modifierFlags]
|
||||
timestamp:0 windowNumber:[theEvent windowNumber]
|
||||
context:NULL eventNumber:0
|
||||
trackingNumber:[r tag] userData:[r userData]];
|
||||
// Send the event to the view
|
||||
[theView mouseEntered:e];
|
||||
// Send the event to the owner
|
||||
if ([owner respondsToSelector:@selector(mouseEntered:)])
|
||||
[owner mouseEntered:e];
|
||||
}
|
||||
|
||||
// Mouse exited event
|
||||
if ((last) && (!now))
|
||||
{
|
||||
id owner = [r owner];
|
||||
e = [NSEvent enterExitEventWithType:NSMouseExited
|
||||
location:[theEvent locationInWindow]
|
||||
modifierFlags:[theEvent modifierFlags]
|
||||
timestamp:0 windowNumber:[theEvent windowNumber]
|
||||
context:NULL eventNumber:0
|
||||
trackingNumber:[r tag] userData:[r userData]];
|
||||
// Send the event to the view
|
||||
[theView mouseExited:e];
|
||||
// Send the event to the owner
|
||||
if ([owner respondsToSelector:@selector(mouseExited:)])
|
||||
[owner mouseExited:e];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -961,12 +1018,81 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
[self checkTrackingRectangles:[sb objectAtIndex:i] forEvent:theEvent];
|
||||
}
|
||||
|
||||
- (void)checkCursorRectangles:(NSView *)theView forEvent:(NSEvent *)theEvent
|
||||
{
|
||||
NSArray *tr = [theView cursorRectangles];
|
||||
NSArray *sb = [theView subviews];
|
||||
TrackingRectangle *r;
|
||||
int i, j;
|
||||
BOOL last, now;
|
||||
NSEvent *e;
|
||||
NSRect convRect;
|
||||
NSPoint loc = [theEvent locationInWindow];
|
||||
|
||||
// Loop through cursor rectangles
|
||||
j = [tr count];
|
||||
for (i = 0;i < j; ++i)
|
||||
{
|
||||
// Convert cursor rectangle to window coordinates
|
||||
r = (TrackingRectangle *)[tr objectAtIndex:i];
|
||||
convRect = [r rectangle];
|
||||
convRect = [theView convertRect: convRect toView: nil];
|
||||
// Check mouse at last point
|
||||
last = [theView mouse:last_point inRect: convRect];
|
||||
// Check mouse at current point
|
||||
now = [theView mouse: loc inRect: convRect];
|
||||
|
||||
// Mouse entered
|
||||
if ((!last) && (now))
|
||||
{
|
||||
// Post cursor update event
|
||||
e = [NSEvent enterExitEventWithType: NSCursorUpdate
|
||||
location: loc
|
||||
modifierFlags: [theEvent modifierFlags]
|
||||
timestamp: 0
|
||||
windowNumber: [theEvent windowNumber]
|
||||
context: [theEvent context]
|
||||
eventNumber: 0
|
||||
trackingNumber: (int)YES
|
||||
userData: (void *)r];
|
||||
[self postEvent: e atStart: YES];
|
||||
}
|
||||
|
||||
// Mouse exited event
|
||||
if ((last) && (!now))
|
||||
{
|
||||
// Post cursor update event
|
||||
e = [NSEvent enterExitEventWithType: NSCursorUpdate
|
||||
location: loc
|
||||
modifierFlags: [theEvent modifierFlags]
|
||||
timestamp: 0
|
||||
windowNumber: [theEvent windowNumber]
|
||||
context: [theEvent context]
|
||||
eventNumber: 0
|
||||
trackingNumber: (int)NO
|
||||
userData: (void *)r];
|
||||
[self postEvent: e atStart: YES];
|
||||
}
|
||||
}
|
||||
|
||||
// Check the cursor rectangles for the subviews
|
||||
j = [sb count];
|
||||
for (i = 0;i < j; ++i)
|
||||
[self checkCursorRectangles:[sb objectAtIndex:i] forEvent:theEvent];
|
||||
}
|
||||
|
||||
- (void)sendEvent:(NSEvent *)theEvent
|
||||
{
|
||||
// If the cursor rects are invalid
|
||||
// Then discard and reset
|
||||
if (!cursor_rects_valid)
|
||||
{
|
||||
[self discardCursorRects];
|
||||
[self resetCursorRects];
|
||||
}
|
||||
|
||||
switch ([theEvent type])
|
||||
{
|
||||
|
||||
//
|
||||
// Mouse events
|
||||
//
|
||||
|
@ -976,7 +1102,7 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
case NSLeftMouseDown:
|
||||
{
|
||||
NSView *v = [content_view hitTest:[theEvent locationInWindow]];
|
||||
NSDebugLog([content_view description]);
|
||||
NSDebugLog([v description]);
|
||||
NSDebugLog(@"\n");
|
||||
[v mouseDown:theEvent];
|
||||
last_point = [theEvent locationInWindow];
|
||||
|
@ -1027,6 +1153,13 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
// should send a NSMouseEntered or NSMouseExited event
|
||||
[self checkTrackingRectangles:content_view forEvent:theEvent];
|
||||
|
||||
// We need to go through all of the views, and any with
|
||||
// a cursor rectangle then we need to determine if we
|
||||
// should send a cursor update event
|
||||
// We only do this if we are the key window
|
||||
if ([self isKeyWindow])
|
||||
[self checkCursorRectangles: content_view forEvent: theEvent];
|
||||
|
||||
last_point = [theEvent locationInWindow];
|
||||
break;
|
||||
}
|
||||
|
@ -1098,6 +1231,20 @@ NSString *NSWindowWillMoveNotification = @"WindowWillMove";
|
|||
//
|
||||
case NSCursorUpdate:
|
||||
{
|
||||
// Is it a mouse entered
|
||||
if ([theEvent trackingNumber])
|
||||
{
|
||||
// push the cursor
|
||||
TrackingRectangle *r = (TrackingRectangle *)[theEvent userData];
|
||||
NSCursor *c = (NSCursor *)[r owner];
|
||||
[c push];
|
||||
}
|
||||
else
|
||||
{
|
||||
// it is a mouse exited
|
||||
// so pop the cursor
|
||||
[NSCursor pop];
|
||||
}
|
||||
break;
|
||||
}
|
||||
case NSPeriodic:
|
||||
|
|
169
configure
vendored
169
configure
vendored
|
@ -851,6 +851,11 @@ else
|
|||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Use a .h file with #define's, instead of -D command-line switches
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Standard ANSI headers
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -863,11 +868,11 @@ else
|
|||
ac_cv_c_cross=yes
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 867 "configure"
|
||||
#line 872 "configure"
|
||||
#include "confdefs.h"
|
||||
main(){return(0);}
|
||||
EOF
|
||||
{ (eval echo configure:871: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
|
||||
{ (eval echo configure:876: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
|
||||
if test -s conftest && (./conftest; exit) 2>/dev/null; then
|
||||
ac_cv_c_cross=no
|
||||
else
|
||||
|
@ -885,7 +890,7 @@ if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
|
|||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 889 "configure"
|
||||
#line 894 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
|
@ -893,7 +898,7 @@ else
|
|||
#include <float.h>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:897: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -908,7 +913,7 @@ rm -f conftest*
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 912 "configure"
|
||||
#line 917 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <string.h>
|
||||
EOF
|
||||
|
@ -926,7 +931,7 @@ fi
|
|||
if test $ac_cv_header_stdc = yes; then
|
||||
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 930 "configure"
|
||||
#line 935 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <stdlib.h>
|
||||
EOF
|
||||
|
@ -947,7 +952,7 @@ if test "$cross_compiling" = yes; then
|
|||
:
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 951 "configure"
|
||||
#line 956 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <ctype.h>
|
||||
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
|
||||
|
@ -958,7 +963,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
|
|||
exit (0); }
|
||||
|
||||
EOF
|
||||
{ (eval echo configure:962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
|
||||
{ (eval echo configure:967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
|
||||
if test -s conftest && (./conftest; exit) 2>/dev/null; then
|
||||
:
|
||||
else
|
||||
|
@ -989,12 +994,12 @@ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
|||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 993 "configure"
|
||||
#line 998 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:998: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1003: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -1012,18 +1017,17 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
|
|||
cat >> confdefs.h <<EOF
|
||||
#define $ac_tr_hdr 1
|
||||
EOF
|
||||
HAVE_TIFF=1
|
||||
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
HAVE_TIFF=1
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
if test "x$HAVE_TIFF" = "x0"
|
||||
if test "x$ac_cv_header_tiff_h" != "xyes"
|
||||
then
|
||||
echo You must have the TIFF library installed.
|
||||
echo The most recent version "(v3.4)" should be available at:
|
||||
echo You must have the TIFF Graphics library installed.
|
||||
echo The most required version "(v3.4)" should be available at:
|
||||
echo
|
||||
echo ftp://ftp.sgi.com/graphics/tiff
|
||||
echo
|
||||
|
@ -1031,7 +1035,6 @@ then
|
|||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Look for the DPSClient library
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -1043,12 +1046,12 @@ if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
|
|||
echo $ac_n "(cached) $ac_c" 1>&6
|
||||
else
|
||||
cat > conftest.$ac_ext <<EOF
|
||||
#line 1047 "configure"
|
||||
#line 1050 "configure"
|
||||
#include "confdefs.h"
|
||||
#include <$ac_hdr>
|
||||
EOF
|
||||
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
|
||||
{ (eval echo configure:1052: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
{ (eval echo configure:1055: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
|
||||
ac_err=`grep -v '^ *+' conftest.out`
|
||||
if test -z "$ac_err"; then
|
||||
rm -rf conftest*
|
||||
|
@ -1066,15 +1069,14 @@ if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
|
|||
cat >> confdefs.h <<EOF
|
||||
#define $ac_tr_hdr 1
|
||||
EOF
|
||||
HAVE_DPSCLIENT=1
|
||||
|
||||
else
|
||||
echo "$ac_t""no" 1>&6
|
||||
HAVE_DPSCLIENT=0
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
if test "x$HAVE_DPSCLIENT" = "x0"
|
||||
if test "x$ac_cv_header_DPS_dpsclient_h" != "xyes"
|
||||
then
|
||||
echo You must have the DPSClient library installed.
|
||||
echo The most recent public release, patched for GNUstep,
|
||||
|
@ -1084,13 +1086,12 @@ then
|
|||
echo
|
||||
echo The most recent snapshot should be available at:
|
||||
echo
|
||||
echo ftp://ftp.net-community.com/pub/GNUstep
|
||||
echo ftp://alpha.gnu.ai.mit.edu/pub/gnustep
|
||||
echo
|
||||
echo Configuration of the GNUstep GUI Library cannot continue.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Operating system configuration
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -1149,19 +1150,7 @@ fi
|
|||
|
||||
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
|
||||
|
||||
# Transform confdefs.h into DEFS.
|
||||
# Protect against shell expansion while executing Makefile rules.
|
||||
# Protect against Makefile macro expansion.
|
||||
cat > conftest.defs <<\EOF
|
||||
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g
|
||||
s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g
|
||||
s%\[%\\&%g
|
||||
s%\]%\\&%g
|
||||
s%\$%$$%g
|
||||
EOF
|
||||
DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '`
|
||||
rm -f conftest.defs
|
||||
|
||||
DEFS=-DHAVE_CONFIG_H
|
||||
|
||||
# Without the "./", some shells look in PATH for config.status.
|
||||
: ${CONFIG_STATUS=./config.status}
|
||||
|
@ -1199,7 +1188,7 @@ done
|
|||
ac_given_srcdir=$srcdir
|
||||
ac_given_INSTALL="$INSTALL"
|
||||
|
||||
trap 'rm -fr `echo "Makefile Source/Makefile Testing/Makefile Headers/gnustep/gui/config.h Documentation/Makefile Images/Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
|
||||
trap 'rm -fr `echo "Makefile Source/Makefile Testing/Makefile Documentation/Makefile Images/Makefile Headers/gnustep/gui/config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
|
||||
EOF
|
||||
cat >> $CONFIG_STATUS <<EOF
|
||||
|
||||
|
@ -1235,15 +1224,13 @@ s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
|
|||
s%@INSTALL_DATA@%$INSTALL_DATA%g
|
||||
s%@RANLIB@%$RANLIB%g
|
||||
s%@LN_S@%$LN_S%g
|
||||
s%@HAVE_TIFF@%$HAVE_TIFF%g
|
||||
s%@HAVE_DPSCLIENT@%$HAVE_DPSCLIENT%g
|
||||
s%@config_include@%$config_include%g
|
||||
|
||||
CEOF
|
||||
EOF
|
||||
cat >> $CONFIG_STATUS <<EOF
|
||||
|
||||
CONFIG_FILES=\${CONFIG_FILES-"Makefile Source/Makefile Testing/Makefile Headers/gnustep/gui/config.h Documentation/Makefile Images/Makefile"}
|
||||
CONFIG_FILES=\${CONFIG_FILES-"Makefile Source/Makefile Testing/Makefile Documentation/Makefile Images/Makefile"}
|
||||
EOF
|
||||
cat >> $CONFIG_STATUS <<\EOF
|
||||
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
|
||||
|
@ -1299,6 +1286,108 @@ s%@INSTALL@%$INSTALL%g
|
|||
fi; done
|
||||
rm -f conftest.subs
|
||||
|
||||
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
|
||||
# NAME is the cpp macro being defined and VALUE is the value it is being given.
|
||||
#
|
||||
# ac_d sets the value in "#define NAME VALUE" lines.
|
||||
ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
|
||||
ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
|
||||
ac_dC='\3'
|
||||
ac_dD='%g'
|
||||
# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
|
||||
ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||
ac_uB='\([ ]\)%\1#\2define\3'
|
||||
ac_uC=' '
|
||||
ac_uD='\4%g'
|
||||
# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
|
||||
ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
|
||||
ac_eB='$%\1#\2define\3'
|
||||
ac_eC=' '
|
||||
ac_eD='%g'
|
||||
|
||||
CONFIG_HEADERS=${CONFIG_HEADERS-"Headers/gnustep/gui/config.h"}
|
||||
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
|
||||
# Support "outfile[:infile]", defaulting infile="outfile.in".
|
||||
case "$ac_file" in
|
||||
*:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
|
||||
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
|
||||
*) ac_file_in="${ac_file}.in" ;;
|
||||
esac
|
||||
|
||||
echo creating $ac_file
|
||||
|
||||
rm -f conftest.frag conftest.in conftest.out
|
||||
cp $ac_given_srcdir/$ac_file_in conftest.in
|
||||
|
||||
EOF
|
||||
|
||||
# Transform confdefs.h into a sed script conftest.vals that substitutes
|
||||
# the proper values into config.h.in to produce config.h. And first:
|
||||
# Protect against being on the right side of a sed subst in config.status.
|
||||
# Protect against being in an unquoted here document in config.status.
|
||||
rm -f conftest.vals
|
||||
cat > conftest.hdr <<\EOF
|
||||
s/[\\&%]/\\&/g
|
||||
s%[\\$`]%\\&%g
|
||||
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
|
||||
s%ac_d%ac_u%gp
|
||||
s%ac_u%ac_e%gp
|
||||
EOF
|
||||
sed -n -f conftest.hdr confdefs.h > conftest.vals
|
||||
rm -f conftest.hdr
|
||||
|
||||
# This sed command replaces #undef with comments. This is necessary, for
|
||||
# example, in the case of _POSIX_SOURCE, which is predefined and required
|
||||
# on some systems where configure will not decide to define it.
|
||||
cat >> conftest.vals <<\EOF
|
||||
s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
|
||||
EOF
|
||||
|
||||
# Break up conftest.vals because some shells have a limit on
|
||||
# the size of here documents, and old seds have small limits too.
|
||||
# Maximum number of lines to put in a single here document.
|
||||
ac_max_here_lines=12
|
||||
|
||||
rm -f conftest.tail
|
||||
while :
|
||||
do
|
||||
ac_lines=`grep -c . conftest.vals`
|
||||
# grep -c gives empty output for an empty file on some AIX systems.
|
||||
if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
|
||||
# Write a limited-size here document to conftest.frag.
|
||||
echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
|
||||
sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
|
||||
echo 'CEOF
|
||||
sed -f conftest.frag conftest.in > conftest.out
|
||||
rm -f conftest.in
|
||||
mv conftest.out conftest.in
|
||||
' >> $CONFIG_STATUS
|
||||
sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
|
||||
rm -f conftest.vals
|
||||
mv conftest.tail conftest.vals
|
||||
done
|
||||
rm -f conftest.vals
|
||||
|
||||
cat >> $CONFIG_STATUS <<\EOF
|
||||
rm -f conftest.frag conftest.h
|
||||
echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
|
||||
cat conftest.in >> conftest.h
|
||||
rm -f conftest.in
|
||||
if cmp -s $ac_file conftest.h 2>/dev/null; then
|
||||
echo "$ac_file is unchanged"
|
||||
rm -f conftest.h
|
||||
else
|
||||
# Remove last slash and all that follows it. Not all systems have dirname.
|
||||
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
|
||||
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
|
||||
# The file is in a subdirectory.
|
||||
test ! -d "$ac_dir" && mkdir "$ac_dir"
|
||||
fi
|
||||
rm -f $ac_file
|
||||
mv conftest.h $ac_file
|
||||
fi
|
||||
fi; done
|
||||
|
||||
|
||||
|
||||
exit 0
|
||||
|
|
23
configure.in
23
configure.in
|
@ -38,6 +38,11 @@ AC_PROG_INSTALL
|
|||
AC_PROG_RANLIB
|
||||
AC_LN_S
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Use a .h file with #define's, instead of -D command-line switches
|
||||
#--------------------------------------------------------------------
|
||||
AC_CONFIG_HEADER(Headers/gnustep/gui/config.h)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Standard ANSI headers
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -46,26 +51,25 @@ AC_HEADER_STDC
|
|||
#--------------------------------------------------------------------
|
||||
# Look for the TIFF library
|
||||
#--------------------------------------------------------------------
|
||||
AC_CHECK_HEADERS(tiff.h, HAVE_TIFF=1, HAVE_TIFF=1)
|
||||
AC_CHECK_HEADERS(tiff.h)
|
||||
|
||||
if test "x$HAVE_TIFF" = "x0"
|
||||
if test "x$ac_cv_header_tiff_h" != "xyes"
|
||||
then
|
||||
echo You must have the TIFF library installed.
|
||||
echo The most recent version "(v3.4)" should be available at:
|
||||
echo You must have the TIFF Graphics library installed.
|
||||
echo The most required version "(v3.4)" should be available at:
|
||||
echo
|
||||
echo ftp://ftp.sgi.com/graphics/tiff
|
||||
echo
|
||||
echo Configuration of the GNUstep GUI Library cannot continue.
|
||||
exit 1
|
||||
fi
|
||||
AC_SUBST(HAVE_TIFF)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Look for the DPSClient library
|
||||
#--------------------------------------------------------------------
|
||||
AC_CHECK_HEADERS(DPS/dpsclient.h, HAVE_DPSCLIENT=1, HAVE_DPSCLIENT=0)
|
||||
AC_CHECK_HEADERS(DPS/dpsclient.h)
|
||||
|
||||
if test "x$HAVE_DPSCLIENT" = "x0"
|
||||
if test "x$ac_cv_header_DPS_dpsclient_h" != "xyes"
|
||||
then
|
||||
echo You must have the DPSClient library installed.
|
||||
echo The most recent public release, patched for GNUstep,
|
||||
|
@ -75,12 +79,11 @@ then
|
|||
echo
|
||||
echo The most recent snapshot should be available at:
|
||||
echo
|
||||
echo ftp://ftp.net-community.com/pub/GNUstep
|
||||
echo ftp://alpha.gnu.ai.mit.edu/pub/gnustep
|
||||
echo
|
||||
echo Configuration of the GNUstep GUI Library cannot continue.
|
||||
exit 1
|
||||
fi
|
||||
AC_SUBST(HAVE_DPSCLIENT)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Operating system configuration
|
||||
|
@ -91,5 +94,5 @@ AC_SUBST(config_include)
|
|||
#--------------------------------------------------------------------
|
||||
# Write the Makefiles and configuration files
|
||||
#--------------------------------------------------------------------
|
||||
AC_OUTPUT(Makefile Source/Makefile Testing/Makefile Headers/gnustep/gui/config.h Documentation/Makefile Images/Makefile)
|
||||
AC_OUTPUT(Makefile Source/Makefile Testing/Makefile Documentation/Makefile Images/Makefile)
|
||||
|
||||
|
|
Loading…
Reference in a new issue