001package conexp.fx.gui.util;
002
003/*
004 * #%L
005 * Concept Explorer FX
006 * %%
007 * Copyright (C) 2010 - 2023 Francesco Kriegel
008 * %%
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as
011 * published by the Free Software Foundation, either version 3 of the
012 * License, or (at your option) any later version.
013 * 
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 * 
019 * You should have received a copy of the GNU General Public
020 * License along with this program.  If not, see
021 * <http://www.gnu.org/licenses/gpl-3.0.html>.
022 * #L%
023 */
024
025import javafx.animation.Transition;
026import javafx.beans.property.Property;
027import javafx.event.ActionEvent;
028import javafx.event.EventHandler;
029import javafx.util.Duration;
030
031public final class NumberPropertyTransition extends Transition {
032
033  private final Property<Number> property;
034  private final Number           source;
035  private final Number           target;
036
037  public NumberPropertyTransition(final Duration duration, final Property<Number> property, final Number target) {
038    super();
039    this.setCycleDuration(duration);
040    this.property = property;
041    this.source = property.getValue();
042    this.target = target;
043  }
044
045  public NumberPropertyTransition(
046      final Duration duration,
047      final Property<Number> property,
048      final Number target,
049      final EventHandler<ActionEvent> onFinished) {
050    this(duration, property, target);
051    this.setOnFinished(onFinished);
052  }
053
054  protected final void interpolate(final double frac) {
055    property.setValue(source.doubleValue() + frac * (target.doubleValue() - source.doubleValue()));
056  }
057}