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