Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.mm

Issue 2695413003: Change OmniboxPopupTruncatingLabel to be based on UILabel. (Closed)
Patch Set: Cache gradient, restore handling of text alignment. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | ios/chrome/browser/ui/omnibox/truncating_attributed_label.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.h" 5 #import "ios/chrome/browser/ui/omnibox/omnibox_popup_material_view_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/ios/ios_util.h" 9 #include "base/ios/ios_util.h"
10 #include "base/mac/scoped_cftyperef.h" 10 #include "base/mac/scoped_cftyperef.h"
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 } 67 }
68 UIColor* BackgroundColorIncognito() { 68 UIColor* BackgroundColorIncognito() {
69 return [UIColor colorWithRed:(50 / 255.0) 69 return [UIColor colorWithRed:(50 / 255.0)
70 green:(50 / 255.0) 70 green:(50 / 255.0)
71 blue:(50 / 255.0) 71 blue:(50 / 255.0)
72 alpha:1.0]; 72 alpha:1.0];
73 } 73 }
74 } // namespace 74 } // namespace
75 75
76 @interface OmniboxPopupMaterialViewController () { 76 @interface OmniboxPopupMaterialViewController () {
77 // CTFontRef's are needed for drawing attributed strings but are expensive
78 // to create. Since we only need four, we create them here and hold on to
79 // them.
80 base::ScopedCFTypeRef<CTFontRef> _smallFont;
81 base::ScopedCFTypeRef<CTFontRef> _bigFont;
82 base::ScopedCFTypeRef<CTFontRef> _smallBoldFont;
83 base::ScopedCFTypeRef<CTFontRef> _bigBoldFont;
84
85 // Alignment of omnibox text. Popup text should match this alignment. 77 // Alignment of omnibox text. Popup text should match this alignment.
86 NSTextAlignment _alignment; 78 NSTextAlignment _alignment;
87 79
88 OmniboxPopupViewIOS* _popupView; // weak, owns us 80 OmniboxPopupViewIOS* _popupView; // weak, owns us
89 81
90 // Fetcher for Answers in Suggest images. 82 // Fetcher for Answers in Suggest images.
91 std::unique_ptr<web::ImageDataFetcher> imageFetcher_; 83 std::unique_ptr<web::ImageDataFetcher> imageFetcher_;
92 84
93 // The data source. 85 // The data source.
94 AutocompleteResult _currentResult; 86 AutocompleteResult _currentResult;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 if (_incognito) { 142 if (_incognito) {
151 self.view.backgroundColor = BackgroundColorIncognito(); 143 self.view.backgroundColor = BackgroundColorIncognito();
152 } else { 144 } else {
153 self.view.backgroundColor = 145 self.view.backgroundColor =
154 IsIPadIdiom() ? BackgroundColorTablet() : BackgroundColorPhone(); 146 IsIPadIdiom() ? BackgroundColorTablet() : BackgroundColorPhone();
155 } 147 }
156 [self.view setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | 148 [self.view setAutoresizingMask:(UIViewAutoresizingFlexibleWidth |
157 UIViewAutoresizingFlexibleHeight)]; 149 UIViewAutoresizingFlexibleHeight)];
158 150
159 // Cache fonts needed for omnibox attributed string. 151 // Cache fonts needed for omnibox attributed string.
160 UIFont* smallFont = [MDCTypography body1Font];
161 UIFont* bigFont = [MDCTypography subheadFont];
162 UIFont* smallBoldFont = [[MDFRobotoFontLoader sharedInstance]
163 mediumFontOfSize:smallFont.pointSize];
164 UIFont* bigBoldFont =
165 [[MDFRobotoFontLoader sharedInstance] mediumFontOfSize:bigFont.pointSize];
166 _smallFont.reset(CTFontCreateWithName((CFStringRef)smallFont.fontName,
167 smallFont.pointSize, NULL));
168 _bigFont.reset(CTFontCreateWithName((CFStringRef)bigFont.fontName,
169 bigFont.pointSize, NULL));
170 _smallBoldFont.reset(CTFontCreateWithName((CFStringRef)smallBoldFont.fontName,
171 smallBoldFont.pointSize, NULL));
172 _bigBoldFont.reset(CTFontCreateWithName((CFStringRef)bigBoldFont.fontName,
173 bigBoldFont.pointSize, NULL));
174 NSMutableArray* rowsBuilder = [[[NSMutableArray alloc] init] autorelease]; 152 NSMutableArray* rowsBuilder = [[[NSMutableArray alloc] init] autorelease];
175 for (int i = 0; i < kRowCount; i++) { 153 for (int i = 0; i < kRowCount; i++) {
176 OmniboxPopupMaterialRow* row = [[[OmniboxPopupMaterialRow alloc] 154 OmniboxPopupMaterialRow* row = [[[OmniboxPopupMaterialRow alloc]
177 initWithIncognito:_incognito] autorelease]; 155 initWithIncognito:_incognito] autorelease];
178 row.accessibilityIdentifier = 156 row.accessibilityIdentifier =
179 [NSString stringWithFormat:@"omnibox suggestion %i", i]; 157 [NSString stringWithFormat:@"omnibox suggestion %i", i];
180 row.autoresizingMask = UIViewAutoresizingFlexibleWidth; 158 row.autoresizingMask = UIViewAutoresizingFlexibleWidth;
181 [rowsBuilder addObject:row]; 159 [rowsBuilder addObject:row];
182 [row.appendButton addTarget:self 160 [row.appendButton addTarget:self
183 action:@selector(appendButtonTapped:) 161 action:@selector(appendButtonTapped:)
(...skipping 11 matching lines...) Expand all
195 [self.tableView setLayoutMargins:UIEdgeInsetsZero]; 173 [self.tableView setLayoutMargins:UIEdgeInsetsZero];
196 } 174 }
197 self.automaticallyAdjustsScrollViewInsets = NO; 175 self.automaticallyAdjustsScrollViewInsets = NO;
198 [self.tableView setContentInset:UIEdgeInsetsMake(kTopAndBottomPadding, 0, 176 [self.tableView setContentInset:UIEdgeInsetsMake(kTopAndBottomPadding, 0,
199 kTopAndBottomPadding, 0)]; 177 kTopAndBottomPadding, 0)];
200 } 178 }
201 179
202 - (void)didReceiveMemoryWarning { 180 - (void)didReceiveMemoryWarning {
203 [super didReceiveMemoryWarning]; 181 [super didReceiveMemoryWarning];
204 if (![self isViewLoaded]) { 182 if (![self isViewLoaded]) {
205 _smallFont.reset();
206 _bigFont.reset();
207 _smallBoldFont.reset();
208 _bigBoldFont.reset();
209 _rows.reset(); 183 _rows.reset();
210 } 184 }
211 } 185 }
212 186
213 - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection { 187 - (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection {
214 [self layoutRows]; 188 [self layoutRows];
215 } 189 }
216 190
217 #pragma mark - 191 #pragma mark -
218 #pragma mark Updating data and UI 192 #pragma mark Updating data and UI
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 type:field->type()]]; 417 type:field->type()]];
444 } 418 }
445 419
446 return result; 420 return result;
447 } 421 }
448 422
449 - (NSAttributedString*)attributedStringWithString:(const base::string16&)string 423 - (NSAttributedString*)attributedStringWithString:(const base::string16&)string
450 type:(int)type { 424 type:(int)type {
451 NSDictionary* attributes = nil; 425 NSDictionary* attributes = nil;
452 426
453 const id font = (id)kCTFontAttributeName; 427 const id font = (id)NSFontAttributeName;
454 NSString* foregroundColor = (NSString*)kCTForegroundColorAttributeName; 428 NSString* foregroundColor = (NSString*)NSForegroundColorAttributeName;
455 const id baselineOffset = (id)NSBaselineOffsetAttributeName; 429 const id baselineOffset = (id)NSBaselineOffsetAttributeName;
456 430
457 // Answer types, sizes and colors specified at http://goto.google.com/ais_api. 431 // Answer types, sizes and colors specified at http://goto.google.com/ais_api.
458 switch (type) { 432 switch (type) {
459 case SuggestionAnswer::TOP_ALIGNED: 433 case SuggestionAnswer::TOP_ALIGNED:
460 attributes = @{ 434 attributes = @{
461 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:12], 435 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:12],
462 baselineOffset : @10.0f, 436 baselineOffset : @10.0f,
463 foregroundColor : (id)[UIColor grayColor].CGColor, 437 foregroundColor : [UIColor grayColor],
464 }; 438 };
465 break; 439 break;
466 case SuggestionAnswer::DESCRIPTION_POSITIVE: 440 case SuggestionAnswer::DESCRIPTION_POSITIVE:
467 attributes = @{ 441 attributes = @{
468 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16], 442 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16],
469 foregroundColor : (id)[UIColor colorWithRed:11 / 255.0 443 foregroundColor : [UIColor colorWithRed:11 / 255.0
470 green:128 / 255.0 444 green:128 / 255.0
471 blue:67 / 255.0 445 blue:67 / 255.0
472 alpha:1.0] 446 alpha:1.0],
473 .CGColor,
474 }; 447 };
475 break; 448 break;
476 case SuggestionAnswer::DESCRIPTION_NEGATIVE: 449 case SuggestionAnswer::DESCRIPTION_NEGATIVE:
477 attributes = @{ 450 attributes = @{
478 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16], 451 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16],
479 foregroundColor : (id)[UIColor colorWithRed:197 / 255.0 452 foregroundColor : [UIColor colorWithRed:197 / 255.0
480 green:57 / 255.0 453 green:57 / 255.0
481 blue:41 / 255.0 454 blue:41 / 255.0
482 alpha:1.0] 455 alpha:1.0],
483 .CGColor,
484 }; 456 };
485 break; 457 break;
486 case SuggestionAnswer::PERSONALIZED_SUGGESTION: 458 case SuggestionAnswer::PERSONALIZED_SUGGESTION:
487 attributes = @{ 459 attributes = @{
488 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16], 460 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16],
489 }; 461 };
490 break; 462 break;
491 case SuggestionAnswer::ANSWER_TEXT_MEDIUM: 463 case SuggestionAnswer::ANSWER_TEXT_MEDIUM:
492 attributes = @{ 464 attributes = @{
493 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:20], 465 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:20],
494 }; 466 };
495 break; 467 break;
496 case SuggestionAnswer::ANSWER_TEXT_LARGE: 468 case SuggestionAnswer::ANSWER_TEXT_LARGE:
497 attributes = @{ 469 attributes = @{
498 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:24], 470 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:24],
499 }; 471 };
500 break; 472 break;
501 case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_SMALL: 473 case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_SMALL:
502 attributes = @{ 474 attributes = @{
503 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:12], 475 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:12],
504 foregroundColor : (id)[UIColor grayColor].CGColor, 476 foregroundColor : [UIColor grayColor],
505 }; 477 };
506 break; 478 break;
507 case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_MEDIUM: 479 case SuggestionAnswer::SUGGESTION_SECONDARY_TEXT_MEDIUM:
508 attributes = @{ 480 attributes = @{
509 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:14], 481 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:14],
510 foregroundColor : (id)[UIColor grayColor].CGColor, 482 foregroundColor : [UIColor grayColor],
511 }; 483 };
512 break; 484 break;
513 case SuggestionAnswer::SUGGESTION: 485 case SuggestionAnswer::SUGGESTION:
514 // Fall through. 486 // Fall through.
515 default: 487 default:
516 attributes = @{ 488 attributes = @{
517 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16], 489 font : [[MDFRobotoFontLoader sharedInstance] regularFontOfSize:16],
518 }; 490 };
519 } 491 }
520 492
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
670 642
671 - (NSMutableAttributedString*) 643 - (NSMutableAttributedString*)
672 attributedStringWithString:(NSString*)text 644 attributedStringWithString:(NSString*)text
673 classifications:(const ACMatchClassifications*)classifications 645 classifications:(const ACMatchClassifications*)classifications
674 smallFont:(BOOL)smallFont 646 smallFont:(BOOL)smallFont
675 color:(UIColor*)defaultColor 647 color:(UIColor*)defaultColor
676 dimColor:(UIColor*)dimColor { 648 dimColor:(UIColor*)dimColor {
677 if (text == nil) 649 if (text == nil)
678 return nil; 650 return nil;
679 651
680 CTFontRef fontRef = smallFont ? _smallFont : _bigFont; 652 UIFont* fontRef =
653 smallFont ? [MDCTypography body1Font] : [MDCTypography subheadFont];
681 654
682 NSMutableAttributedString* as = 655 NSMutableAttributedString* as =
683 [[[NSMutableAttributedString alloc] initWithString:text] autorelease]; 656 [[[NSMutableAttributedString alloc] initWithString:text] autorelease];
684 657
685 // Set the base attributes to the default font and color. 658 // Set the base attributes to the default font and color.
686 NSDictionary* dict = [NSDictionary 659 NSDictionary* dict = @{
687 dictionaryWithObjectsAndKeys:(id)fontRef, (NSString*)kCTFontAttributeName, 660 NSFontAttributeName : fontRef,
688 defaultColor.CGColor, 661 NSForegroundColorAttributeName : defaultColor,
689 (NSString*)kCTForegroundColorAttributeName, 662 };
690 nil];
691 [as addAttributes:dict range:NSMakeRange(0, [text length])]; 663 [as addAttributes:dict range:NSMakeRange(0, [text length])];
692 664
693 if (classifications != NULL) { 665 if (classifications != NULL) {
694 CTFontRef boldFontRef = smallFont ? _smallBoldFont : _bigBoldFont; 666 UIFont* boldFontRef = [[MDFRobotoFontLoader sharedInstance]
667 mediumFontOfSize:fontRef.pointSize];
695 668
696 for (ACMatchClassifications::const_iterator i = classifications->begin(); 669 for (ACMatchClassifications::const_iterator i = classifications->begin();
697 i != classifications->end(); ++i) { 670 i != classifications->end(); ++i) {
698 const BOOL isLast = (i + 1) == classifications->end(); 671 const BOOL isLast = (i + 1) == classifications->end();
699 const size_t nextOffset = (isLast ? [text length] : (i + 1)->offset); 672 const size_t nextOffset = (isLast ? [text length] : (i + 1)->offset);
700 const NSInteger location = static_cast<NSInteger>(i->offset); 673 const NSInteger location = static_cast<NSInteger>(i->offset);
701 const NSInteger length = static_cast<NSInteger>(nextOffset - i->offset); 674 const NSInteger length = static_cast<NSInteger>(nextOffset - i->offset);
702 // Guard against bad, off-the-end classification ranges due to 675 // Guard against bad, off-the-end classification ranges due to
703 // crbug.com/121703 and crbug.com/131370. 676 // crbug.com/121703 and crbug.com/131370.
704 if (i->offset + length > [text length] || length <= 0) 677 if (i->offset + length > [text length] || length <= 0)
705 break; 678 break;
706 const NSRange range = NSMakeRange(location, length); 679 const NSRange range = NSMakeRange(location, length);
707 if (0 != (i->style & ACMatchClassification::MATCH)) { 680 if (0 != (i->style & ACMatchClassification::MATCH)) {
708 [as addAttribute:(id)kCTFontAttributeName 681 [as addAttribute:NSFontAttributeName value:boldFontRef range:range];
709 value:(id)boldFontRef
710 range:range];
711 } 682 }
712 683
713 if (0 != (i->style & ACMatchClassification::DIM)) { 684 if (0 != (i->style & ACMatchClassification::DIM)) {
714 [as addAttribute:(id)kCTForegroundColorAttributeName 685 [as addAttribute:NSForegroundColorAttributeName
715 value:(id)dimColor.CGColor 686 value:dimColor
716 range:range]; 687 range:range];
717 } 688 }
718 } 689 }
719 } 690 }
720 return as; 691 return as;
721 } 692 }
722 693
723 #pragma mark - 694 #pragma mark -
724 #pragma mark Table view delegate 695 #pragma mark Table view delegate
725 696
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
782 // The delete button never disappears if you don't call this after a tap. 753 // The delete button never disappears if you don't call this after a tap.
783 // It doesn't seem to be required anywhere else. 754 // It doesn't seem to be required anywhere else.
784 [_rows[indexPath.row] prepareForReuse]; 755 [_rows[indexPath.row] prepareForReuse];
785 const AutocompleteMatch& match = 756 const AutocompleteMatch& match =
786 ((const AutocompleteResult&)_currentResult).match_at(indexPath.row); 757 ((const AutocompleteResult&)_currentResult).match_at(indexPath.row);
787 _popupView->DeleteMatch(match); 758 _popupView->DeleteMatch(match);
788 } 759 }
789 } 760 }
790 761
791 @end 762 @end
OLDNEW
« no previous file with comments | « no previous file | ios/chrome/browser/ui/omnibox/truncating_attributed_label.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698