| Index: ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
|
| diff --git a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
|
| index 659afd722f593a54d9c8197a221c69bf4f12aebe..64020a711201f11c6d7ae81db8e1fc1865d881df 100644
|
| --- a/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
|
| +++ b/ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.mm
|
| @@ -9,8 +9,7 @@
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #include "base/mac/foundation_util.h"
|
| -#include "base/mac/objc_property_releaser.h"
|
| -#include "base/mac/scoped_nsobject.h"
|
| +
|
| #include "base/strings/sys_string_conversions.h"
|
| #include "components/grit/components_scaled_resources.h"
|
| #include "components/omnibox/browser/autocomplete_input.h"
|
| @@ -32,6 +31,10 @@
|
| #import "ui/gfx/ios/NSString+CrStringDrawing.h"
|
| #include "ui/gfx/scoped_cg_context_save_gstate_mac.h"
|
|
|
| +#if !defined(__has_feature) || !__has_feature(objc_arc)
|
| +#error "This file requires ARC support."
|
| +#endif
|
| +
|
| namespace {
|
| const CGFloat kFontSize = 16;
|
| const CGFloat kEditingRectX = 16;
|
| @@ -92,21 +95,16 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
|
|
| @implementation OmniboxTextFieldIOS {
|
| // Currently selected chip text. Nil if no chip.
|
| - base::scoped_nsobject<NSString> _chipText;
|
| - base::scoped_nsobject<UILabel> _selection;
|
| - base::scoped_nsobject<UILabel> _preEditStaticLabel;
|
| - NSString* _preEditText;
|
| - base::scoped_nsobject<UIFont> _font;
|
| - base::scoped_nsobject<UIColor> _displayedTextColor;
|
| - base::scoped_nsobject<UIColor> _displayedTintColor;
|
| - UIColor* _selectedTextBackgroundColor;
|
| - UIColor* _placeholderTextColor;
|
| + NSString* _chipText;
|
| + UILabel* _selection;
|
| + UILabel* _preEditStaticLabel;
|
| + UIFont* _font;
|
| + UIColor* _displayedTextColor;
|
| + UIColor* _displayedTintColor;
|
|
|
| // The 'Copy URL' menu item is sometimes shown in the edit menu, so keep it
|
| // around to make adding/removing easier.
|
| - base::scoped_nsobject<UIMenuItem> _copyUrlMenuItem;
|
| -
|
| - base::mac::ObjCPropertyReleaser _propertyReleaser_OmniboxTextFieldIOS;
|
| + UIMenuItem* _copyUrlMenuItem;
|
| }
|
|
|
| @synthesize leftViewImageId = _leftViewImageId;
|
| @@ -130,15 +128,13 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| tintColor:(UIColor*)tintColor {
|
| self = [super initWithFrame:frame];
|
| if (self) {
|
| - _propertyReleaser_OmniboxTextFieldIOS.Init(self,
|
| - [OmniboxTextFieldIOS class]);
|
| - _font.reset([font retain]);
|
| - _displayedTextColor.reset([textColor retain]);
|
| + _font = font;
|
| + _displayedTextColor = textColor;
|
| if (tintColor) {
|
| [self setTintColor:tintColor];
|
| - _displayedTintColor.reset([tintColor retain]);
|
| + _displayedTintColor = tintColor;
|
| } else {
|
| - _displayedTintColor.reset([self.tintColor retain]);
|
| + _displayedTintColor = self.tintColor;
|
| }
|
| [self setFont:_font];
|
| [self setTextColor:_displayedTextColor];
|
| @@ -210,7 +206,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| [super selectAll:nil];
|
| }
|
|
|
| - if (!_selection.get()) {
|
| + if (!_selection) {
|
| [super touchesBegan:touches withEvent:event];
|
| return;
|
| }
|
| @@ -221,7 +217,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| return;
|
|
|
| // Accept selection.
|
| - base::scoped_nsobject<NSString> newText([[self nsDisplayedText] copy]);
|
| + NSString* newText = [[self nsDisplayedText] copy];
|
| [self clearAutocompleteText];
|
| [self setText:newText];
|
| }
|
| @@ -244,22 +240,22 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| [self setPreEditText:self.text];
|
|
|
| // Adjusts the placement so static URL lines up perfectly with UITextField.
|
| - DCHECK(!_preEditStaticLabel.get());
|
| + DCHECK(!_preEditStaticLabel);
|
| CGRect rect = [self preEditLabelRectForBounds:self.bounds];
|
| - _preEditStaticLabel.reset([[UILabel alloc] initWithFrame:rect]);
|
| - _preEditStaticLabel.get().backgroundColor = [UIColor clearColor];
|
| - _preEditStaticLabel.get().opaque = YES;
|
| - _preEditStaticLabel.get().font = _font;
|
| - _preEditStaticLabel.get().textColor = _displayedTextColor;
|
| - _preEditStaticLabel.get().lineBreakMode = NSLineBreakByTruncatingHead;
|
| + _preEditStaticLabel = [[UILabel alloc] initWithFrame:rect];
|
| + _preEditStaticLabel.backgroundColor = [UIColor clearColor];
|
| + _preEditStaticLabel.opaque = YES;
|
| + _preEditStaticLabel.font = _font;
|
| + _preEditStaticLabel.textColor = _displayedTextColor;
|
| + _preEditStaticLabel.lineBreakMode = NSLineBreakByTruncatingHead;
|
|
|
| NSDictionary* attributes =
|
| @{NSBackgroundColorAttributeName : [self selectedTextBackgroundColor]};
|
| - base::scoped_nsobject<NSAttributedString> preEditString(
|
| + NSAttributedString* preEditString =
|
| [[NSAttributedString alloc] initWithString:self.text
|
| - attributes:attributes]);
|
| + attributes:attributes];
|
| [_preEditStaticLabel setAttributedText:preEditString];
|
| - _preEditStaticLabel.get().textAlignment = [self preEditTextAlignment];
|
| + _preEditStaticLabel.textAlignment = [self preEditTextAlignment];
|
| [self addSubview:_preEditStaticLabel];
|
| }
|
|
|
| @@ -287,9 +283,9 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| // If the pre-edit text is wider than the omnibox, right-align the text so it
|
| // ends at the same x coord as the blue selection box.
|
| CGSize textSize =
|
| - [_preEditStaticLabel.get().text cr_pixelAlignedSizeWithFont:_font];
|
| + [_preEditStaticLabel.text cr_pixelAlignedSizeWithFont:_font];
|
| BOOL isLTR = [self bestTextAlignment] == NSTextAlignmentLeft;
|
| - return textSize.width < _preEditStaticLabel.get().frame.size.width
|
| + return textSize.width < _preEditStaticLabel.frame.size.width
|
| ? (isLTR ? NSTextAlignmentLeft : NSTextAlignmentRight)
|
| : (isLTR ? NSTextAlignmentRight : NSTextAlignmentLeft);
|
| }
|
| @@ -301,7 +297,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| [_preEditStaticLabel setFrame:rect];
|
|
|
| // Update text alignment since the pre-edit label's frame changed.
|
| - _preEditStaticLabel.get().textAlignment = [self preEditTextAlignment];
|
| + _preEditStaticLabel.textAlignment = [self preEditTextAlignment];
|
| [self hideTextAndCursor];
|
| } else if (!_selection) {
|
| [self showTextAndCursor];
|
| @@ -313,7 +309,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| [self setPreEditText:nil];
|
| if (_preEditStaticLabel) {
|
| [_preEditStaticLabel removeFromSuperview];
|
| - _preEditStaticLabel.reset(nil);
|
| + _preEditStaticLabel = nil;
|
| [self showTextAndCursor];
|
| }
|
| }
|
| @@ -333,7 +329,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| }
|
|
|
| - (NSString*)nsDisplayedText {
|
| - if (_selection.get())
|
| + if (_selection)
|
| return [_selection text];
|
| return [self text];
|
| }
|
| @@ -346,7 +342,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| DCHECK_LT([[self text] length], [[_selection text] length])
|
| << "[_selection text] and [self text] are out of sync. "
|
| << "Please email justincohen@ and rohitrao@ if you see this.";
|
| - if (_selection.get() && [[_selection text] length] > [[self text] length]) {
|
| + if (_selection && [[_selection text] length] > [[self text] length]) {
|
| return base::SysNSStringToUTF16(
|
| [[_selection text] substringFromIndex:[[self text] length]]);
|
| }
|
| @@ -364,8 +360,8 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| if ([self isPreEditing]) {
|
| [self exitPreEditState];
|
| }
|
| - if (_selection.get()) {
|
| - base::scoped_nsobject<NSString> newText([[self nsDisplayedText] copy]);
|
| + if (_selection) {
|
| + NSString* newText = [[self nsDisplayedText] copy];
|
| [self clearAutocompleteText];
|
| [self setText:newText];
|
| }
|
| @@ -375,10 +371,10 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| // Creates the SelectedTextLabel if it doesn't already exist and adds it as a
|
| // subview.
|
| - (void)createSelectionViewIfNecessary {
|
| - if (_selection.get())
|
| + if (_selection)
|
| return;
|
|
|
| - _selection.reset([[UILabel alloc] initWithFrame:CGRectZero]);
|
| + _selection = [[UILabel alloc] initWithFrame:CGRectZero];
|
| [_selection setFont:_font];
|
| [_selection setTextColor:_displayedTextColor];
|
| [_selection setOpaque:NO];
|
| @@ -408,8 +404,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| } else if (_leftViewImageId && (IsIPadIdiom() || ![self isFirstResponder])) {
|
| UIImage* image = [NativeImage(_leftViewImageId)
|
| imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
| - UIImageView* imageView =
|
| - [[[UIImageView alloc] initWithImage:image] autorelease];
|
| + UIImageView* imageView = [[UIImageView alloc] initWithImage:image];
|
| [leftViewButton setImage:imageView.image forState:UIControlStateNormal];
|
| [leftViewButton setTitle:nil forState:UIControlStateNormal];
|
| UIColor* tint = [UIColor whiteColor];
|
| @@ -475,11 +470,11 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| // Creating |autocompleteText| from |[text string]| has the added bonus of
|
| // removing all the previously set attributes. This way the autocomplete
|
| // text doesn't have a highlighted protocol, etc.
|
| - base::scoped_nsobject<NSMutableAttributedString> autocompleteText(
|
| - [[NSMutableAttributedString alloc] initWithString:[text string]]);
|
| + NSMutableAttributedString* autocompleteText =
|
| + [[NSMutableAttributedString alloc] initWithString:[text string]];
|
|
|
| [self createSelectionViewIfNecessary];
|
| - DCHECK(_selection.get());
|
| + DCHECK(_selection);
|
| [autocompleteText
|
| addAttribute:NSBackgroundColorAttributeName
|
| value:[self selectedTextBackgroundColor]
|
| @@ -512,8 +507,7 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
|
|
| // Ensures that attributedText always uses the proper style attributes.
|
| - (void)setAttributedText:(NSAttributedString*)attributedText {
|
| - base::scoped_nsobject<NSMutableAttributedString> mutableText(
|
| - [attributedText mutableCopy]);
|
| + NSMutableAttributedString* mutableText = [attributedText mutableCopy];
|
| NSRange entireString = NSMakeRange(0, [mutableText length]);
|
|
|
| // Set the font.
|
| @@ -523,13 +517,12 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| if (self.editing) {
|
| // Hide the text when the |_selection| label is displayed.
|
| UIColor* textColor =
|
| - _selection ? [UIColor clearColor] : _displayedTextColor.get();
|
| + _selection ? [UIColor clearColor] : _displayedTextColor;
|
| [mutableText addAttribute:NSForegroundColorAttributeName
|
| value:textColor
|
| range:entireString];
|
| } else {
|
| - base::scoped_nsobject<NSMutableParagraphStyle> style(
|
| - [[NSMutableParagraphStyle alloc] init]);
|
| + NSMutableParagraphStyle* style = [[NSMutableParagraphStyle alloc] init];
|
| // URLs have their text direction set to to LTR (avoids RTL characters
|
| // making the URL render from right to left, as per RFC 3987 Section 4.1).
|
| [style setBaseWritingDirection:NSWritingDirectionLeftToRight];
|
| @@ -579,16 +572,15 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| NSDictionary* attributes =
|
| @{NSForegroundColorAttributeName : _placeholderTextColor};
|
| self.attributedPlaceholder =
|
| - [[[NSAttributedString alloc] initWithString:placeholder
|
| - attributes:attributes] autorelease];
|
| + [[NSAttributedString alloc] initWithString:placeholder
|
| + attributes:attributes];
|
| } else {
|
| [super setPlaceholder:placeholder];
|
| }
|
| }
|
|
|
| - (void)setText:(NSString*)text {
|
| - NSAttributedString* as =
|
| - [[[NSAttributedString alloc] initWithString:text] autorelease];
|
| + NSAttributedString* as = [[NSAttributedString alloc] initWithString:text];
|
| if (self.text.length > 0 && as.length == 0) {
|
| // Remove the fade animations before the subviews are removed.
|
| [self cleanUpFadeAnimations];
|
| @@ -605,23 +597,23 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| }
|
|
|
| - (void)setChipText:(NSString*)chipName {
|
| - _chipText.reset();
|
| + _chipText = nil;
|
| if ([chipName length]) {
|
| if ([self bestAlignmentForText:chipName] == NSTextAlignmentLeft)
|
| chipName = [chipName stringByAppendingString:@":"];
|
| - _chipText.reset([chipName copy]);
|
| + _chipText = [chipName copy];
|
| }
|
| [self updateLeftView];
|
| }
|
|
|
| - (BOOL)hasAutocompleteText {
|
| - return !!_selection.get();
|
| + return !!_selection;
|
| }
|
|
|
| - (void)clearAutocompleteText {
|
| if (_selection) {
|
| [_selection removeFromSuperview];
|
| - _selection.reset(nil);
|
| + _selection = nil;
|
| [self showTextAndCursor];
|
| }
|
| }
|
| @@ -992,10 +984,10 @@ NSString* const kOmniboxFadeAnimationKey = @"OmniboxFadeAnimation";
|
| if (![super becomeFirstResponder])
|
| return NO;
|
|
|
| - if (!_copyUrlMenuItem.get()) {
|
| + if (!_copyUrlMenuItem) {
|
| NSString* const kTitle = l10n_util::GetNSString(IDS_IOS_COPY_URL);
|
| - _copyUrlMenuItem.reset(
|
| - [[UIMenuItem alloc] initWithTitle:kTitle action:@selector(copyUrl:)]);
|
| + _copyUrlMenuItem =
|
| + [[UIMenuItem alloc] initWithTitle:kTitle action:@selector(copyUrl:)];
|
| }
|
|
|
| // Add the "Copy URL" menu item to the |sharedMenuController| if necessary.
|
|
|