Browse Source

Fix parsing of property 'transition: all ...'. See #163.

Michael Ragazzon 5 years ago
parent
commit
d60fa316d8

+ 4 - 5
Samples/basic/animation/data/animation.rml

@@ -153,9 +153,7 @@
 		}
 		/* -- TRANSITION TESTS */
 		#transition_test {
-			/*transition: padding-left 1.6s elastic-in 1.0, background-color 1.2s quadratic-in 1.0, transform 1.3s exponential-in 1.0;*/
-			transition: padding-left background-color transform 1.6s elastic-out 0.0;
-			transform: scale(1.0);
+			transition: all 1.6s elastic-out 0.0;
 		}
 		#transition_test:hover {
 			/*transition: padding-left background-color transform 0.8s quadratic-out 1.0;*/
@@ -164,11 +162,12 @@
 		} 
 		#transition_class {
 			margin-left: 50px;
-			transition: margin-left background-color 0.5s cubic-out;
+			transition: all 0.5s cubic-out;
+			cursor: pointer;
 		}
 		#transition_class.move_me {
 			margin-left: -50px;
-			font-size: 22px;
+			background-color: #dd3;
 		}
 		
 		/* -- KEYFRAMES TESTS */

+ 16 - 4
Source/Core/PropertyParserAnimation.cpp

@@ -331,17 +331,29 @@ static bool ParseTransition(Property & property, const StringList& transition_va
 		}
 
 		// Validate the parsed transition
-		if (target_property_ids.Empty() || transition.duration <= 0.0f || transition.reverse_adjustment_factor < 0.0f || transition.reverse_adjustment_factor > 1.0f
-			|| (transition_list.all && target_property_ids.Size() != 1))
+		if ((transition_list.all && !target_property_ids.Empty())
+			|| (!transition_list.all && target_property_ids.Empty())
+			|| transition.duration <= 0.0f
+			|| transition.reverse_adjustment_factor < 0.0f
+			|| transition.reverse_adjustment_factor > 1.0f
+			)
 		{
 			return false;
 		}
 
-		for (const PropertyId id : target_property_ids)
+		if (transition_list.all)
 		{
-			transition.id = id;
+			transition.id = PropertyId::Invalid;
 			transition_list.transitions.push_back(transition);
 		}
+		else
+		{
+			for (const PropertyId id : target_property_ids)
+			{
+				transition.id = id;
+				transition_list.transitions.push_back(transition);
+			}
+		}
 	}
 
 	property.value = std::move(transition_list);