support custom easing