All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalafx.animation.AnimationIncludes.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2011-2014, ScalaFX Project
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the ScalaFX Project nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE SCALAFX PROJECT OR ITS CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package scalafx.animation

import javafx.{animation => jfxa}

import scala.language.implicitConversions
import scalafx.animation.Animation.Status
import scalafx.animation.PathTransition.OrientationType
import scalafx.util.Duration

object AnimationIncludes extends AnimationIncludes

/**
 * Contains implicit methods to convert classes from
 * [[http://docs.oracle.com/javase/8/javafx/api/javafx/animation/package-summary.html `javafx.animation`]] classes to their
 * respective ScalaFX versions.
 *
 * @define INTERP [[http://docs.oracle.com/javase/8/javafx/api/javafx/animation/Interpolatable.html `Interpolatable`]]
 * @define INTERPM `interpolate` method
 * @define GENERATE Generates a ScalaFX
 * @define FROM from its JavaFX counterparty.
 */
trait AnimationIncludes {

  /**
   *
   * @param time Duration time
   * @param v Function which returns a [[scalafx.animation.KeyValue]] [[scala.collection.immutable.Set]]
   * @return new KeyFrame
   */
  def at(time: Duration)(v: => Set[KeyValue[_, _ <: Object]]) = KeyFrame(time, values = v)

  /**
   * Wraps a [[scalafx.animation.KeyValue]] in a `Set`.
   *
   * @param kv `KeyValue` to be injected.
   * @return `Set` wrapping the `KeyValue`
   */
  implicit def wrapKeyValueInSet[T, J <: Object](kv: KeyValue[T, J]): Set[KeyValue[_, _ <: Object]] = Set[KeyValue[_, _ <: Object]](kv)

  /**
   * Wraps a [[scalafx.animation.Tweenable]] in a `Set`.
   *
   * @param t `Tweenable` to be injected.
   * @return `Set` wrapping the `Tweenable`
   */
  implicit def wrapTweenableInSet[T, J <: Object](t: Tweenable[T, J]): Set[KeyValue[_, _ <: Object]] = Set[KeyValue[_, _ <: Object]](t.linear)

  /**
   * Converts a `Set` of [[scalafx.animation.Tweenable]]s in a `Set` of [[scalafx.animation.KeyValue]]s.
   *
   * @param ts `Set` of [[scalafx.animation.Tweenable]]s
   * @return `Set` of [[scalafx.animation.KeyValue]]s.
   */
  implicit def tweenableSet2KeyValueSet(ts: Set[Tweenable[_, _ <: Object]]): Set[(KeyValue[_, _ <: Object])] = ts.map(_.linear)

  /**
   * Wraps a [[scalafx.animation.KeyFrame]] in a `Seq`.
   *
   * @param kf `KeyFrame` to be wrapped.
   * @return `Seq` wrapping the `KeyFrame`.
   */
  implicit def wrapKeyFrameInSeq[T <: KeyFrame](kf: T): Seq[T] = Seq[T](kf)

  /**
   * Converts a $INTERP to a [[scala.Function2]].
   *
   * @tparam T type of function
   * @param i $INTERP instance
   * @return A [[scala.Function2]] that receives a instance of T and a Double (between 0.0 and 1.0) and returns a T Instance
   *         according $INTERPM
   */
  implicit def jfxInterpolatable2sfxFunction2[T](i: jfxa.Interpolatable[T]): ((T, Double) => T) =
    (endValue: T, t: Double) => i.interpolate(endValue, t)

  /**
   * Converts a [[scala.Function2]] to a $INTERP Implementation.
   *
   * @tparam T Type of Function
   * @param f Function that receives a instance of T and a Double (between 0.0 and 1.0) and returns a T Instance.
   * @return A new instance of $INTERP which $INTERPM calls `f` function.
   */
  implicit def sfxFunction2jfxInterpolatable[T](f: ((T, Double) => T)): jfxa.Interpolatable[T] = new jfxa.Interpolatable[T] {
    def interpolate(endValue: T, t: Double): T = f(endValue, t)
  }

  /**
   * $GENERATE `Animation` $FROM
   */
  implicit def jfxAnimation2sfx(v: jfxa.Animation): Animation = if (v != null) new Animation(v) {} else null

  /**
   * $GENERATE `Animation.Status` $FROM
   */
  implicit def jfxAnimationStatus2sfx(v: jfxa.Animation.Status): Status = Animation.Status.jfxEnum2sfx(v)

  /**
   * $GENERATE `AnimationTimer` $FROM
   */
  implicit def jfxAnimationTimer2sfx(at: jfxa.AnimationTimer): AnimationTimer = if (at != null) new AnimationTimer(at) {} else null

  /**
   * $GENERATE `FadeTransition` $FROM
   */
  implicit def jfxFadeTransition2sfx(v: jfxa.FadeTransition): FadeTransition = if (v != null) new FadeTransition(v) else null

  /**
   * $GENERATE `FillTransition` $FROM
   */
  implicit def jfxFillTransition2sfx(v: jfxa.FillTransition): FillTransition = if (v != null) new FillTransition(v) else null

  /**
   * $GENERATE `KeyFrame` $FROM
   */
  implicit def jfxKeyFrame2sfx(v: jfxa.KeyFrame): KeyFrame = if (v != null) new KeyFrame(v) else null

  /**
   * $GENERATE `KeyValue` $FROM
   */
  implicit def jfxKeyValue2sfx(v: jfxa.KeyValue): KeyValue[Nothing, Nothing] = if (v != null) new KeyValue(v) else null

  /**
   * $GENERATE `ParallelTransition` $FROM
   */
  implicit def jfxParallelTransition2sfx(v: jfxa.ParallelTransition): ParallelTransition = if (v != null) new ParallelTransition(v) else null

  /**
   * $GENERATE `PathTransition` $FROM
   */
  implicit def jfxPathTransition2sfx(v: jfxa.PathTransition): PathTransition = if (v != null) new PathTransition(v) else null

  /**
   * $GENERATE `PathTransition.OrientationType` $FROM
   */
  implicit def jfxPathTransitionOrientationType2sfx(v: jfxa.PathTransition.OrientationType): OrientationType = if (v != null) new PathTransition.OrientationType(v) else null

  /**
   * $GENERATE `PauseTransition` $FROM
   */
  implicit def jfxPauseTransition2sfx(v: jfxa.PauseTransition): PauseTransition = if (v != null) new PauseTransition(v) else null

  /**
   * $GENERATE `RotateTransition` $FROM
   */
  implicit def jfxRotateTransition2sfx(v: jfxa.RotateTransition): RotateTransition = if (v != null) new RotateTransition(v) else null

  /**
   * $GENERATE `ScaleTransition` $FROM
   */
  implicit def jfxScaleTransition2sfx(v: jfxa.ScaleTransition): ScaleTransition = if (v != null) new ScaleTransition(v) else null

  /**
   * $GENERATE `SequentialTransition` $FROM
   */
  implicit def jfxSequentialTransition2sfx(v: jfxa.SequentialTransition): SequentialTransition = if (v != null) new SequentialTransition(v) else null

  /**
   * $GENERATE `StrokeTransition` $FROM
   */
  implicit def jfxStrokeTransition2sfx(v: jfxa.StrokeTransition): StrokeTransition = if (v != null) new StrokeTransition(v) else null

  /**
   * $GENERATE `Timeline` $FROM
   */
  implicit def jfxTimeline2sfx(v: jfxa.Timeline): Timeline = if (v != null) new Timeline(v) else null

  /**
   * $GENERATE `Transition` $FROM
   */
  implicit def jfxTransition2sfx(v: jfxa.Transition): Transition = if (v != null) new Transition(v) {} else null

  /**
   * $GENERATE `TranslateTransition` $FROM
   */
  implicit def jfxTranslateTransition2sfx(v: jfxa.TranslateTransition): TranslateTransition = if (v != null) new TranslateTransition(v) else null
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy