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

Side by Side Diff: chrome/browser/ui/cocoa/base_bubble_controller.mm

Issue 2717603003: [Mac] Make bubble arrow location/position RTL-aware (Closed)
Patch Set: Now with proper enum formatting Created 3 years, 9 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/ui/cocoa/base_bubble_controller.h" 5 #import "chrome/browser/ui/cocoa/base_bubble_controller.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/mac/bundle_locations.h" 8 #include "base/mac/bundle_locations.h"
9 #include "base/mac/foundation_util.h" 9 #include "base/mac/foundation_util.h"
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 BrowserWindowController* bwc = 108 BrowserWindowController* bwc =
109 [BrowserWindowController browserWindowControllerForWindow:parentWindow_]; 109 [BrowserWindowController browserWindowControllerForWindow:parentWindow_];
110 if (bwc) { 110 if (bwc) {
111 TabStripController* tabStripController = [bwc tabStripController]; 111 TabStripController* tabStripController = [bwc tabStripController];
112 TabStripModel* tabStripModel = [tabStripController tabStripModel]; 112 TabStripModel* tabStripModel = [tabStripController tabStripModel];
113 tabStripObserverBridge_.reset(new TabStripModelObserverBridge(tabStripModel, 113 tabStripObserverBridge_.reset(new TabStripModelObserverBridge(tabStripModel,
114 self)); 114 self));
115 } 115 }
116 116
117 [bubble_ setArrowLocation:info_bubble::kTopRight]; 117 [bubble_ setArrowLocation:info_bubble::kTopTrailing];
118 } 118 }
119 119
120 - (void)dealloc { 120 - (void)dealloc {
121 [self unregisterFromNotifications]; 121 [self unregisterFromNotifications];
122 [super dealloc]; 122 [super dealloc];
123 } 123 }
124 124
125 - (void)registerForNotifications { 125 - (void)registerForNotifications {
126 // No window to register notifications for. 126 // No window to register notifications for.
127 if (!parentWindow_) 127 if (!parentWindow_)
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 NSWindow* window = [self window]; 404 NSWindow* window = [self window];
405 NSPoint origin = anchor_; 405 NSPoint origin = anchor_;
406 406
407 BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout(); 407 BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout();
408 switch ([bubble_ alignment]) { 408 switch ([bubble_ alignment]) {
409 case info_bubble::kAlignArrowToAnchor: { 409 case info_bubble::kAlignArrowToAnchor: {
410 NSSize offsets = NSMakeSize(info_bubble::kBubbleArrowXOffset + 410 NSSize offsets = NSMakeSize(info_bubble::kBubbleArrowXOffset +
411 info_bubble::kBubbleArrowWidth / 2.0, 0); 411 info_bubble::kBubbleArrowWidth / 2.0, 0);
412 offsets = [[parentWindow_ contentView] convertSize:offsets toView:nil]; 412 offsets = [[parentWindow_ contentView] convertSize:offsets toView:nil];
413 switch ([bubble_ arrowLocation]) { 413 switch ([bubble_ arrowLocation]) {
414 case info_bubble::kTopRight: 414 case info_bubble::kTopTrailing:
415 origin.x -= NSWidth([window frame]) - offsets.width; 415 origin.x -=
416 isRTL ? offsets.width : NSWidth([window frame]) - offsets.width;
416 break; 417 break;
417 case info_bubble::kTopLeft: 418 case info_bubble::kTopLeading:
418 origin.x -= offsets.width; 419 origin.x -=
420 isRTL ? NSWidth([window frame]) - offsets.width : offsets.width;
419 break; 421 break;
420 case info_bubble::kNoArrow: 422 case info_bubble::kNoArrow:
421 // FALLTHROUGH. 423 // FALLTHROUGH.
422 case info_bubble::kTopCenter: 424 case info_bubble::kTopCenter:
423 origin.x -= NSWidth([window frame]) / 2.0; 425 origin.x -= NSWidth([window frame]) / 2.0;
424 break; 426 break;
425 } 427 }
426 break; 428 break;
427 } 429 }
428 430
429 case info_bubble::kAlignEdgeToAnchorEdge: 431 case info_bubble::kAlignEdgeToAnchorEdge:
430 // If the arrow is to the right then move the origin so that the right 432 // If the arrow is to the right then move the origin so that the right
431 // edge aligns with the anchor. If the arrow is to the left then there's 433 // edge aligns with the anchor. If the arrow is to the left then there's
432 // nothing to do because the left edge is already aligned with the left 434 // nothing to do because the left edge is already aligned with the left
433 // edge of the anchor. 435 // edge of the anchor.
434 if ([bubble_ arrowLocation] == info_bubble::kTopRight) { 436 if ([bubble_ arrowLocation] == info_bubble::kTopTrailing) {
435 origin.x -= NSWidth([window frame]); 437 origin.x -= NSWidth([window frame]);
436 } 438 }
437 break; 439 break;
438 440
439 case info_bubble::kAlignTrailingEdgeToAnchorEdge: 441 case info_bubble::kAlignTrailingEdgeToAnchorEdge:
440 if (!isRTL) 442 if (!isRTL)
441 origin.x -= NSWidth([window frame]); 443 origin.x -= NSWidth([window frame]);
442 break; 444 break;
443 445
444 case info_bubble::kAlignLeadingEdgeToAnchorEdge: 446 case info_bubble::kAlignLeadingEdgeToAnchorEdge:
(...skipping 11 matching lines...) Expand all
456 458
457 - (void)activateTabWithContents:(content::WebContents*)newContents 459 - (void)activateTabWithContents:(content::WebContents*)newContents
458 previousContents:(content::WebContents*)oldContents 460 previousContents:(content::WebContents*)oldContents
459 atIndex:(NSInteger)index 461 atIndex:(NSInteger)index
460 reason:(int)reason { 462 reason:(int)reason {
461 // The user switched tabs; close. 463 // The user switched tabs; close.
462 [self closeBubble]; 464 [self closeBubble];
463 } 465 }
464 466
465 @end // BaseBubbleController 467 @end // BaseBubbleController
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698