aboutsummaryrefslogtreecommitdiff
path: root/AppKit/GTMFadeTruncatingTextFieldCell.m
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/GTMFadeTruncatingTextFieldCell.m
parent9fbe2547e4730c295c47f4dbea0b9e5fa4dd0fe8 (diff)
[Author: alcor]
Add fading text field cell R=dmaclach,thomasvl DELTA=161 (161 added, 0 deleted, 0 changed)
Diffstat (limited to 'AppKit/GTMFadeTruncatingTextFieldCell.m')
-rw-r--r--AppKit/GTMFadeTruncatingTextFieldCell.m69
1 files changed, 69 insertions, 0 deletions
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