aboutsummaryrefslogtreecommitdiff
path: root/AppKit
diff options
context:
space:
mode:
authorGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-09-03 21:45:27 +0000
committerGravatar gtm.daemon <gtm.daemon@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2009-09-03 21:45:27 +0000
commit080c554c4901491976eda408c394b0e34c33295d (patch)
treeecfeab45d638fb8eec919655221cbde2000bd374 /AppKit
parent9fbe2547e4730c295c47f4dbea0b9e5fa4dd0fe8 (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.h28
-rw-r--r--AppKit/GTMFadeTruncatingTextFieldCell.m69
-rw-r--r--AppKit/GTMFadeTruncatingTextFieldCellTest.m42
-rw-r--r--AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiffbin0 -> 2096 bytes
-rw-r--r--AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiffbin0 -> 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
new file mode 100644
index 0000000..8c81e1d
--- /dev/null
+++ b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest1.tiff
Binary files differ
diff --git a/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff
new file mode 100644
index 0000000..d163833
--- /dev/null
+++ b/AppKit/TestData/GTMFadeTruncatingTextFieldCellTest2.tiff
Binary files differ