Commit a9a8b903 authored by andresantoso's avatar andresantoso Committed by Commit bot

Mac: Fix broken website settings UI when using Right-to-Left languages.

Our NSSegmentedControl customization for this UI never handled RTL layout.
The fix is not pretty but it works.

BUG=470516

Review URL: https://codereview.chromium.org/1059333003

Cr-Commit-Position: refs/heads/master@{#323968}
parent 344fc323
...@@ -224,7 +224,12 @@ NSColor* IdentityVerifiedTextColor() { ...@@ -224,7 +224,12 @@ NSColor* IdentityVerifiedTextColor() {
/*flipped=*/ YES); /*flipped=*/ YES);
// Call the superclass method to trigger drawing of the tab labels. // Call the superclass method to trigger drawing of the tab labels.
[self drawInteriorWithFrame:cellFrame inView:controlView]; NSRect interiorFrame = cellFrame;
interiorFrame.size.width = 0;
for (NSInteger i = 0; i < [self segmentCount]; ++i)
interiorFrame.size.width += [self widthForSegment:i];
[self drawInteriorWithFrame:interiorFrame inView:controlView];
if ([[controlView window] firstResponder] == controlView) if ([[controlView window] firstResponder] == controlView)
[self drawFocusRect]; [self drawFocusRect];
} }
...@@ -236,33 +241,36 @@ NSColor* IdentityVerifiedTextColor() { ...@@ -236,33 +241,36 @@ NSColor* IdentityVerifiedTextColor() {
NSFrameRect([self hitRectForSegment:keySegment_]); NSFrameRect([self hitRectForSegment:keySegment_]);
} }
// Returns the segment number for the left-most positioned segment.
// On Right-to-Left languages, segment 0 is on the right.
- (NSInteger)leftSegment {
BOOL isRTL = [self userInterfaceLayoutDirection] ==
NSUserInterfaceLayoutDirectionRightToLeft;
return isRTL ? [self segmentCount] - 1 : 0;
}
// Return the hit rect (i.e., the visual bounds of the tab) for // Return the hit rect (i.e., the visual bounds of the tab) for
// the given segment. // the given segment.
- (NSRect)hitRectForSegment:(NSInteger)segment { - (NSRect)hitRectForSegment:(NSInteger)segment {
CGFloat tabstripHeight = [tabCenterImage_ size].height; CGFloat tabstripHeight = [tabCenterImage_ size].height;
DCHECK_GT(tabstripHeight, kTabHeight); DCHECK_GT(tabstripHeight, kTabHeight);
DCHECK([self segmentCount] == 2); // Assume 2 segments to keep things simple.
NSRect rect = NSMakeRect(0, tabstripHeight - kTabHeight, NSInteger leftSegment = [self leftSegment];
[self widthForSegment:segment], kTabHeight); CGFloat xOrigin = segment == leftSegment ? kTabStripXPadding
for (NSInteger i = 0; i < segment; ++i) { : [self widthForSegment:leftSegment];
rect.origin.x += [self widthForSegment:i]; NSRect rect = NSMakeRect(xOrigin, tabstripHeight - kTabHeight,
} [self widthForSegment:segment] - kTabStripXPadding,
int xAdjust = segment == 0 ? kTabStripXPadding : 0; kTabHeight);
rect.size.width = std::floor( return NSInsetRect(rect, kTabSpacing / 2, 0);
[self widthForSegment:segment] - kTabSpacing - xAdjust);
rect.origin.x = std::floor(rect.origin.x + kTabSpacing / 2 + xAdjust);
return rect;
} }
- (void)drawSegment:(NSInteger)segment - (void)drawSegment:(NSInteger)segment
inFrame:(NSRect)tabFrame inFrame:(NSRect)tabFrame
withView:(NSView*)controlView { withView:(NSView*)controlView {
// Adjust the tab's frame so that the label appears centered in the tab. // Adjust the tab's frame so that the label appears centered in the tab.
if (segment == 0) { if (segment == [self leftSegment])
tabFrame.origin.x += kTabStripXPadding; tabFrame.origin.x += kTabStripXPadding;
tabFrame.size.width -= kTabStripXPadding; tabFrame.size.width -= kTabStripXPadding;
}
tabFrame.origin.y += kTabLabelTopPadding; tabFrame.origin.y += kTabLabelTopPadding;
tabFrame.size.height -= kTabLabelTopPadding; tabFrame.size.height -= kTabLabelTopPadding;
...@@ -464,7 +472,7 @@ NSColor* IdentityVerifiedTextColor() { ...@@ -464,7 +472,7 @@ NSColor* IdentityVerifiedTextColor() {
textSize.width + 2 * kTabLabelXPadding); textSize.width + 2 * kTabLabelXPadding);
[segmentedControl_ setWidth:tabWidth + kTabStripXPadding [segmentedControl_ setWidth:tabWidth + kTabStripXPadding
forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS]; forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS];
[segmentedControl_ setWidth:tabWidth [segmentedControl_ setWidth:tabWidth + kTabStripXPadding
forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION]; forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION];
[segmentedControl_ setFont:[textAttributes objectForKey:NSFontAttributeName]]; [segmentedControl_ setFont:[textAttributes objectForKey:NSFontAttributeName]];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment