Better helper methods for cell string drawing. Implement MacOSX 10.4

methods on NSForm and NSFormCell.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@25421 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2007-08-29 14:59:29 +00:00
parent 1a13f90156
commit d33b2e8dd0
8 changed files with 320 additions and 220 deletions

View file

@ -1,3 +1,17 @@
2007-08-29 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSCell.h: Export more private drawing methods.
* Source/NSCell.m (-_drawAttributedString): New helper method to
get the attributed string which should be drawn.
* Source/NSCell.m (-drawInteriorWithFrame:inView:): Use this method.
* Source/NSSecureTextFieldCell.m: Implement -_drawAttributedString
instead of -drawInteriorWithFrame:.
* Headers/AppKit/NSFormCell.h,
* Headers/AppKit/NSForm.h: Add MacOSX 10.4 methods.
* Source/NSForm.m: Implement these methods.
* Source/NSFormCell.m: Implement these methods. Rewrote drawing
code. Remove the color change notification handling.
2007-08-28 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSApplication.m (-_windowWillClose:): Don't call
@ -7,7 +21,7 @@
2007-08-28 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSCell.m (#initialize): Increase version number.
* Source/NSCell.m (+initialize): Increase version number.
* Source/NSCell.m (-initWithCoder:): Correct values for the
decoded action mask, as they changed on 2007-08-03.
Fixes bug #20884.

View file

@ -484,6 +484,11 @@ enum {
- (void) _drawAttributedText: (NSAttributedString*)aString
inFrame: (NSRect)aRect;
- (BOOL) _sendsActionOn:(int)eventTypeMask;
- (NSAttributedString*) _drawAttributedString;
- (void) _drawBorderAndBackgroundWithFrame: (NSRect)cellFrame
inView: (NSView*)controlView;
- (void) _drawFocusRingWithFrame: (NSRect)cellFrame
inView: (NSView*)controlView;
@end
//

View file

@ -64,6 +64,10 @@
- (void)setTextFont:(NSFont*)fontObject;
- (void)setTitleAlignment:(NSTextAlignment)aMode;
- (void)setTitleFont:(NSFont*)fontObject;
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
- (void) setTitleBaseWritingDirection: (NSWritingDirection)direction;
- (void) setTextBaseWritingDirection: (NSWritingDirection)direction;
#endif
//
// Getting a Cell

View file

@ -44,6 +44,8 @@
// YES if the titleWidth is automatically computed
#define _formcell_auto_title_width _cell.subclass_bool_one
NSCell* _titleCell;
#define _formcell_placeholder_is_attributed_string _cell.subclass_bool_two
id _placeholder;
}
//
@ -67,7 +69,15 @@
- (void)setAttributedTitle:(NSAttributedString *)anAttributedString;
- (void)setTitleWithMnemonic:(NSString *)titleWithAmpersand;
#endif
#if OS_API_VERSION(MAC_OS_X_VERSION_10_4, GS_API_LATEST)
- (NSAttributedString*)placeholderAttributedString;
- (NSString*)placeholderString;
- (void)setPlaceholderAttributedString:(NSAttributedString*)string;
- (void)setPlaceholderString:(NSString*)string;
- (NSWritingDirection)titleBaseWritingDirection;
- (void)setTitleBaseWritingDirection:(NSWritingDirection)writingDirection;
#endif
@end

View file

@ -1943,57 +1943,32 @@ static NSColor *shadowCol;
switch (_cell.type)
{
case NSTextCellType:
{
if (!_cell.is_disabled)
{
[self _drawAttributedText: [self attributedStringValue]
inFrame: cellFrame];
}
else
{
NSAttributedString *attrStr = [self attributedStringValue];
NSDictionary *attribs;
NSMutableDictionary *newAttribs;
attribs = [attrStr attributesAtIndex: 0
effectiveRange: NULL];
newAttribs = [NSMutableDictionary
dictionaryWithDictionary: attribs];
[newAttribs setObject: [NSColor disabledControlTextColor]
forKey: NSForegroundColorAttributeName];
attrStr = [[NSAttributedString alloc]
initWithString: [attrStr string]
attributes: newAttribs];
[self _drawAttributedText: attrStr
inFrame: cellFrame];
RELEASE(attrStr);
}
}
break;
[self _drawAttributedText: [self _drawAttributedString]
inFrame: cellFrame];
break;
case NSImageCellType:
if (_cell_image)
{
NSSize size;
NSPoint position;
size = [_cell_image size];
position.x = MAX(NSMidX(cellFrame) - (size.width/2.),0.);
position.y = MAX(NSMidY(cellFrame) - (size.height/2.),0.);
/*
* Images are always drawn with their bottom-left corner
* at the origin so we must adjust the position to take
* account of a flipped view.
*/
if ([controlView isFlipped])
position.y += size.height;
[_cell_image compositeToPoint: position operation: NSCompositeSourceOver];
}
break;
if (_cell_image)
{
NSSize size;
NSPoint position;
size = [_cell_image size];
position.x = MAX(NSMidX(cellFrame) - (size.width/2.),0.);
position.y = MAX(NSMidY(cellFrame) - (size.height/2.),0.);
/*
* Images are always drawn with their bottom-left corner
* at the origin so we must adjust the position to take
* account of a flipped view.
*/
if ([controlView isFlipped])
position.y += size.height;
[_cell_image compositeToPoint: position operation: NSCompositeSourceOver];
}
break;
case NSNullCellType:
break;
break;
}
// NB: We don't do any highlighting to make it easier for subclasses
@ -2001,44 +1976,6 @@ static NSColor *shadowCol;
// prettyfying
}
// Private helper method overridden in subclasses
- (void) _drawBorderAndBackgroundWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
if (_cell.is_bordered)
{
[shadowCol set];
NSFrameRect(cellFrame);
}
else if (_cell.is_bezeled)
{
[[GSTheme theme] drawWhiteBezel: cellFrame withClip: NSZeroRect];
}
}
// Private helper method
- (void) _drawFocusRingWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
if (_cell.shows_first_responder
&& [[controlView window] firstResponder] == controlView)
{
switch (_cell.focus_ring_type)
{
case NSFocusRingTypeDefault:
[[GSTheme theme] drawFocusFrame: [self drawingRectForBounds:
cellFrame]
view: controlView];
break;
case NSFocusRingTypeExterior:
[[GSTheme theme] drawFocusFrame: cellFrame
view: controlView];
break;
case NSFocusRingTypeNone:
default:
break;
}
}
}
/**<p>Draws the cell in <var>controlView</var></p>
*/
- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
@ -2802,6 +2739,33 @@ static NSColor *shadowCol;
return size;
}
/**
* Private internal method, returns an attributed string to display.
*/
- (NSAttributedString*) _drawAttributedString
{
if (!_cell.is_disabled)
{
return [self attributedStringValue];
}
else
{
NSAttributedString *attrStr = [self attributedStringValue];
NSDictionary *attribs;
NSMutableDictionary *newAttribs;
attribs = [attrStr attributesAtIndex: 0
effectiveRange: NULL];
newAttribs = [NSMutableDictionary dictionaryWithDictionary: attribs];
[newAttribs setObject: [NSColor disabledControlTextColor]
forKey: NSForegroundColorAttributeName];
return AUTORELEASE([[NSAttributedString alloc]
initWithString: [attrStr string]
attributes: newAttribs]);
}
}
/**
* Private internal method to display an attributed string.
*/
@ -2849,6 +2813,45 @@ static NSColor *shadowCol;
RELEASE (attributes);
}
// Private helper method overridden in subclasses
- (void) _drawBorderAndBackgroundWithFrame: (NSRect)cellFrame
inView: (NSView*)controlView
{
if (_cell.is_bordered)
{
[shadowCol set];
NSFrameRect(cellFrame);
}
else if (_cell.is_bezeled)
{
[[GSTheme theme] drawWhiteBezel: cellFrame withClip: NSZeroRect];
}
}
// Private helper method
- (void) _drawFocusRingWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
if (_cell.shows_first_responder
&& [[controlView window] firstResponder] == controlView)
{
switch (_cell.focus_ring_type)
{
case NSFocusRingTypeDefault:
[[GSTheme theme] drawFocusFrame: [self drawingRectForBounds:
cellFrame]
view: controlView];
break;
case NSFocusRingTypeExterior:
[[GSTheme theme] drawFocusFrame: cellFrame
view: controlView];
break;
case NSFocusRingTypeNone:
default:
break;
}
}
}
- (BOOL) _sendsActionOn:(int)eventTypeMask
{
return (_action_mask & eventTypeMask);

View file

@ -58,32 +58,32 @@ static Class defaultCellClass = nil;
}
- (id) initWithFrame: (NSRect)frameRect
mode: (int)aMode
cellClass: (Class)class
mode: (int)aMode
cellClass: (Class)class
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide
{
self = [super initWithFrame: (NSRect)frameRect
mode: (int)aMode
cellClass: (Class)class
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide];
mode: (int)aMode
cellClass: (Class)class
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide];
[self setIntercellSpacing: NSMakeSize (0, 4)];
return self;
}
- (id) initWithFrame: (NSRect)frameRect
mode: (int)aMode
prototype: (NSCell*)prototype
mode: (int)aMode
prototype: (NSCell*)prototype
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide
{
self = [super initWithFrame: (NSRect)frameRect
mode: (int)aMode
prototype: (NSCell*)prototype
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide];
mode: (int)aMode
prototype: (NSCell*)prototype
numberOfRows: (int)rowsHigh
numberOfColumns: (int)colsWide];
[self setIntercellSpacing: NSMakeSize (0, 4)];
return self;
@ -103,7 +103,7 @@ static Class defaultCellClass = nil;
<p>See Also: -addEntry: -removeEntryAtIndex:</p>
*/
- (NSFormCell*) insertEntry: (NSString*)title
atIndex: (int)index
atIndex: (int)index
{
NSFormCell *new_cell = [[[isa cellClass] alloc] initTextCell: title];
@ -196,6 +196,16 @@ static Class defaultCellClass = nil;
[self setCellSize: size];
}
/**<p>Sets the size of the frame to aSize</p>
<p>See Also: [NSView-setFrameSize:]</p>
*/
- (void) setFrameSize: (NSSize)aSize
{
[super setFrameSize: aSize];
// Set the width of the entries independent of autosizesCells
_cellSize.width = _bounds.size.width;
}
/** <p>Sets the spacing between all entries to spacing. By default
the spacing is 4.</p><p>See Also: [NSMatrix-setIntercellSpacing:]</p>
*/
@ -268,6 +278,34 @@ static Class defaultCellClass = nil;
[[self cellAtRow: i column: 0] setFont: fontObject];
}
/** <p>Sets the title writing direction to direction for all entries</p>
<p>See Also: [NSFormCell-setTitleBaseWritingDirection:] -setTextBaseWritingDirection:</p>
*/
- (void) setTitleBaseWritingDirection: (NSWritingDirection)direction
{
int i, count = [self numberOfRows];
/* Set the writing direction attribute to the cell prototype */
[[self prototype] setTitleBaseWritingDirection: direction];
for (i = 0; i < count; i++)
[[self cellAtRow: i column: 0] setTitleBaseWritingDirection: direction];
}
/** <p>Sets the contents writing direction to direction for all entries</p>
<p>See Also: [NSCell-setBaseWritingDirection:] -setTitleBaseWritingDirection:</p>
*/
- (void) setTextBaseWritingDirection: (NSWritingDirection)direction
{
int i, count = [self numberOfRows];
/* Set the writing direction attribute to the cell prototype */
[[self prototype] setBaseWritingDirection: direction];
for (i = 0; i < count; i++)
[[self cellAtRow: i column: 0] setBaseWritingDirection: direction];
}
/**<p>Returns the index of the entry specified by aTag or -1 if aTag is not
found in entries.</p><p>See Also: [NSMatrix-cellAtRow:column:]</p>
*/
@ -322,7 +360,7 @@ static Class defaultCellClass = nil;
{
candidate_title_width = [_cells[i][0] titleWidth];
if (candidate_title_width > new_title_width)
new_title_width = candidate_title_width;
new_title_width = candidate_title_width;
}
// Suggest this max as title width to all cells
@ -351,7 +389,7 @@ static Class defaultCellClass = nil;
id theCell = [self cellAtIndex: index];
[theCell drawWithFrame: [self cellFrameAtRow: index column: 0]
inView: self];
inView: self];
}
- (void) drawCellAtRow: (int)row column: (int)column

View file

@ -29,6 +29,7 @@
#include "config.h"
#include <Foundation/NSNotification.h>
#include "AppKit/NSAttributedString.h"
#include "AppKit/NSColor.h"
#include "AppKit/NSFormCell.h"
#include "AppKit/NSFont.h"
@ -36,19 +37,6 @@
#include "AppKit/NSTextFieldCell.h"
#include "GNUstepGUI/GSTheme.h"
static NSColor *shadowCol;
@interface NSFormCell (PrivateColor)
+ (void) _systemColorsChanged: (NSNotification*)n;
@end
@implementation NSFormCell (PrivateColor)
+ (void) _systemColorsChanged: (NSNotification*)n
{
ASSIGN(shadowCol, [NSColor controlDarkShadowColor]);
}
@end
/** <p>TODO Description </p>
*/
@implementation NSFormCell
@ -57,12 +45,6 @@ static NSColor *shadowCol;
if (self == [NSFormCell class])
{
[self setVersion: 1];
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(_systemColorsChanged:)
name: NSSystemColorsDidChangeNotification
object: nil];
[self _systemColorsChanged: nil];
}
}
@ -95,6 +77,7 @@ static NSColor *shadowCol;
- (void)dealloc
{
RELEASE(_titleCell);
TEST_RELEASE(_placeholder);
[super dealloc];
}
@ -107,7 +90,7 @@ static NSColor *shadowCol;
return [_titleCell isOpaque] && [super isOpaque];
}
- (void)setAttributedTitle:(NSAttributedString *)anAttributedString
- (void)setAttributedTitle: (NSAttributedString *)anAttributedString
{
[_titleCell setAttributedStringValue: anAttributedString];
if (_formcell_auto_title_width)
@ -116,8 +99,8 @@ static NSColor *shadowCol;
_displayedTitleWidth = -1;
// Update the control(s)
[[NSNotificationCenter defaultCenter]
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
}
}
@ -134,8 +117,8 @@ static NSColor *shadowCol;
_displayedTitleWidth = -1;
// Update the control(s)
[[NSNotificationCenter defaultCenter]
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
}
}
@ -148,8 +131,8 @@ static NSColor *shadowCol;
_displayedTitleWidth = -1;
// Update the control(s)
[[NSNotificationCenter defaultCenter]
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
}
}
@ -158,7 +141,7 @@ static NSColor *shadowCol;
id="NSTextAlignment">NSTextAlignment</ref> for more informations.
</p><p>See Also: -titleAlignment [NSCell-setAlignment:]</p>
*/
- (void)setTitleAlignment:(NSTextAlignment)mode
- (void)setTitleAlignment: (NSTextAlignment)mode
{
[_titleCell setAlignment: mode];
}
@ -175,8 +158,8 @@ static NSColor *shadowCol;
_displayedTitleWidth = -1;
// Update the control(s)
[[NSNotificationCenter defaultCenter]
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
postNotificationName: _NSFormCellDidChangeTitleWidthNotification
object: self];
}
}
@ -233,6 +216,22 @@ static NSColor *shadowCol;
return [_titleCell font];
}
/** <p>Returns the writing direction of the NSFormCell's title</p>
<p>See Also: -setTitleBaseWritingDirection: [NSCell-baseWritingDirection]</p>
*/
- (NSWritingDirection)titleBaseWritingDirection
{
return [_titleCell baseWritingDirection];
}
/** <p>Sets the writing direction of the NSFormCell's title</p>
<p>See Also: -titleBaseWritingDirection: [NSCell-setBaseWritingDirection]</p>
*/
- (void)setTitleBaseWritingDirection: (NSWritingDirection)writingDirection
{
[_titleCell setBaseWritingDirection: writingDirection];
}
//
// Warning: this method returns the width of the title; the width the
// title would have if the cell was the only cell in the form. This
@ -262,12 +261,48 @@ static NSColor *shadowCol;
NSSize titleSize = [_titleCell cellSize];
if (aSize.width > titleSize.width)
return titleSize.width;
return titleSize.width;
else
return aSize.width;
return aSize.width;
}
}
- (NSAttributedString*)placeholderAttributedString
{
if (_formcell_placeholder_is_attributed_string == YES)
{
return (NSAttributedString*)_placeholder;
}
else
{
return nil;
}
}
- (NSString*)placeholderString
{
if (_formcell_placeholder_is_attributed_string == YES)
{
return nil;
}
else
{
return (NSString*)_placeholder;
}
}
- (void)setPlaceholderAttributedString: (NSAttributedString*)string
{
ASSIGN(_placeholder, string);
_formcell_placeholder_is_attributed_string = YES;
}
- (void)setPlaceholderString: (NSString*)string
{
ASSIGN(_placeholder, string);
_formcell_placeholder_is_attributed_string = NO;
}
// Updates the title width. The width of aRect is the new title width
// to display. Invoked by NSForm to align the editable parts of the
// cells.
@ -318,61 +353,80 @@ static NSColor *shadowCol;
return [super drawingRectForBounds: theRect];
}
- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
- (void) _drawBorderAndBackgroundWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
NSRect titleFrame = cellFrame;
NSRect borderedFrame = cellFrame;
// Save last view drawn to
if (_control_view != controlView)
_control_view = controlView;
// do nothing if cell's frame rect is zero
if (NSIsEmptyRect(cellFrame))
return;
// Safety check
if (_displayedTitleWidth == -1)
_displayedTitleWidth = [self titleWidth];
//
// Draw title
//
titleFrame.size.width = _displayedTitleWidth;
[_titleCell drawWithFrame: titleFrame inView: controlView];
//
// Leave unfilled the space between titlecell and editable text.
//
//
// Draw border
//
borderedFrame.origin.x += _displayedTitleWidth + 3;
borderedFrame.size.width -= _displayedTitleWidth + 3;
if (NSIsEmptyRect(borderedFrame))
return;
if (_cell.is_bordered)
{
[shadowCol set];
NSFrameRect(borderedFrame);
}
else if (_cell.is_bezeled)
{
NSRect frame;
[super _drawBorderAndBackgroundWithFrame: borderedFrame inView: controlView];
// Draw text background
[[NSColor textBackgroundColor] set];
NSRectFill([self drawingRectForBounds: cellFrame]);
}
frame = [[GSTheme theme] drawWhiteBezel: borderedFrame
withClip: NSZeroRect];
[[NSColor textBackgroundColor] set];
NSRectFill (frame);
}
- (void) drawWithFrame: (NSRect)cellFrame inView: (NSView*)controlView
{
NSRect titleFrame = cellFrame;
//
// Draw interior
//
[self drawInteriorWithFrame: cellFrame inView: controlView];
// Safety check
if (_displayedTitleWidth == -1)
_displayedTitleWidth = [self titleWidth];
// Draw title
titleFrame.size.width = _displayedTitleWidth;
[_titleCell drawWithFrame: titleFrame inView: controlView];
// Draw text
[super drawWithFrame: cellFrame inView: controlView];
}
/*
Attributed string that will be displayed.
*/
- (NSAttributedString*)_drawAttributedString
{
NSAttributedString *attrStr;
attrStr = [super _drawAttributedString];
if (attrStr == nil)
{
attrStr = [self placeholderAttributedString];
if (attrStr == nil)
{
NSString *string;
NSDictionary *attributes;
NSMutableDictionary *newAttribs;
string = [self placeholderString];
if (string == nil)
{
return nil;
}
attributes = [self _nonAutoreleasedTypingAttributes];
newAttribs = [NSMutableDictionary
dictionaryWithDictionary: attributes];
[newAttribs setObject: [NSColor disabledControlTextColor]
forKey: NSForegroundColorAttributeName];
return AUTORELEASE([[NSAttributedString alloc]
initWithString: string
attributes: newAttribs]);
}
else
{
return attrStr;
}
}
else
{
return attrStr;
}
}
/*
@ -387,6 +441,7 @@ static NSColor *shadowCol;
title cell of the copied cell, the string value of the title cell
of the original cell would be changed too ! */
c->_titleCell = [_titleCell copyWithZone: zone];
c->_placeholder = [_placeholder copyWithZone: zone];
return c;
}
@ -399,9 +454,9 @@ static NSColor *shadowCol;
{
/*
if ([self stringValue] != nil)
{
[aCoder encodeObject: [self stringValue] forKey: @"NSContents"];
}
{
[aCoder encodeObject: [self stringValue] forKey: @"NSContents"];
}
*/
[aCoder encodeFloat: [self titleWidth] forKey: @"NSTitleWidth"];
[aCoder encodeObject: _titleCell forKey: @"NSTitleCell"];
@ -422,16 +477,16 @@ static NSColor *shadowCol;
{
if ([aDecoder containsValueForKey: @"NSContents"])
{
[self setStringValue: [aDecoder decodeObjectForKey: @"NSContents"]];
}
[self setStringValue: [aDecoder decodeObjectForKey: @"NSContents"]];
}
if ([aDecoder containsValueForKey: @"NSTitleWidth"])
{
[self setTitleWidth: [aDecoder decodeFloatForKey: @"NSTitleWidth"]];
}
[self setTitleWidth: [aDecoder decodeFloatForKey: @"NSTitleWidth"]];
}
if ([aDecoder containsValueForKey: @"NSTitleCell"])
{
ASSIGN(_titleCell, [aDecoder decodeObjectForKey: @"NSTitleCell"]);
}
ASSIGN(_titleCell, [aDecoder decodeObjectForKey: @"NSTitleCell"]);
}
}
else
{

View file

@ -140,40 +140,13 @@
attributes: attributes]);
}
- (void) drawInteriorWithFrame: (NSRect)cellFrame
inView: (NSView *)controlView
- (NSAttributedString*) _drawAttributedString
{
cellFrame = [self drawingRectForBounds: cellFrame];
/* Draw background, then ... */
if (_textfieldcell_draws_background)
{
if ([self isEnabled])
{
[_background_color set];
}
else
{
[[NSColor controlBackgroundColor] set];
}
NSRectFill(cellFrame);
}
if (_echosBullets)
{
// Add spacing between border and inside
if (_cell.is_bordered || _cell.is_bezeled)
{
cellFrame.origin.x += 3;
cellFrame.size.width -= 6;
cellFrame.origin.y += 1;
cellFrame.size.height -= 2;
}
if (!_cell.is_disabled)
{
[self _drawAttributedText: [self _replacementAttributedString]
inFrame: cellFrame];
return [self _replacementAttributedString];
}
else
{
@ -188,17 +161,15 @@
[newAttribs setObject: [NSColor disabledControlTextColor]
forKey: NSForegroundColorAttributeName];
attrStr = [[NSAttributedString alloc]
initWithString: [attrStr string]
attributes: newAttribs];
[self _drawAttributedText: attrStr
inFrame: cellFrame];
RELEASE(attrStr);
return AUTORELEASE([[NSAttributedString alloc]
initWithString: [attrStr string]
attributes: newAttribs]);
}
}
else
{
/* .. do nothing. */
return nil;
}
}