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

Unified Diff: chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm

Issue 1059333003: Mac: Fix broken website settings bubble when using Right-to-Left languages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@OnWindowWillClose
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm
diff --git a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm
index 4e2d7bb29250e659fca466ae7868037f98178977..f85e8fe956e8ec1093478b6054ae79bf59045d58 100644
--- a/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/website_settings/website_settings_bubble_controller.mm
@@ -224,7 +224,12 @@ NSColor* IdentityVerifiedTextColor() {
/*flipped=*/ YES);
// 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];
Andre 2015/04/04 00:17:48 Without this fix, the text will draw on the right
+
if ([[controlView window] firstResponder] == controlView)
[self drawFocusRect];
}
@@ -236,33 +241,36 @@ NSColor* IdentityVerifiedTextColor() {
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
// the given segment.
- (NSRect)hitRectForSegment:(NSInteger)segment {
CGFloat tabstripHeight = [tabCenterImage_ size].height;
DCHECK_GT(tabstripHeight, kTabHeight);
-
- NSRect rect = NSMakeRect(0, tabstripHeight - kTabHeight,
- [self widthForSegment:segment], kTabHeight);
- for (NSInteger i = 0; i < segment; ++i) {
- rect.origin.x += [self widthForSegment:i];
- }
- int xAdjust = segment == 0 ? kTabStripXPadding : 0;
- rect.size.width = std::floor(
- [self widthForSegment:segment] - kTabSpacing - xAdjust);
- rect.origin.x = std::floor(rect.origin.x + kTabSpacing / 2 + xAdjust);
-
- return rect;
+ DCHECK([self segmentCount] == 2); // Assume 2 segments to keep things simple.
+ NSInteger leftSegment = [self leftSegment];
+ CGFloat xOrigin = segment == leftSegment ? kTabStripXPadding
+ : [self widthForSegment:leftSegment];
+ NSRect rect = NSMakeRect(xOrigin, tabstripHeight - kTabHeight,
+ [self widthForSegment:segment] - kTabStripXPadding,
+ kTabHeight);
+ return NSInsetRect(rect, kTabSpacing / 2, 0);
}
- (void)drawSegment:(NSInteger)segment
inFrame:(NSRect)tabFrame
withView:(NSView*)controlView {
// 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.size.width -= kTabStripXPadding;
- }
+ tabFrame.size.width -= kTabStripXPadding;
tabFrame.origin.y += kTabLabelTopPadding;
tabFrame.size.height -= kTabLabelTopPadding;
@@ -464,7 +472,7 @@ NSColor* IdentityVerifiedTextColor() {
textSize.width + 2 * kTabLabelXPadding);
[segmentedControl_ setWidth:tabWidth + kTabStripXPadding
forSegment:WebsiteSettingsUI::TAB_ID_PERMISSIONS];
- [segmentedControl_ setWidth:tabWidth
+ [segmentedControl_ setWidth:tabWidth + kTabStripXPadding
Andre 2015/04/04 00:17:49 Give padding to this segment as well, because on R
forSegment:WebsiteSettingsUI::TAB_ID_CONNECTION];
[segmentedControl_ setFont:[textAttributes objectForKey:NSFontAttributeName]];
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698