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

Unified Diff: chrome/browser/cocoa/autocomplete_text_field_cell.mm

Issue 600133: Mac: Content blocked icons. (Closed)
Patch Set: comments andybons Created 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cocoa/autocomplete_text_field_cell.mm
diff --git a/chrome/browser/cocoa/autocomplete_text_field_cell.mm b/chrome/browser/cocoa/autocomplete_text_field_cell.mm
index 8558b808a952cf3ef543bac909f712c3abd3fdcf..8772f5af9d9a68b4518e10c8a2cdef484383aab8 100644
--- a/chrome/browser/cocoa/autocomplete_text_field_cell.mm
+++ b/chrome/browser/cocoa/autocomplete_text_field_cell.mm
@@ -1,4 +1,4 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -57,6 +57,22 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) {
} // namespace
+@implementation AutocompleteTextFieldIcon
+
+@synthesize rect = rect_;
+@synthesize view = view_;
+
++ (AutocompleteTextFieldIcon*)
+ iconWithRect:(NSRect)rect
+ view:(LocationBarViewMac::LocationBarImageView*)view {
+ AutocompleteTextFieldIcon* result = [[AutocompleteTextFieldIcon alloc] init];
+ [result setRect:rect];
+ [result setView:view];
+ return [result autorelease];
+}
+
+@end
+
@implementation AutocompleteTextFieldCell
// @synthesize doesn't seem to compile for this transition.
@@ -202,12 +218,9 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) {
security_image_view_ = view;
}
-- (void)onSecurityIconMousePressed {
- security_image_view_->OnMousePressed();
-}
-
-- (void)onPageActionMousePressedIn:(NSRect)iconFrame forIndex:(size_t)index {
- page_action_views_->OnMousePressed(iconFrame, index);
+- (void)setContentBlockedViewList:
+ (LocationBarViewMac::ContentBlockedViews*)views {
+ content_blocked_views_ = views;
}
// Overriden to account for the hint strings and hint icons.
@@ -235,32 +248,15 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) {
textFrame.size.width = NSMaxX(cellFrame) - NSMinX(textFrame);
}
} else {
- // Account for the lock icon, if any, and any visible Page Action icons.
+ // Leave room for images on the right (lock icon etc).
+ NSArray* iconFrames = [self layedOutIcons:cellFrame];
CGFloat width = 0;
- const size_t iconCount = [self pageActionCount];
- for (size_t i = 0; i < iconCount; ++i) {
- LocationBarViewMac::PageActionImageView* view =
- page_action_views_->ViewAt(i);
- NSImage* image = view->GetImage();
- if (image && view->IsVisible()) {
- width += [image size].width + kIconHorizontalPad;
- }
- }
-
- if (security_image_view_ && security_image_view_->IsVisible()) {
- width += [security_image_view_->GetImage() size].width +
- kIconHorizontalPad;
- NSAttributedString* label = security_image_view_->GetLabel();
- if (label) {
- width += ceil([label size].width) + kHintXOffset;
- }
- }
+ if ([iconFrames count] > 0)
+ width = NSMaxX(cellFrame) - NSMinX([[iconFrames lastObject] rect]);
if (width > 0)
width += kIconHorizontalPad;
-
- if (width < NSWidth(cellFrame)) {
+ if (width < NSWidth(cellFrame))
textFrame.size.width -= width;
- }
}
return textFrame;
@@ -308,53 +304,21 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) {
- (NSRect)pageActionFrameForIndex:(size_t)index inFrame:(NSRect)cellFrame {
LocationBarViewMac::PageActionImageView* view =
page_action_views_->ViewAt(index);
- const NSImage* icon = view->GetImage();
// If we are calculating space for a preview page action, the icon is still
// loading. We use this function only to get the correct x value for the
// extension installed bubble arrow.
if (!view->preview_enabled() &&
- (!icon || !view->IsVisible())) {
+ (!view->GetImage() || !view->IsVisible())) {
return NSZeroRect;
}
- // Compute the amount of space used by this icon plus any other icons to its
- // right. It's terribly inefficient to do this anew every time, but easy to
- // understand. It should be fine for 5 or 10 installed Page Actions, perhaps
- // too slow for 100.
- // TODO(pamg): Refactor to avoid this if performance is a problem.
- const NSRect securityIconRect = [self securityImageFrameForFrame:cellFrame];
- CGFloat widthUsed = 0.0;
- if (NSWidth(securityIconRect) > 0) {
- widthUsed += NSMaxX(cellFrame) - NSMinX(securityIconRect);
+ for (AutocompleteTextFieldIcon* icon in [self layedOutIcons:cellFrame]) {
+ if (view == [icon view])
+ return [icon rect];
}
- for (size_t i = 0; i <= index; ++i) {
- view = page_action_views_->ViewAt(i);
- if (view->IsVisible()) {
- NSImage* image = view->GetImage();
- if (image) {
- // Page Action icons don't have labels. Don't compute space for them.
- widthUsed += [image size].width + kIconHorizontalPad;
- }
- }
- }
- widthUsed += kIconHorizontalPad;
-
- // If we are calculating frame space for a preview, the icon is still
- // loading -- use maximum size as a placeholder.
- NSSize iconSize = view->GetImageSize();
-
- return [self rightJustifyImage:iconSize
- inRect:cellFrame
- withMargin:widthUsed];
-}
-
-- (NSString*)pageActionToolTipForIndex:(size_t)index {
- return page_action_views_->ViewAt(index)->GetToolTip();
-}
-
-- (ExtensionAction*)pageActionForIndex:(size_t)index {
- return page_action_views_->ViewAt(index)->page_action();
+ NOTREACHED();
+ return NSZeroRect;
}
- (void)drawHintWithFrame:(NSRect)cellFrame inView:(NSView*)controlView {
@@ -430,25 +394,65 @@ CGFloat WidthForKeyword(NSAttributedString* keywordString) {
} else if (keywordString_) {
[self drawKeywordWithFrame:cellFrame inView:controlView];
} else {
- if (security_image_view_ && security_image_view_->IsVisible()) {
- [self drawImageView:security_image_view_
- inFrame:[self securityImageFrameForFrame:cellFrame]
+ for (AutocompleteTextFieldIcon* icon in [self layedOutIcons:cellFrame]) {
+ [self drawImageView:[icon view]
+ inFrame:[icon rect]
inView:controlView];
}
+ }
- const size_t pageActionCount = [self pageActionCount];
- for (size_t i = 0; i < pageActionCount; ++i) {
- LocationBarViewMac::PageActionImageView* view =
- page_action_views_->ViewAt(i);
- if (view && view->IsVisible()) {
- [self drawImageView:view
- inFrame:[self pageActionFrameForIndex:i inFrame:cellFrame]
- inView:controlView];
- }
+ [super drawInteriorWithFrame:cellFrame inView:controlView];
+}
+
+- (NSArray*)layedOutIcons:(NSRect)cellFrame {
+ NSMutableArray* result = [NSMutableArray arrayWithCapacity:0];
+ NSRect iconFrame = cellFrame;
+ if (security_image_view_ && security_image_view_->IsVisible()) {
+ NSRect securityImageFrame = [self securityImageFrameForFrame:iconFrame];
+ [result addObject:
+ [AutocompleteTextFieldIcon iconWithRect:securityImageFrame
+ view:security_image_view_]];
+ iconFrame.size.width -= NSMaxX(iconFrame) - NSMinX(securityImageFrame);
+ }
+
+ const size_t pageActionCount = [self pageActionCount];
+ for (size_t i = 0; i < pageActionCount; ++i) {
+ LocationBarViewMac::PageActionImageView* view =
+ page_action_views_->ViewAt(i);
+ if (view->preview_enabled() || (view->GetImage() && view->IsVisible())) {
+ NSSize iconSize = view->GetImageSize();
+ NSRect pageActionFrame =
+ [self rightJustifyImage:iconSize
+ inRect:iconFrame
+ withMargin:kIconHorizontalPad + iconSize.width];
+ [result addObject:
+ [AutocompleteTextFieldIcon iconWithRect:pageActionFrame view:view]];
+ iconFrame.size.width -= NSMaxX(iconFrame) - NSMinX(pageActionFrame);
}
}
- [super drawInteriorWithFrame:cellFrame inView:controlView];
+ if (content_blocked_views_) {
+ // We use a reverse_iterator here because we're laying out the views from
+ // right to left but in the vector they're ordered left to right.
+ for (LocationBarViewMac::ContentBlockedViews::const_reverse_iterator
+ it(content_blocked_views_->rbegin());
+ it != const_cast<const LocationBarViewMac::ContentBlockedViews*>(
+ content_blocked_views_)->rend();
+ ++it) {
+ if ((*it)->IsVisible()) {
+ NSImage* image = (*it)->GetImage();
+ NSRect blockedContentFrame =
+ [self rightJustifyImage:[image size]
+ inRect:iconFrame
+ withMargin:[image size].width + kIconHorizontalPad];
+ [result addObject:
+ [AutocompleteTextFieldIcon iconWithRect:blockedContentFrame
+ view:*it]];
+ iconFrame.size.width -= NSMaxX(iconFrame) - NSMinX(blockedContentFrame);
+ }
+ }
+ }
+ return result;
}
@end
« no previous file with comments | « chrome/browser/cocoa/autocomplete_text_field_cell.h ('k') | chrome/browser/cocoa/autocomplete_text_field_cell_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698