package ilarkesto.gwt.client.animation; import com.google.gwt.user.client.ui.Widget; public class AppearAnimation extends AObservableAnimation { private Widget widget; private int height; private double delayFactor = 1; public AppearAnimation(Integer height, Widget widget, double delayFactor) { this.height = height == null ? 20 : height; this.widget = widget; this.delayFactor = delayFactor; widget.getElement().getStyle().setProperty("visible", "false"); widget.getElement().getStyle().setProperty("height", "0px"); widget.getElement().getStyle().setProperty("marginTop", "0px"); widget.getElement().getStyle().setProperty("marginBottom", "0px"); } @Override protected void onStart() { widget.getElement().getStyle().setProperty("overflow", "hidden"); widget.getElement().getStyle().setProperty("visible", "true"); } @Override protected void onComplete() { widget.getElement().getStyle().setProperty("height", "auto"); widget.getElement().getStyle().setProperty("overflow", "auto"); fireCompletionEvent(); } @Override protected void onUpdate(double progress) { progress *= this.delayFactor; progress -= (this.delayFactor - 1); if (progress <= 0) { progress = 0; } widget.getElement().getStyle().setProperty("height", (int) (progress * this.height) + "px"); } @Override public void run(int duration) { super.run((int) (duration * this.delayFactor)); } }