Merge pull request #1514 from maicki/FixDisabledStatePropagationFinalLayoutable

[ASEnvironment] Fix disabled state propagation for final layoutable
This commit is contained in:
appleguy
2016-04-11 17:46:06 -07:00
3 changed files with 20 additions and 4 deletions

View File

@@ -81,8 +81,14 @@ static NSString * const kDefaultChildrenKey = @"kDefaultChildrenKey";
id<ASLayoutable> finalLayoutable = [child finalLayoutable];
if (finalLayoutable != child) {
// Layout options state of child needs to be copied to final layoutable, but don't override customized values.
ASEnvironmentStatePropagateUp(finalLayoutable, child.environmentState.layoutOptionsState);
if (ASEnvironmentStatePropagationEnabled()) {
ASEnvironmentStatePropagateUp(finalLayoutable, child.environmentState.layoutOptionsState);
} else {
// If state propagation is not enabled the layout options state needs to be copied manually
ASEnvironmentState finalLayoutableEnvironmentState = finalLayoutable.environmentState;
finalLayoutableEnvironmentState.layoutOptionsState = child.environmentState.layoutOptionsState;
finalLayoutable.environmentState = finalLayoutableEnvironmentState;
}
return finalLayoutable;
}
}

View File

@@ -12,7 +12,7 @@
#pragma once
enum class ASEnvironmentStatePropagation { DOWN, UP };
BOOL ASEnvironmentStatePropagationEnabled();
#pragma mark - Set and get extensible values for layout options
@@ -33,6 +33,11 @@ void ASEnvironmentPerformBlockOnObjectAndChildren(id<ASEnvironment> object, void
void ASEnvironmentPerformBlockOnObjectAndParents(id<ASEnvironment> object, void(^block)(id<ASEnvironment> object));
#pragma mark -
enum class ASEnvironmentStatePropagation { DOWN, UP };
#pragma mark - Merging
static const struct ASEnvironmentStateExtensions ASEnvironmentDefaultStateExtensions = {};

View File

@@ -17,6 +17,11 @@
#define AS_SUPPORT_PROPAGATION NO
BOOL ASEnvironmentStatePropagationEnabled()
{
return AS_SUPPORT_PROPAGATION;
}
#pragma mark - Traversing an ASEnvironment Tree
@@ -109,7 +114,7 @@ ASEnvironmentState ASEnvironmentMergeObjectAndState(ASEnvironmentState environme
// Merge object and layout options state
LOG(@"Merge object and state: %@ - ASEnvironmentLayoutOptionsState", object);
if (!AS_SUPPORT_PROPAGATION) {
if (!ASEnvironmentStatePropagationEnabled()) {
return environmentState;
}