Index: chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm |
index 97ed1a6ea1085fd73592af01ce133792e3657b81..3bf1e041fff697b21e4642510cff311f42c2135f 100644 |
--- a/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm |
+++ b/chrome/browser/ui/cocoa/extensions/browser_actions_container_view.mm |
@@ -7,6 +7,7 @@ |
#include <algorithm> |
#include <utility> |
+#import "chrome/browser/ui/cocoa/l10n_util.h" |
#import "chrome/browser/ui/cocoa/view_id_util.h" |
#include "ui/base/cocoa/appkit_utils.h" |
#include "ui/events/keycodes/keyboard_code_conversion_mac.h" |
@@ -58,6 +59,9 @@ const CGFloat kMinimumContainerWidth = 3.0; |
- (id)initWithFrame:(NSRect)frameRect { |
if ((self = [super initWithFrame:frameRect])) { |
grippyRect_ = NSMakeRect(0.0, 0.0, kGrippyWidth, NSHeight([self bounds])); |
+ if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout()) |
+ grippyRect_.origin.x = NSWidth(frameRect) - NSWidth(grippyRect_); |
+ |
canDragLeft_ = YES; |
canDragRight_ = YES; |
resizable_ = YES; |
@@ -162,6 +166,8 @@ const CGFloat kMinimumContainerWidth = 3.0; |
} |
- (void)resetCursorRects { |
+ if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout()) |
+ grippyRect_.origin.x = NSWidth([self frame]) - NSWidth(grippyRect_); |
[self addCursorRect:grippyRect_ cursor:[self appropriateCursorForGrippy]]; |
} |
@@ -214,23 +220,29 @@ const CGFloat kMinimumContainerWidth = 3.0; |
NSRect containerFrame = [self frame]; |
CGFloat dX = [theEvent deltaX]; |
CGFloat withDelta = location.x - dX; |
- canDragRight_ = (withDelta >= initialDragPoint_.x) && |
- (NSWidth(containerFrame) > kMinimumContainerWidth); |
+ BOOL isRTL = cocoa_l10n_util::ShouldDoExperimentalRTLLayout(); |
+ |
CGFloat maxAllowedWidth = [self maxAllowedWidth]; |
- containerFrame.size.width = |
- std::max(NSWidth(containerFrame) - dX, kMinimumContainerWidth); |
- canDragLeft_ = withDelta <= initialDragPoint_.x && |
- NSWidth(containerFrame) < maxDesiredWidth_ && |
- NSWidth(containerFrame) < maxAllowedWidth; |
- if ((dX < 0.0 && !canDragLeft_) || (dX > 0.0 && !canDragRight_)) |
- return; |
+ const CGFloat maxWidth = std::min(maxAllowedWidth, maxDesiredWidth_); |
+ CGFloat newWidth = NSWidth(containerFrame) + (isRTL ? dX : -dX); |
+ newWidth = std::min(std::max(newWidth, kMinimumContainerWidth), maxWidth); |
- if (NSWidth(containerFrame) <= kMinimumContainerWidth) |
+ BOOL canGrow = NSWidth(containerFrame) < maxWidth; |
+ BOOL canShrink = NSWidth(containerFrame) > kMinimumContainerWidth; |
+ |
+ canDragLeft_ = |
+ withDelta <= initialDragPoint_.x && (isRTL ? canShrink : canGrow); |
+ canDragRight_ = |
+ (withDelta >= initialDragPoint_.x) && (isRTL ? canGrow : canShrink); |
+ if ((dX < 0.0 && !canDragLeft_) || (dX > 0.0 && !canDragRight_) || |
+ fabs(dX) < FLT_EPSILON) |
return; |
- grippyPinned_ = NSWidth(containerFrame) >= maxAllowedWidth; |
- containerFrame.origin.x += dX; |
+ grippyPinned_ = newWidth >= maxAllowedWidth; |
+ if (!isRTL) |
+ containerFrame.origin.x += dX; |
+ containerFrame.size.width = newWidth; |
[self setFrame:containerFrame]; |
[self setNeedsDisplay:YES]; |
@@ -271,14 +283,18 @@ const CGFloat kMinimumContainerWidth = 3.0; |
- (void)resizeToWidth:(CGFloat)width animate:(BOOL)animate { |
width = std::max(width, kMinimumContainerWidth); |
- NSRect frame = [self frame]; |
+ NSRect newFrame = [self frame]; |
CGFloat maxAllowedWidth = [self maxAllowedWidth]; |
width = std::min(maxAllowedWidth, width); |
- CGFloat dX = frame.size.width - width; |
- frame.size.width = width; |
- NSRect newFrame = NSOffsetRect(frame, dX, 0); |
+ if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout()) { |
+ newFrame.size.width = width; |
+ } else { |
+ CGFloat dX = NSWidth(newFrame) - width; |
+ newFrame.size.width = width; |
+ newFrame.origin.x += dX; |
+ } |
grippyPinned_ = width == maxAllowedWidth; |