/*******************************************************************************
* Copyright 2012-present Pixate, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.pixate.freestyle.styling.infos;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class PXAnimationInfo {
public enum PXAnimationTimingFunction {
UNDEFINED(null),
EASE("ease"), // ease (default)
LINEAR("linear"), // linear
EASE_IN("ease-in"), // ease-in
EASE_OUT("ease-out"), // ease-out
EASE_IN_OUT("ease-in-out"), // ease-in-out
STEP_START("step-start"), // step-start
STEP_END("step-end"); // step-end
// steps(<integer>[, [ start | end ] ]?)
// cubic-bezier(<number>, <number>, <number>, <number>)
private final String cssValue;
private static final Map<String, PXAnimationTimingFunction> cssValueToEnum;
static {
cssValueToEnum = new HashMap<String, PXAnimationTimingFunction>(4);
for (PXAnimationTimingFunction value : PXAnimationTimingFunction.values()) {
if (value.cssValue != null) {
cssValueToEnum.put(value.cssValue, value);
}
}
}
private PXAnimationTimingFunction(String cssValue) {
this.cssValue = cssValue;
}
public static PXAnimationTimingFunction ofCssValue(String cssValue) {
return cssValueToEnum.get(cssValue);
}
public static Set<String> getCssValueSet() {
return cssValueToEnum.keySet();
}
}
public enum PXAnimationDirection {
UNDEFINED(null),
NORMAL("normal"), // normal (default)
REVERSE("reverse"), // reverse
ALTERNATE("alternate"), // alternate
ALTERNATE_REVERSE("alternate-reverse"); // alternate-reverse
private final String cssValue;
private static final Map<String, PXAnimationDirection> cssValueToEnum;
static {
cssValueToEnum = new HashMap<String, PXAnimationDirection>(4);
for (PXAnimationDirection value : PXAnimationDirection.values()) {
if (value.cssValue != null) {
cssValueToEnum.put(value.cssValue, value);
}
}
}
private PXAnimationDirection(String cssValue) {
this.cssValue = cssValue;
}
public static PXAnimationDirection ofCssValue(String cssValue) {
return cssValueToEnum.get(cssValue);
}
public static Set<String> getCssValueSet() {
return cssValueToEnum.keySet();
}
}
public enum PXAnimationPlayState {
UNDEFINED(null),
RUNNING("running"), // running (default)
PAUSED("paused");
private final String cssValue;
private static final Map<String, PXAnimationPlayState> cssValueToEnum;
static {
cssValueToEnum = new HashMap<String, PXAnimationPlayState>(2);
for (PXAnimationPlayState value : PXAnimationPlayState.values()) {
if (value.cssValue != null) {
cssValueToEnum.put(value.cssValue, value);
}
}
}
private PXAnimationPlayState(String cssValue) {
this.cssValue = cssValue;
}
public static PXAnimationPlayState ofCssValue(String cssValue) {
return cssValueToEnum.get(cssValue);
}
public static Set<String> getCssValueSet() {
return cssValueToEnum.keySet();
}
}
public enum PXAnimationFillMode {
UNDEFINED(null),
NONE("none"), // none [default]
FORWARDS("forwards"), // forwards
BACKWARDS("backwords"), // backwards
BOTH("both");
private final String cssValue;
private static final Map<String, PXAnimationFillMode> cssValueToEnum;
static {
cssValueToEnum = new HashMap<String, PXAnimationFillMode>(4);
for (PXAnimationFillMode value : PXAnimationFillMode.values()) {
if (value.cssValue != null) {
cssValueToEnum.put(value.cssValue, value);
}
}
}
private PXAnimationFillMode(String cssValue) {
this.cssValue = cssValue;
}
public static PXAnimationFillMode ofCssValue(String cssValue) {
return cssValueToEnum.get(cssValue);
}
public static Set<String> getCssValueSet() {
return cssValueToEnum.keySet();
}
}
public String animationName;
public float animationDuration;
public PXAnimationTimingFunction animationTimingFunction;
public int animationIterationCount;
public PXAnimationDirection animationDirection;
public PXAnimationPlayState animationPlayState;
public float animationDelay;
public PXAnimationFillMode animationFillMode;
public PXAnimationInfo() {
this(false);
}
public PXAnimationInfo(boolean withCSSDefaults) {
if (withCSSDefaults) {
animationName = null;
animationDuration = animationDelay = 0f;
animationTimingFunction = PXAnimationTimingFunction.EASE;
animationIterationCount = 0;
animationDirection = PXAnimationDirection.NORMAL;
animationPlayState = PXAnimationPlayState.RUNNING;
animationFillMode = PXAnimationFillMode.NONE;
} else {
animationName = null;
animationDuration = animationDelay = Float.MAX_VALUE;
animationTimingFunction = PXAnimationTimingFunction.UNDEFINED;
animationIterationCount = Integer.MAX_VALUE;
animationDirection = PXAnimationDirection.UNDEFINED;
animationPlayState = PXAnimationPlayState.UNDEFINED;
animationFillMode = PXAnimationFillMode.UNDEFINED;
}
}
public boolean isValid() {
// @formatter:off
return animationDuration != Float.MAX_VALUE
&& animationTimingFunction != PXAnimationTimingFunction.UNDEFINED
&& animationIterationCount != Integer.MAX_VALUE
&& animationDirection != PXAnimationDirection.UNDEFINED
&& animationPlayState != PXAnimationPlayState.UNDEFINED
&& animationDelay != Float.MAX_VALUE
&& animationFillMode != PXAnimationFillMode.UNDEFINED;
// @formatter:on
}
public void setUndefinedProperties(PXAnimationInfo source) {
// Skip animationName
if (animationDuration == Float.MAX_VALUE) {
animationDuration = source.animationDuration;
}
if (animationTimingFunction == null || animationTimingFunction == PXAnimationTimingFunction.UNDEFINED) {
animationTimingFunction = source.animationTimingFunction;
}
if (animationIterationCount == Integer.MAX_VALUE) {
animationIterationCount = source.animationIterationCount;
}
if (animationDirection == null || animationDirection == PXAnimationDirection.UNDEFINED) {
animationDirection = source.animationDirection;
}
if (animationPlayState == null || animationPlayState == PXAnimationPlayState.UNDEFINED) {
animationPlayState = source.animationPlayState;
}
if (animationDelay == Float.MAX_VALUE) {
animationDelay = source.animationDelay;
}
if (animationFillMode == null || animationFillMode == PXAnimationFillMode.UNDEFINED) {
animationFillMode = source.animationFillMode;
}
}
}