| Index: chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
|
| diff --git a/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm b/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
|
| index 983b348367c2e8fa5e0fc3ebd7ec5bfb1bb85c3a..95ddd59d36a4625818510a15fee4240aea81995e 100644
|
| --- a/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
|
| +++ b/chrome/browser/ui/cocoa/bookmarks/bookmark_button_cell.mm
|
| @@ -10,6 +10,7 @@
|
| #include "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_button.h"
|
| #import "chrome/browser/ui/cocoa/bookmarks/bookmark_context_menu_cocoa_controller.h"
|
| +#include "chrome/browser/ui/cocoa/l10n_util.h"
|
| #include "chrome/grit/generated_resources.h"
|
| #import "components/bookmarks/browser/bookmark_model.h"
|
| #import "ui/base/cocoa/nsview_additions.h"
|
| @@ -23,15 +24,15 @@ using bookmarks::BookmarkNode;
|
|
|
| namespace {
|
|
|
| -// Padding on the right side of the arrow icon.
|
| -const int kHierarchyButtonRightPadding = 4;
|
| +// Padding on the trailing side of the arrow icon.
|
| +const int kHierarchyButtonTrailingPadding = 4;
|
|
|
| -// Padding on the left side of the arrow icon.
|
| -const int kHierarchyButtonLeftPadding = 11;
|
| +// Padding on the leading side of the arrow icon.
|
| +const int kHierarchyButtonLeadingPadding = 11;
|
|
|
| const int kIconTextSpacer = 4;
|
| -const int kTextRightPadding = 4;
|
| -const int kIconLeftPadding = 4;
|
| +const int kTrailingPadding = 4;
|
| +const int kIconLeadingPadding = 4;
|
|
|
| const int kDefaultFontSize = 12;
|
|
|
| @@ -118,16 +119,16 @@ const CGFloat kKernAmount = 0.2;
|
| image:(NSImage*)image {
|
| NSString* title =
|
| [self cleanTitle:base::SysUTF16ToNSString(node->GetTitle())];
|
| - CGFloat width = kIconLeftPadding + [image size].width;
|
| + CGFloat width = kIconLeadingPadding + [image size].width;
|
| if ([title length] > 0) {
|
| CGSize titleSize = [title sizeWithAttributes:@{
|
| NSParagraphStyleAttributeName : [self paragraphStyleForBookmarkBarCell],
|
| NSKernAttributeName : @(kKernAmount),
|
| NSFontAttributeName : [self fontForBookmarkBarCell],
|
| }];
|
| - width += kIconTextSpacer + std::ceil(titleSize.width) + kTextRightPadding;
|
| + width += kIconTextSpacer + std::ceil(titleSize.width) + kTrailingPadding;
|
| } else {
|
| - width += kIconLeftPadding;
|
| + width += kTrailingPadding;
|
| }
|
| return width;
|
| }
|
| @@ -195,7 +196,7 @@ const CGFloat kKernAmount = 0.2;
|
| [self setButtonType:NSMomentaryPushInButton];
|
| [self setShowsBorderOnlyWhileMouseInside:YES];
|
| [self setControlSize:NSSmallControlSize];
|
| - [self setAlignment:NSLeftTextAlignment];
|
| + [self setAlignment:NSNaturalTextAlignment];
|
| [self setFont:[[self class] fontForBookmarkBarCell]];
|
| [self setBordered:NO];
|
| [self setBezeled:NO];
|
| @@ -233,12 +234,12 @@ const CGFloat kKernAmount = 0.2;
|
| image:(NSImage*)image {
|
| title = [[self class] cleanTitle:title];
|
| if ([title length] && ![self isOffTheSideButtonCell]) {
|
| - [self setImagePosition:NSImageLeft];
|
| + [self setImagePosition:cocoa_l10n_util::LeadingCellImagePosition()];
|
| [self setTitle:title];
|
| } else if ([self isFolderButtonCell]) {
|
| // Left-align icons for bookmarks within folders, regardless of whether
|
| // there is a title.
|
| - [self setImagePosition:NSImageLeft];
|
| + [self setImagePosition:cocoa_l10n_util::LeadingCellImagePosition()];
|
| } else {
|
| // For bookmarks without a title that aren't visible directly in the
|
| // bookmarks bar, squeeze things tighter by displaying only the image.
|
| @@ -328,8 +329,11 @@ const CGFloat kKernAmount = 0.2;
|
| drawFolderArrow_ = draw;
|
| if (draw && !arrowImage_) {
|
| ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
|
| - arrowImage_.reset(
|
| - [rb.GetNativeImageNamed(IDR_MENU_HIERARCHY_ARROW).ToNSImage() retain]);
|
| + NSImage* image =
|
| + rb.GetNativeImageNamed(IDR_MENU_HIERARCHY_ARROW).ToNSImage();
|
| + if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout())
|
| + image = cocoa_l10n_util::FlippedImage(image);
|
| + arrowImage_.reset([image retain]);
|
| }
|
| }
|
|
|
| @@ -365,38 +369,51 @@ const CGFloat kKernAmount = 0.2;
|
| NSSize cellSize = NSZeroSize;
|
| // Return the space needed to display the image and title, with a little
|
| // distance between them.
|
| - cellSize = NSMakeSize(kIconLeftPadding + [[self image] size].width,
|
| + cellSize = NSMakeSize(kIconLeadingPadding + [[self image] size].width,
|
| bookmarks::kBookmarkButtonHeight);
|
| NSString* title = [self visibleTitle];
|
| if ([title length] > 0) {
|
| CGFloat textWidth =
|
| [title sizeWithAttributes:[self titleTextAttributes]].width;
|
| - cellSize.width +=
|
| - kIconTextSpacer + std::ceil(textWidth) + kTextRightPadding;
|
| + cellSize.width += kIconTextSpacer + std::ceil(textWidth) + kTrailingPadding;
|
| } else {
|
| - // Make buttons without visible titles 20pts wide (18 plus padding).
|
| - cellSize.width += kIconLeftPadding;
|
| + cellSize.width += kIconLeadingPadding;
|
| }
|
|
|
| if (drawFolderArrow_) {
|
| cellSize.width += [arrowImage_ size].width +
|
| - kHierarchyButtonLeftPadding +
|
| - kHierarchyButtonRightPadding;
|
| + kHierarchyButtonLeadingPadding +
|
| + kHierarchyButtonTrailingPadding;
|
| }
|
| return cellSize;
|
| }
|
|
|
| - (NSRect)imageRectForBounds:(NSRect)theRect {
|
| NSRect imageRect = [super imageRectForBounds:theRect];
|
| - // Add a little space between the image and the button's left edge, but only
|
| - // if there's a visible title.
|
| + const CGFloat inset = [self insetInView:[self controlView]];
|
| imageRect.origin.y -= 1;
|
| - imageRect.origin.x = kIconLeftPadding;
|
| + imageRect.origin.x =
|
| + cocoa_l10n_util::ShouldDoExperimentalRTLLayout()
|
| + ? NSMaxX(theRect) - kIconLeadingPadding - NSWidth(imageRect) + inset
|
| + : kIconLeadingPadding;
|
| return imageRect;
|
| }
|
|
|
| -- (CGFloat)textStartXOffset {
|
| - return kIconLeftPadding + [[self image] size].width + kIconTextSpacer;
|
| +- (NSRect)titleRectForBounds:(NSRect)theRect {
|
| + NSRect textRect = [super titleRectForBounds:theRect];
|
| + NSRect imageRect = [self imageRectForBounds:theRect];
|
| + if (cocoa_l10n_util::ShouldDoExperimentalRTLLayout()) {
|
| + textRect.origin.x = kTrailingPadding;
|
| + if (drawFolderArrow_) {
|
| + textRect.origin.x +=
|
| + [arrowImage_ size].width + kHierarchyButtonTrailingPadding;
|
| + }
|
| + textRect.size.width =
|
| + NSMinX(imageRect) - textRect.origin.x - kIconTextSpacer;
|
| + } else {
|
| + textRect.origin.x = NSMaxX(imageRect) + kIconTextSpacer;
|
| + }
|
| + return textRect;
|
| }
|
|
|
| - (void)drawFocusRingMaskWithFrame:(NSRect)cellFrame
|
| @@ -428,8 +445,10 @@ const CGFloat kKernAmount = 0.2;
|
| NSRect imageRect = NSZeroRect;
|
| imageRect.size = [arrowImage_ size];
|
| const CGFloat kArrowOffset = 1.0; // Required for proper centering.
|
| - CGFloat dX =
|
| - NSWidth(cellFrame) - NSWidth(imageRect) - kHierarchyButtonRightPadding;
|
| + CGFloat dX = cocoa_l10n_util::ShouldDoExperimentalRTLLayout()
|
| + ? kHierarchyButtonTrailingPadding
|
| + : NSWidth(cellFrame) - NSWidth(imageRect) -
|
| + kHierarchyButtonTrailingPadding;
|
| CGFloat dY = (NSHeight(cellFrame) / 2.0) - (NSHeight(imageRect) / 2.0) +
|
| kArrowOffset;
|
| NSRect drawRect = NSOffsetRect(imageRect, dX, dY);
|
|
|