| Index: ios/chrome/browser/ui/fancy_ui/bidi_container_view.mm
|
| diff --git a/ios/chrome/browser/ui/fancy_ui/bidi_container_view.mm b/ios/chrome/browser/ui/fancy_ui/bidi_container_view.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..931176c059ef79668565ef03653e81cb471a9794
|
| --- /dev/null
|
| +++ b/ios/chrome/browser/ui/fancy_ui/bidi_container_view.mm
|
| @@ -0,0 +1,78 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#import "ios/chrome/browser/ui/fancy_ui/bidi_container_view.h"
|
| +
|
| +#include "base/i18n/rtl.h"
|
| +#include "base/logging.h"
|
| +
|
| +@interface BidiContainerView ()
|
| +// Changes the autoresizing mask by mirroring it horizontally so that the RTL
|
| +// layout is bind to oposite sites than LRT one.
|
| ++ (UIViewAutoresizing)mirrorAutoresizingMask:
|
| + (UIViewAutoresizing)autoresizingMask;
|
| +@end
|
| +
|
| +@implementation BidiContainerView
|
| +
|
| ++ (UIViewAutoresizing)mirrorAutoresizingMask:
|
| + (UIViewAutoresizing)autoresizingMask {
|
| + UIViewAutoresizing mirroredAutoresizingMask = autoresizingMask;
|
| + mirroredAutoresizingMask &= ~(UIViewAutoresizingFlexibleRightMargin |
|
| + UIViewAutoresizingFlexibleLeftMargin);
|
| +
|
| + if (autoresizingMask & UIViewAutoresizingFlexibleRightMargin)
|
| + mirroredAutoresizingMask |= UIViewAutoresizingFlexibleLeftMargin;
|
| + if (autoresizingMask & UIViewAutoresizingFlexibleLeftMargin)
|
| + mirroredAutoresizingMask |= UIViewAutoresizingFlexibleRightMargin;
|
| +
|
| + return mirroredAutoresizingMask;
|
| +}
|
| +
|
| +- (void)layoutSubviews {
|
| + [super layoutSubviews];
|
| + if (!base::i18n::IsRTL())
|
| + return;
|
| +
|
| + NSArray* viewsToAdjust;
|
| + BOOL adjustAutoresizingMask;
|
| + switch (adjustSubviewsType_) {
|
| + case ios::rtl::ADJUST_FRAME_AND_AUTOROTATION_MASK_FOR_ALL_SUBVIEWS:
|
| + viewsToAdjust = self.subviews;
|
| + adjustAutoresizingMask = YES;
|
| + adjustSubviewsType_ = ios::rtl::ADJUST_FRAME_FOR_UPDATED_SUBVIEWS;
|
| + break;
|
| +
|
| + case ios::rtl::ADJUST_FRAME_FOR_UPDATED_SUBVIEWS:
|
| + viewsToAdjust = [subviewsToBeAdjustedForRTL_ allObjects];
|
| + adjustAutoresizingMask = NO;
|
| + break;
|
| + }
|
| + if (![viewsToAdjust count])
|
| + return;
|
| +
|
| + CGFloat frameWidth = self.frame.size.width;
|
| + for (UIView* subview in viewsToAdjust) {
|
| + CGRect subFrame = subview.frame;
|
| + subFrame.origin.x = frameWidth - subFrame.origin.x - subFrame.size.width;
|
| + subview.frame = subFrame;
|
| + if (adjustAutoresizingMask) {
|
| + UIViewAutoresizing mirroredAutoresizingMask =
|
| + [BidiContainerView mirrorAutoresizingMask:[subview autoresizingMask]];
|
| + [subview setAutoresizingMask:mirroredAutoresizingMask];
|
| + }
|
| + }
|
| + [subviewsToBeAdjustedForRTL_ removeAllObjects];
|
| +}
|
| +
|
| +- (void)setSubviewNeedsAdjustmentForRTL:(UIView*)subview {
|
| + DCHECK([self.subviews containsObject:subview]);
|
| + if (!base::i18n::IsRTL())
|
| + return;
|
| + if (!subviewsToBeAdjustedForRTL_)
|
| + subviewsToBeAdjustedForRTL_.reset([[NSMutableSet alloc] init]);
|
| + [subviewsToBeAdjustedForRTL_ addObject:subview];
|
| +}
|
| +
|
| +@end
|
|
|