/* * Copyright 2014 cruxframework.org. * * 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 org.cruxframework.crux.core.client.css.transition; import org.cruxframework.crux.core.client.css.transition.Transition.Callback; import org.cruxframework.crux.core.client.css.transition.Transition.TransitionHandler; import com.google.gwt.dom.client.Element; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Widget; /** * @author Thiago da Rosa de Bustamante * */ public abstract class BaseTransitionHandler implements TransitionHandler { public void clearFadeTransitions(Widget widget) { if(widget == null) { return; } widget.getElement().getStyle().setOpacity(1); } public void fade(Widget outWidget, Widget inWidget, int duration, final Callback callback) { if(inWidget == null || outWidget == null) { return; } final Element outElement = outWidget.getElement(); final Element inElement = inWidget.getElement(); addCallbackHandler(outElement, duration, new Callback() { @Override public void onTransitionCompleted() { clearTransitionProperties(outElement); } }); addCallbackHandler(inElement, duration, new Callback() { @Override public void onTransitionCompleted() { clearTransitionProperties(inElement); if (callback != null) { callback.onTransitionCompleted(); } } }); fadeOut(outElement, (duration/2.0)); fadeIn(inElement, (duration/2.0), (duration/2.0)); } public void fadeIn(Widget inWidget, int duration, final Callback callback) { if(inWidget == null) { return; } final Element inElement = inWidget.getElement(); addCallbackHandler(inElement, duration, new Callback() { @Override public void onTransitionCompleted() { clearTransitionProperties(inElement); if (callback != null) { callback.onTransitionCompleted(); } } }); fadeIn(inElement, duration, 0); } public void fadeOut(Widget outWidget, int duration, final Callback callback) { if(outWidget == null) { return; } final Element outElement = outWidget.getElement(); addCallbackHandler(outElement, duration, new Callback() { @Override public void onTransitionCompleted() { clearTransitionProperties(outElement); if (callback != null) { callback.onTransitionCompleted(); } } }); fadeOut(outElement, duration); } public void hideBackface(Widget widget) { if(widget == null) { return; } widget.getElement().getStyle().setProperty("webkitBackfaceVisibility", "hidden"); } public void resetTransition(Widget widget) { if(widget == null) { return; } resetTransition(widget.getElement()); } public void setHeight(Widget widget, int height, int duration, Callback callback) { if(widget == null) { return; } setHeight(widget, height+"px", duration, callback); } public void setHeight(Widget widget, String height, int duration, final Callback callback) { if(widget == null) { return; } final Element element = widget.getElement(); addCallbackHandler(element, duration, new Callback() { @Override public void onTransitionCompleted() { clearTransitionProperties(element); if (callback != null) { callback.onTransitionCompleted(); } } }); setHeight(element, height, duration); } public void translateX(Widget widget, int diff, Callback callback) { if(widget == null) { return; } Element element = widget.getElement(); if (callback != null) { addCallbackHandler(element, 0, callback); } translateX(element, diff); } public void translateX(Widget widget, int diff, int duration, Callback callback) { if(widget == null) { return; } Element element = widget.getElement(); if (callback != null) { addCallbackHandler(element, duration, callback); } translateX(element, diff, duration); } public void translateY(Widget widget, int diff, Callback callback) { if(widget == null) { return; } Element element = widget.getElement(); if (callback != null) { addCallbackHandler(element, 0, callback); } translateY(element, diff); } public void translateY(Widget widget, int diff, int duration, Callback callback) { if(widget == null) { return; } Element element = widget.getElement(); if (callback != null) { addCallbackHandler(element, duration, callback); } translateY(element, diff, duration); } protected void addCallbackHandler(Element element, int duration, final Callback callback) { if (callback != null) { if (duration <= 0) { callback.onTransitionCompleted(); } else { new Timer() { @Override public void run() { callback.onTransitionCompleted(); } }.schedule(duration + 10); } } } protected abstract void clearTransitionProperties(Element element); protected abstract void fadeIn(Element inElement, double d, double e); protected abstract void fadeOut(Element outElement, double d); protected abstract void resetTransition(Element element); protected abstract void setHeight(Element element, String height, int duration); protected abstract void translateX(Element element, int diff); protected abstract void translateX(Element element, int diff, int duration); protected abstract void translateY(Element element, int diff); protected abstract void translateY(Element element, int diff, int duration); }