diff options
author | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-09-03 21:45:27 +0000 |
---|---|---|
committer | gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2009-09-03 21:45:27 +0000 |
commit | 080c554c4901491976eda408c394b0e34c33295d (patch) | |
tree | ecfeab45d638fb8eec919655221cbde2000bd374 /AppKit | |
parent | 9fbe2547e4730c295c47f4dbea0b9e5fa4dd0fe8 (diff) |
[Author: alcor]
Add fading text field cell
R=dmaclach,thomasvl
DELTA=161 (161 added, 0 deleted, 0 changed)
Diffstat (limited to 'AppKit')
-rw-r--r-- | AppKit/GTMFadeTruncatingTextFieldCell.h | 28 | ||||
-rw-r--r-- | AppKit/GTMFadeTruncatingTextFieldCell.m | 69 | ||||
-rw-r--r-- | AppKit/GTMFadeTruncatingTextFieldCellTest.m | 42 | ||||
-rw-r--r-- | AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff | bin | 0 -> 2096 bytes | |||
-rw-r--r-- | AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff | bin | 0 -> 1898 bytes |
5 files changed, 139 insertions, 0 deletions
diff --git a/AppKit/GTMFadeTruncatingTextFieldCell.h b/AppKit/GTMFadeTruncatingTextFieldCell.h new file mode 100644 index 0000000..5ddcc70 --- /dev/null +++ b/AppKit/GTMFadeTruncatingTextFieldCell.h @@ -0,0 +1,28 @@ +// +// GTMFadeTruncatingTextFieldCell.h +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import <Foundation/Foundation.h> + + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 + +// A simple text field cell that truncates the right hand edge using a gradient +@interface GTMFadeTruncatingTextFieldCell : NSTextFieldCell +@end + +#endif diff --git a/AppKit/GTMFadeTruncatingTextFieldCell.m b/AppKit/GTMFadeTruncatingTextFieldCell.m new file mode 100644 index 0000000..98eac8c --- /dev/null +++ b/AppKit/GTMFadeTruncatingTextFieldCell.m @@ -0,0 +1,69 @@ +// GTMFadeTruncatingTextFieldCell.m +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMFadeTruncatingTextFieldCell.h" + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 + +@implementation GTMFadeTruncatingTextFieldCell +- (void)awakeFromNib { + // Force to clipping + [self setLineBreakMode:NSLineBreakByClipping]; +} + +- (id)initTextCell:(NSString *)aString { + self = [super initTextCell:aString]; + if (self) { + // Force to clipping + [self setLineBreakMode:NSLineBreakByClipping]; + } + return self; +} + +- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { + CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextBeginTransparencyLayer(context, 0); + + [super drawInteriorWithFrame:cellFrame inView:controlView]; + + // Don't complicate drawing unless we need to clip + NSSize size = [[self attributedStringValue] size]; + if (size.width > cellFrame.size.width) { + // Gradient is about twice our line height long + CGFloat width = MIN(size.height * 2, NSWidth(cellFrame) / 4); + + // TODO(alcor): switch this to GTMLinearRGBShading if we ever need on 10.4 + NSColor *color = [self textColor]; + NSGradient *mask = [[NSGradient alloc] + initWithStartingColor:color + endingColor:[color colorWithAlphaComponent:0.0]]; + + // Draw the gradient mask + CGContextSetBlendMode(context, kCGBlendModeDestinationIn); + [mask drawFromPoint:NSMakePoint(NSMaxX(cellFrame) - width, + NSMinY(cellFrame)) + toPoint:NSMakePoint(NSMaxX(cellFrame), + NSMinY(cellFrame)) + options:NSGradientDrawsBeforeStartingLocation]; + [mask release]; + } + CGContextEndTransparencyLayer(context); +} + +@end + +#endif diff --git a/AppKit/GTMFadeTruncatingTextFieldCellTest.m b/AppKit/GTMFadeTruncatingTextFieldCellTest.m new file mode 100644 index 0000000..d457195 --- /dev/null +++ b/AppKit/GTMFadeTruncatingTextFieldCellTest.m @@ -0,0 +1,42 @@ +// GTMFadeTruncatingTextFieldCellTest.m +// +// Copyright 2009 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMSenTestCase.h" +#import "GTMAppKit+UnitTesting.h" +#import "GTMFadeTruncatingTextFieldCell.h" + +@interface GTMFadeTruncatingTextFieldCellTest : GTMTestCase +@end + +@implementation GTMFadeTruncatingTextFieldCellTest + +- (void)testFadeCell { + NSTextField *field = [[[NSTextField alloc] initWithFrame: + NSMakeRect(0, 0, 100, 16)] autorelease]; + [field setCell:[[[GTMFadeTruncatingTextFieldCell alloc] initTextCell:@""] + autorelease]]; + [field setStringValue:@"A very long string that won't fit"]; + GTMAssertObjectImageEqualToImageNamed(field, + @"GTMFadeTruncatingTextFieldCellTest1", + nil); + [field setStringValue:@"A short string"]; + GTMAssertObjectImageEqualToImageNamed(field, + @"GTMFadeTruncatingTextFieldCellTest2", + nil); +} + +@end diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff Binary files differnew file mode 100644 index 0000000..8c81e1d --- /dev/null +++ b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff Binary files differnew file mode 100644 index 0000000..d163833 --- /dev/null +++ b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff |