diff --git a/ChangeLog b/ChangeLog index fe7f96f0c..fa6042060 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Mon Nov 30 1998 Felipe A. Rodriguez + + * NSAttributedString.m and NSAttributedString.h remove. + * NSStringDrawing.m and NSStringDrawing.h add NSAttributedString interface + and implementation. Implement NSAttributedString's size method and + optimize tab width calculation. + Sat Nov 28 18:25:00 1998 Richard Frith-Macdonald * Tools/example.m: Add very crude code to open a URL in netscape. diff --git a/Headers/gnustep/gui/AppKit.h b/Headers/gnustep/gui/AppKit.h index 0cc870079..6dd37a0fa 100644 --- a/Headers/gnustep/gui/AppKit.h +++ b/Headers/gnustep/gui/AppKit.h @@ -71,7 +71,6 @@ #include #include -#include #include #include #include diff --git a/Headers/gnustep/gui/NSAttributedString.h b/Headers/gnustep/gui/NSAttributedString.h deleted file mode 100644 index 8d828ba94..000000000 --- a/Headers/gnustep/gui/NSAttributedString.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - NSAttributedString.h - - Category which defines appkit extensions to NSAttributedString and - NSMutableAttributedString. - - Copyright (C) 1997 Free Software Foundation, Inc. - - Author: Felipe A. Rodriguez - Date: Aug 1998 - - 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 Library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; see the file COPYING.LIB. - If not, write to the Free Software Foundation, - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#ifndef _GNUstep_H_NSAttributedString -#define _GNUstep_H_NSAttributedString - -#include -#include -#include - - // global NSString attribute names used in ascessing - // the respective property in a text attributes - // dictionary. if the key is not in the dictionary the - // default value is assumed -extern NSString *NSFontAttributeName; // NSFont, defaults to Helvetica 12 - // NSParagraphStyle, default is defaultParagraphStyle -extern NSString *NSParagraphStyleAttributeName; - // NSColor, default is blackColor -extern NSString *NSForegroundColorAttributeName; - // int, default 0 = no underline -extern NSString *NSUnderlineStyleAttributeName; -extern NSString *NSSuperscriptAttributeName; // int, default 0 - // NSColor, default nil = no background color -extern NSString *NSBackgroundColorAttributeName; -extern NSString *NSAttachmentAttributeName; // NSTextAttachment, default nil - // int, default 1, 0 = no ligatures, 2 = all ligatures -extern NSString *NSLigatureAttributeName; -extern NSString *NSBaselineOffsetAttributeName; // float, default 0 in points; - // float, offset from baseline, -extern NSString *NSKernAttributeName; // amount to modify default - // kerning, if 0 kerning is off - - - -@interface NSAttributedString (NSAttributedStringKitAdditions) - -@end - - -@interface NSMutableAttributedString (NSMutableAttributedStringKitAdditions) - -@end - -#endif /* _GNUstep_H_NSAttributedString */ diff --git a/Headers/gnustep/gui/NSStringDrawing.h b/Headers/gnustep/gui/NSStringDrawing.h index 398164952..9fffa0d14 100644 --- a/Headers/gnustep/gui/NSStringDrawing.h +++ b/Headers/gnustep/gui/NSStringDrawing.h @@ -1,7 +1,8 @@ /* NSStringDrawing.h - Category which adds measure capabilities to NSString. + Categories which add measure capabilities to NSAttributedString + and NSString. Copyright (C) 1997 Free Software Foundation, Inc. @@ -30,7 +31,7 @@ #define _GNUstep_H_NSStringDrawing #include -#include +#include #include #include @@ -63,13 +64,14 @@ enum NSSingleUnderlineStyle = 1 // NSUnderlineStyleAttributeName }; -@interface NSString(NSStringDrawing) + +@interface NSString (NSStringDrawing) - (NSSize)sizeWithAttributes:(NSDictionary *)attrs; @end -@interface NSAttributedString(NSStringDrawing) +@interface NSAttributedString (NSStringDrawing) - (NSSize)size; diff --git a/Headers/gnustep/gui/NSText.h b/Headers/gnustep/gui/NSText.h index 3969f252b..e87bf0425 100644 --- a/Headers/gnustep/gui/NSText.h +++ b/Headers/gnustep/gui/NSText.h @@ -36,7 +36,7 @@ #include #include #include -#include +#include @class NSString; @class NSData; diff --git a/Headers/gnustep/gui/NSTextAttachment.h b/Headers/gnustep/gui/NSTextAttachment.h index 24a4cfc83..4a73f03af 100644 --- a/Headers/gnustep/gui/NSTextAttachment.h +++ b/Headers/gnustep/gui/NSTextAttachment.h @@ -41,7 +41,7 @@ #import #import -#import +#import @class NSFileWrapper; @class NSTextAttachment; diff --git a/Headers/gnustep/gui/NSTextStorage.h b/Headers/gnustep/gui/NSTextStorage.h index 962f2cf64..0caa76aa9 100644 --- a/Headers/gnustep/gui/NSTextStorage.h +++ b/Headers/gnustep/gui/NSTextStorage.h @@ -41,7 +41,7 @@ */ #import -#import +#import @class NSLayoutManager; diff --git a/Headers/gnustep/gui/NSWindow.h b/Headers/gnustep/gui/NSWindow.h index 15b732c52..003b74d63 100644 --- a/Headers/gnustep/gui/NSWindow.h +++ b/Headers/gnustep/gui/NSWindow.h @@ -93,6 +93,7 @@ extern NSSize NSTokenSize; unsigned int style_mask; int window_level; NSMutableArray* _flushRectangles; + NSRect rectNeedingFlush; BOOL is_one_shot; BOOL needs_display; diff --git a/Source/GNUmakefile b/Source/GNUmakefile index 976d9a203..e30a391a4 100644 --- a/Source/GNUmakefile +++ b/Source/GNUmakefile @@ -40,7 +40,6 @@ libgnustep-gui_OBJC_FILES = libgnustep-gui.m \ GSContext.m \ NSActionCell.m \ NSApplication.m \ -NSAttributedString.m \ NSBitmapImageRep.m \ NSBox.m \ NSBrowser.m \ @@ -123,7 +122,6 @@ AppKit/AppKit.h \ AppKit/GSContext.h \ AppKit/NSActionCell.h \ AppKit/NSApplication.h \ -AppKit/NSAttributedString.h \ AppKit/NSBitmapImageRep.h \ AppKit/NSBox.h \ AppKit/NSBrowser.h \ diff --git a/Source/GSContext.m b/Source/GSContext.m index 11a22e333..0b41da0c6 100644 --- a/Source/GSContext.m +++ b/Source/GSContext.m @@ -86,17 +86,17 @@ GSContext *context; return context; } -+ (GSContext *) currentContext { return nil;} ++ (GSContext *) currentContext { return nil;} // backend + (void) setCurrentContext: (GSContext *)context { - [self subclassResponsibility:_cmd]; + [self subclassResponsibility:_cmd]; // backend } + (void) destroyContext:(GSContext *) context { // if concrete class is not if(_concreteClass != [GSContext class]) // a GSContext invoke it's - [_concreteClass destroyContext: context]; // equivalent method first + [_concreteClass destroyContext: context]; // version of method first else [self _destroyContext: context]; } @@ -114,9 +114,9 @@ int top; // deallocated with the // // Instance methods // -- init -{ - return [self initWithContextInfo: nil]; +- init +{ + return [self initWithContextInfo: nil]; } - initWithContextInfo: (NSDictionary *)info @@ -132,15 +132,8 @@ int top; // deallocated with the return self; } -- (BOOL)isDrawingToScreen -{ - return NO; -} - -- (NSMutableData *)mutableData -{ - return context_data; -} +- (BOOL)isDrawingToScreen { return NO; } +- (NSMutableData *)mutableData { return context_data; } - (void) destroy // remove self from context { // list so that self gets diff --git a/Source/NSAttributedString.m b/Source/NSAttributedString.m deleted file mode 100644 index 2abf11392..000000000 --- a/Source/NSAttributedString.m +++ /dev/null @@ -1,64 +0,0 @@ -/* - NSAttributedString.m - - Category which adds measure capabilities to NSString. - - Copyright (C) 1997 Free Software Foundation, Inc. - - Author: Felipe A. Rodriguez - Date: Aug 1998 - - 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 Library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; see the file COPYING.LIB. - If not, write to the Free Software Foundation, - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include -#include - // by default tabs are measured as one -#define TABWIDTH 3 // char so this value is set to one - // minus the default tab width of 4 - - -@implementation NSString(NSAttributedString) - -- (NSSize)sizeWithAttributes:(NSDictionary *)attrs -{ -NSFont *font; -const char *str = [self cString]; -int i = 0, j = TABWIDTH; -float tabSize; - - while(*str != '\0') // calc the additional size - { // to be added for tabs. - if(*str++ == '\t') - { // j is initialized to the - i += j; // max number of spaces - j = TABWIDTH; // needed per tab. it then - } // varies in order to align - else // tabs to even multiples - j = j-- > 0 ? j : TABWIDTH; // of TABWIDTH + 1. - }; - // if font is not - if(!(font = [attrs objectForKey:NSFontAttributeName])) // specified, use - font = [NSFont userFontOfSize:12]; // the default - - tabSize = (float)i * [font widthOfString:@"\t"]; - - return NSMakeSize(([font widthOfString:self] + tabSize), [font pointSize]); -} - -@end diff --git a/Source/NSStringDrawing.m b/Source/NSStringDrawing.m index ba6cd3b44..3c828dff4 100644 --- a/Source/NSStringDrawing.m +++ b/Source/NSStringDrawing.m @@ -1,7 +1,8 @@ /* NSStringDrawing.m - Category which adds measure capabilities to NSString. + Categories which add measure capabilities to NSAttributedString + and NSString. Copyright (C) 1997 Free Software Foundation, Inc. @@ -28,37 +29,72 @@ #include #include + // by default tabs are measured as one +#define TABWIDTH 3 // char so this value is set to one + // minus the default tab width of 4 - -@implementation NSString(NSStringDrawing) +@implementation NSString (NSStringDrawing) - (NSSize)sizeWithAttributes:(NSDictionary *)attrs { NSFont *font; const char *str = [self cString]; -int i = 0, j = 4; -float tabSize; +int i = 0, j = TABWIDTH; +static float tabSize; +static float pointSize; +static NSFont *lastFont = nil; - while(*str++ != '\0') // count the tabs - { - if(*str == '\t') - { - i += j; - j = 4; - } - else - j = j == 0 ? 4 : j--; - }; + while(*str != '\0') // calc the additional size + { // to be added for tabs. + if(*str++ == '\t') + { // j is initialized to the + i += j; // max number of spaces + j = TABWIDTH; // needed per tab. it then + } // varies in order to align + else // tabs to even multiples + j = j-- > 0 ? j : TABWIDTH; // of TABWIDTH + 1. + }; // if font is not if(!(font = [attrs objectForKey:NSFontAttributeName])) // specified, use font = [NSFont userFontOfSize:12]; // the default -fprintf(stderr,"string %s width: %f\n", [self cString], [font widthOfString:self]); - -// tabSize = 4 * i * [font widthOfString:@" "]; - tabSize = (float)i * [font widthOfString:@" "]; + if(font != lastFont) // update font info + { // if font changes + tabSize = (float)i * [font widthOfString:@"\t"]; + lastFont = font; + pointSize = [font pointSize]; + } - return NSMakeSize(([font widthOfString:self] + tabSize), [font pointSize]); + return NSMakeSize(([font widthOfString:self] + tabSize), pointSize); +} + +@end + +@implementation NSAttributedString (NSStringDrawing) + +- (NSSize)size // this method is +{ // untested FIX ME +NSFont *font; +unsigned int length; +NSRange effectiveRange; +NSString *subString; +float pointSize; +float sumOfCharacterRange = 0; + + length = [self length]; + effectiveRange = NSMakeRange(0, 0); + + while (NSMaxRange(effectiveRange) < length) + { + font = (NSFont*)[self attribute:NSFontAttributeName + atIndex:NSMaxRange(effectiveRange) + effectiveRange:&effectiveRange]; + subString = [self substringFromRange:effectiveRange]; + sumOfCharacterRange += [font widthOfString:subString]; + pointSize = MAX([font pointSize], pointSize); + } + + return NSMakeSize(sumOfCharacterRange, pointSize); } @end diff --git a/Source/NSWindow.m b/Source/NSWindow.m index 73b784f6d..c1df79ba1 100644 --- a/Source/NSWindow.m +++ b/Source/NSWindow.m @@ -722,10 +722,8 @@ NSApplication *theApp = [NSApplication sharedApplication]; if (![aResponder acceptsFirstResponder]) // does not accept status return NO; // of first responder ret N - // Notify current first responder that it - // should resign. If it says NO then no - // change. But make sure that there even - // is a first responder + // If there is a first responder tell it to + // resign. Make change only if it replies Y if ((first_responder) && (![first_responder resignFirstResponder])) return NO; // Make responder the first @@ -736,10 +734,10 @@ NSApplication *theApp = [NSApplication sharedApplication]; return YES; // responder } -- (NSPoint)mouseLocationOutsideOfEventStream -{ - return NSZeroPoint; -} +- (NSPoint)mouseLocationOutsideOfEventStream // Return mouse location +{ // in reciever's base coord + return NSZeroPoint; // system, ignores event +} // loop status (backend) - (NSEvent *)nextEventMatchingMask:(unsigned int)mask {