License text

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER 
 * Copyright  2008, 2010 Oracle and/or its affiliates.  All rights reserved. 
 * Use is subject to license terms.
 * 
 * This file is available and licensed under the following license:
 * 
 * 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 Oracle Corporation 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 COPYRIGHT 
 * OWNER OR 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 carousel;

import javafx.util.Math;
import javafx.scene.Cursor;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Container;

/**
 * @author Vaibhav Choudhary
 */

// these variable decide the position at the beginning
public var y = 0;
public var speed = 5;
public var radius_x = 100;
public def radius = 100;
public var xcenter = 70;
public var ycenter = 50;
public var zcenter = 100;
public var radius_y = 60;
// Used for scaling factor.
// Basically it will work like a camera at Z axis.
public var fl = 100;
public var shift = Math.PI / 2;
// placement of each image at PI/6 distance,because of 6 images.
public var image_gap = Math.PI / 3;
public var angle;
public var angle_rad = angle * Math.PI / 180;

public class Carousel extends Container {

    public var X: Number;
    public var Y: Number;
    public var Z: Number;
    public var image: Image;
    public var scale: Number;
    public var local_opacity: Number;
    public var color_top: Number = 204;
    public var color_bottom: Number = 204;
    
    
    //public override function create(): Node {
        init {
        if (__PROFILE__ == "tv") {
            xcenter = 100;
            ycenter = 170;
            zcenter = 120;
            radius_x = 500;
            radius_y = 220;
        }
        children = [ 
                ImageView {
                    x: bind X
                    y: bind Y
                    scaleX: bind scale
                    scaleY: bind scale
                    opacity: bind local_opacity
                    image:  bind image
                    cursor: Cursor.DEFAULT
                    blocksMouse: true
                }
        ]
    }
    
    public function update(i: Number,angle: Number): Void {
        Z=Math.sin(angle + i  *  image_gap + shift) * radius + zcenter ;
        if (__PROFILE__ == "tv") {
            local_opacity = fl / (fl + Z);
            scale = 3 * fl / (fl + Z);
        } else {
            local_opacity = fl / (fl + Z);
            scale = fl / (fl + Z);
        }
        X= Math.cos(angle + i  *  image_gap + shift) * radius_x + xcenter;
        Y= -Math .sin(angle + i  *  image_gap + shift) * radius_y + ycenter ;
      }
}