Skip to content
This repository has been archived by the owner on Apr 3, 2020. It is now read-only.

Commit

Permalink
uikit_uitls and ui_uitls addditions.
Browse files Browse the repository at this point in the history
This CL adds some utility functions that enable operating on common
UIKit and CoreGraphics data structures using the language-direction-
independent 'leading' and 'trailing' nomenclature.

These utilities will be used for iOS9 RTL support downstream.

BUG=520568

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

Cr-Commit-Position: refs/heads/master@{#345595}
  • Loading branch information
marq authored and Commit bot committed Aug 26, 2015
1 parent c05bf03 commit f642199
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
19 changes: 18 additions & 1 deletion ios/chrome/browser/ui/rtl_geometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,19 @@ LayoutRect LayoutRectGetTrailingLayout(LayoutRect layout);
// Return the trailing extent of |layout| (its leading plus its width).
CGFloat LayoutRectGetTrailingEdge(LayoutRect layout);

// Utilities for mapping UIKit geometric structures to RTL-independent
// Utilities for mapping UIKit geometric structures to RTL-independent geometry.

// Get leading and trailing edges of |rect|, assuming layout direction
// |direction|.
CGFloat CGRectGetLeadingEdgeUsingDirection(CGRect rect,
base::i18n::TextDirection direction);
CGFloat CGRectGetTrailingEdgeUsingDirection(
CGRect rect,
base::i18n::TextDirection direction);

// As above, with |direction| == LayoutDirection().
CGFloat CGRectGetLeadingEdge(CGRect rect);
CGFloat CGRectGetTrailingEdge(CGRect rect);

// Leading/trailing autoresizing masks. 'Leading' is 'Left' under iOS <= 8 or
// in an LTR language, 'Right' otherwise; 'Trailing' is the obverse.
Expand All @@ -116,6 +128,11 @@ UIEdgeInsets UIEdgeInsetsMakeDirected(CGFloat top,
CGFloat bottom,
CGFloat trailing);

// Inverses of the above functions: return the leading/trailing inset for
// the current direction.
CGFloat UIEdgeInsetsGetLeading(UIEdgeInsets insets);
CGFloat UIEdgeInsetsGetTrailing(UIEdgeInsets insets);

// Autolayout utilities

// Returns the correct NSLayoutFormatOption for the current OS and build. This
Expand Down
30 changes: 30 additions & 0 deletions ios/chrome/browser/ui/rtl_geometry.mm
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,28 @@ CGFloat LayoutRectGetTrailingEdge(LayoutRect layout) {

#pragma mark - UIKit utilities

CGFloat CGRectGetLeadingEdgeUsingDirection(
CGRect rect,
base::i18n::TextDirection direction) {
return direction == base::i18n::RIGHT_TO_LEFT ? CGRectGetMaxX(rect)
: CGRectGetMinX(rect);
}

CGFloat CGRectGetTrailingEdgeUsingDirection(
CGRect rect,
base::i18n::TextDirection direction) {
return direction == base::i18n::RIGHT_TO_LEFT ? CGRectGetMinX(rect)
: CGRectGetMaxX(rect);
}

CGFloat CGRectGetLeadingEdge(CGRect rect) {
return CGRectGetLeadingEdgeUsingDirection(rect, LayoutDirection());
}

CGFloat CGRectGetTrailingEdge(CGRect rect) {
return CGRectGetTrailingEdgeUsingDirection(rect, LayoutDirection());
}

UIViewAutoresizing UIViewAutoresizingFlexibleLeadingMargin() {
return base::i18n::IsRTL() && base::ios::IsRunningOnIOS9OrLater()
? UIViewAutoresizingFlexibleRightMargin
Expand Down Expand Up @@ -150,6 +172,14 @@ UIEdgeInsets UIEdgeInsetsMakeDirected(CGFloat top,
LayoutDirection());
}

CGFloat UIEdgeInsetsGetLeading(UIEdgeInsets insets) {
return UseRTLLayout() ? insets.right : insets.left;
}

CGFloat UIEdgeInsetsGetTrailing(UIEdgeInsets insets) {
return UseRTLLayout() ? insets.left : insets.right;
}

#pragma mark - autolayout utilities

NSLayoutFormatOptions LayoutOptionForRTLSupport() {
Expand Down

0 comments on commit f642199

Please sign in to comment.