| Index: ios/chrome/browser/ui/omnibox/truncating_attributed_label.mm
|
| diff --git a/ios/chrome/browser/ui/omnibox/truncating_attributed_label.mm b/ios/chrome/browser/ui/omnibox/truncating_attributed_label.mm
|
| index c4a13e49895e5c9e4f4fb2d622700fc8b1bbc867..0474a6143ce81462df6930875db980bfa9091af2 100644
|
| --- a/ios/chrome/browser/ui/omnibox/truncating_attributed_label.mm
|
| +++ b/ios/chrome/browser/ui/omnibox/truncating_attributed_label.mm
|
| @@ -15,8 +15,6 @@
|
| @end
|
|
|
| @implementation OmniboxPopupTruncatingLabel {
|
| - // Attributed text.
|
| - base::scoped_nsobject<CATextLayer> textLayer_;
|
| // Gradient used to create fade effect. Changes based on view.frame size.
|
| base::scoped_nsobject<UIImage> gradient_;
|
|
|
| @@ -24,23 +22,10 @@
|
| }
|
|
|
| @synthesize truncateMode = truncateMode_;
|
| -@synthesize attributedText = attributedText_;
|
| -@synthesize highlighted = highlighted_;
|
| -@synthesize highlightedText = highlightedText_;
|
| -@synthesize textAlignment = textAlignment_;
|
|
|
| - (void)setup {
|
| self.backgroundColor = [UIColor clearColor];
|
| - self.contentMode = UIViewContentModeRedraw;
|
| truncateMode_ = OmniboxPopupTruncatingTail;
|
| -
|
| - // Disable animations in CATextLayer.
|
| - textLayer_.reset([[CATextLayer layer] retain]);
|
| - base::scoped_nsobject<NSDictionary> actions([[NSDictionary alloc]
|
| - initWithObjectsAndKeys:[NSNull null], @"contents", nil]);
|
| - [textLayer_ setActions:actions];
|
| - [textLayer_ setFrame:self.bounds];
|
| - [textLayer_ setContentsScale:[[UIScreen mainScreen] scale]];
|
| }
|
|
|
| - (id)initWithFrame:(CGRect)frame {
|
| @@ -48,6 +33,7 @@
|
| if (self) {
|
| propertyReleaser_OmniboxPopupTruncatingLabel_.Init(
|
| self, [OmniboxPopupTruncatingLabel class]);
|
| + self.lineBreakMode = NSLineBreakByClipping;
|
| [self setup];
|
| }
|
| return self;
|
| @@ -60,7 +46,6 @@
|
|
|
| - (void)setFrame:(CGRect)frame {
|
| [super setFrame:frame];
|
| - [textLayer_ setFrame:self.bounds];
|
|
|
| // Cache the fade gradient when the frame changes.
|
| if (!CGRectIsEmpty(frame) &&
|
| @@ -70,35 +55,45 @@
|
| }
|
| }
|
|
|
| -- (void)drawRect:(CGRect)rect {
|
| - if ([attributedText_ length] == 0)
|
| - return;
|
| -
|
| +// Draw fade gradient mask if attributedText is wider than rect.
|
| +- (void)drawTextInRect:(CGRect)requestedRect {
|
| CGContextRef context = UIGraphicsGetCurrentContext();
|
| CGContextSaveGState(context);
|
| - [textLayer_ setString:highlighted_ ? highlightedText_ : attributedText_];
|
| - CGContextClipToMask(context, self.bounds, [gradient_ CGImage]);
|
| - [textLayer_ renderInContext:context];
|
| +
|
| + if ([self.attributedText size].width > requestedRect.size.width)
|
| + CGContextClipToMask(context, self.bounds, [gradient_ CGImage]);
|
| +
|
| + // Add the specified line break and alignment attributes to attributedText and
|
| + // draw the result.
|
| + NSMutableAttributedString* attributedString =
|
| + [[self.attributedText mutableCopy] autorelease];
|
| + NSMutableParagraphStyle* textStyle =
|
| + [[[NSParagraphStyle defaultParagraphStyle] mutableCopy] autorelease];
|
| + textStyle.lineBreakMode = self.lineBreakMode;
|
| + textStyle.alignment = self.textAlignment;
|
| + [attributedString addAttribute:NSParagraphStyleAttributeName
|
| + value:textStyle
|
| + range:NSMakeRange(0, [self.text length])];
|
| + [attributedString drawInRect:requestedRect];
|
|
|
| CGContextRestoreGState(context);
|
| }
|
|
|
| - (void)setTextAlignment:(NSTextAlignment)textAlignment {
|
| if (textAlignment == NSTextAlignmentLeft) {
|
| - [textLayer_ setAlignmentMode:kCAAlignmentLeft];
|
| self.truncateMode = OmniboxPopupTruncatingTail;
|
| } else if (textAlignment == NSTextAlignmentRight) {
|
| - [textLayer_ setAlignmentMode:kCAAlignmentRight];
|
| self.truncateMode = OmniboxPopupTruncatingHead;
|
| } else if (textAlignment == NSTextAlignmentNatural) {
|
| - [textLayer_ setAlignmentMode:kCAAlignmentNatural];
|
| self.truncateMode = OmniboxPopupTruncatingTail;
|
| } else {
|
| NOTREACHED();
|
| }
|
| - if (textAlignment != textAlignment_)
|
| +
|
| + if (textAlignment != self.textAlignment)
|
| gradient_.reset();
|
| - textAlignment_ = textAlignment;
|
| +
|
| + [super setTextAlignment:textAlignment];
|
| }
|
|
|
| // Create gradient opacity mask based on direction.
|
|
|