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 stopwatch;

import javafx.scene.effect.*;
import javafx.scene.effect.light.*;
import javafx.scene.*;
import javafx.scene.text.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import javafx.scene.input.*;



public class DarkTheme extends Theme {
     var resetPressedAmount:Integer = 7;
     var startPressedAmount:Integer = 7;

    init {
        var numOfMarks = 12;
        var numOfMinorMarks = 60;
        var minutesNumOfMarks = 10;
        var minutesNumOfMinorMarks = 50;
        var tenthsNumOfMarks = 10;
        var tenthsNumOfMinorMarks = 50;
        
        frontContent = Group {
            id: "Front"
            content: [
                // MAIN DIAL
                Group {
                    translateX: 40
                    translateY: 60
                    cache: true
                    content: [
                        Circle {
                            centerX: 140
                            centerY: 140
                            radius: 140
                            fill:LinearGradient {
                                startX:0
                                startY:0
                                endX:1
                                endY:1
                                stops: [
                                    Stop {
                                        offset:0
                                        color: Color.web("#3c3c3c")
                                    },
                                    Stop {
                                        offset:1
                                        color: Color.web("#010101")
                                    }
                                ]
                            }
                        },
                        Circle {
                            centerX: 140
                            centerY: 140
                            radius: 134
                            fill:RadialGradient {
                                centerX:0.5
                                centerY:0.5
                                radius:0.5
                                stops: [
                                    Stop {
                                     offset:0
                                        color: Color.rgb(20,20,20)
                                    },
                                    Stop {
                                        offset:0.9499
                                        color: Color.rgb(20,20,20)
                                    },
                                    Stop {
                                        offset:0.95
                                        color: Color.rgb(20,20,20)
                                    },
                                    Stop {
                                        offset:0.975
                                        color: Color.rgb(20,20,20)
                                    },
                                    Stop {
                                        offset:1
                                        color: Color.rgb(84,84,84,0.0)
                                    }
                                ]
                            }
                        },
                        // Tick Marks
                        for (i in [ 1..numOfMarks ]) {
                            Rectangle {
                                x: 0-2
                                y: 108
                                width: 4
                                height: 13
                                fill: Color.web("#9fff81")
                                rotate: (360/numOfMarks)*i
                                translateX: 140
                                translateY: 140}
                        },
                        for (i in [ 1..numOfMinorMarks ]) {
                            Line {
                                startX: 0
                                startY: 120
                                endX: 0
                                endY: 114
                                stroke: Color.web("#FFFFFF")
                                rotate: (360/numOfMinorMarks)*i
                                translateX: 140
                                translateY: 140}
                        },
                        // Numbers
                        Text {
                            font:Font.font("Courier", FontWeight.BOLD, 16)
                            x: 141
                            y: 244
                            content: "30"
                            textAlignment: TextAlignment.CENTER
                            fill: Color.web("#FFFFFF")
                        },
                        Text {
                            font:Font.font("Courier", FontWeight.BOLD, 16)
                            x: 141
                            y: 47
                            content: "0"
                            textAlignment: TextAlignment.CENTER
                            fill: Color.web("#FFFFFF")
                        },
                        Text {
                            font:Font.font("Courier", FontWeight.BOLD, 16)
                            x: 38
                            y: 144
                            content: "45"
                            //verticalAlignment: VerticalAlignment.CENTER
                            textOrigin: TextOrigin.TOP
                            fill: Color.web("#FFFFFF")
                        },
                        Text {
                            font:Font.font("Courier", FontWeight.BOLD, 16)
                            x: 225
                            y: 145
                            content: "15"
                            //verticalAlignment: VerticalAlignment.CENTER
                            textOrigin: TextOrigin.TOP
                            fill: Color.web("#FFFFFF")
                        },
                        // Tenths Dial
                        Group {
                            content: [
                                Text {
                                    font:Font {
                                        name: "Arial"
                                        size: 9
                                    }
                                    x: 0
                                    y: 10
                                    content: "10ths"
                                    textAlignment: TextAlignment.CENTER
                                    textOrigin: TextOrigin.TOP
                                    fill: Color.web("#FFFFFF")
                                },
                                // Tick Marks
                                for (i in [ 1..tenthsNumOfMarks ]) {
                                    Rectangle {
                                        x: -1
                                        y: 24
                                        width: 2
                                        height: 6
                                        fill: Color.web("#9fff81")
                                        rotate: (360/tenthsNumOfMarks)*i}
                                },
                                for (i in [ 1..tenthsNumOfMinorMarks ]) {
                                    Line {
                                        startX: 0
                                        startY: 30
                                        endX: 0
                                        endY: 28
                                        stroke: Color.web("#FFFFFF")
                                        rotate: (360/tenthsNumOfMinorMarks)*i}
                                },
                            ]
                            translateX: 180
                            translateY: 100
                        },
                        // Minutes Dial
                        Group {
                            content: [
                                Text {
                                    font:Font{
                                        name: "Arial"
                                        size: 9
                                    }
                                    x: 1
                                    y: 10
                                    content: "Minutes"
                                    textAlignment: TextAlignment.CENTER
                                    textOrigin: TextOrigin.TOP
                                    fill: Color.web("#FFFFFF")
                                },
                                // Tick Marks
                                for (i in [ 1..minutesNumOfMarks ]) {
                                    Rectangle {
                                        x: -1
                                        y: 24
                                        width: 2
                                        height: 6
                                        fill: Color.web("#9fff81")
                                        rotate: (360/minutesNumOfMarks)*i}
                                },
                                for (i in [ 1..minutesNumOfMinorMarks ]) {
                                    Line {
                                        startX: 0
                                        startY: 30
                                        endX: 0
                                        endY: 28
                                        stroke: Color.web("#FFFFFF")
                                        rotate: (360/minutesNumOfMinorMarks)*i}
                                },
                            ]
                            translateX: 100
                            translateY: 100
                        },
                        // Digits Cells
                        Group {
                            effect: Lighting {}
                            content: [
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FFFFFF")
                                         },
                                    ]
                                    translateX: 91
                                    translateY: 210
                                },
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FFFFFF")
                                       },
                                    ]
                                    translateX: 107
                                    translateY: 210
                                },
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FFFFFF")
                                        },
                                    ]
                                    translateX: 130
                                    translateY: 210
                                },
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FFFFFF")
                                        },
                                    ]
                                    translateX: 146
                                    translateY: 210
                                },
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FF0000")
                                        },
                                    ]
                                    translateX: 168
                                    translateY: 210
                                },
                                Group {
                                    content: [
                                        Rectangle {
                                            x: -7
                                            y: -9
                                            width: 15
                                            height: 19
                                            fill: Color.web("#000000")
                                        },
                                        Rectangle {
                                            x: -5
                                            y: -7
                                            width: 11
                                            height: 15
                                            fill: Color.web("#FF0000")
                                        },
                                    ]
                                    translateX: 184
                                    translateY: 210
                                },
                            ]
                        }
                    ]
                },
                Group {
                    translateX: 40
                    translateY: 60
                    content: [
                        // Digits
                        Group {
                            content: [
                                Text {
                                    font:Font.font("Courier", FontWeight.BOLD, 16)
                                    x: -4
                                    y: 6
                                    content: bind model.timeString.substring(0,1)
                                    fill: Color.web("#000000")
                                },
                            ]
                            translateX: 91
                            translateY: 210
                    },
                    Group {
                        content: [
                            Text {
                                font:Font.font("Courier", FontWeight.BOLD, 16)
                                x: -4
                                y: 6
                                content: bind model.timeString.substring(1,2)
                                fill: Color.web("#000000")
                            },
                        ]
                        translateX: 107
                        translateY: 210
                    },
                    Text {
                        font:Font.font("Courier", FontWeight.REGULAR, 16)
                        x: 114
                        y: 214
                        content: ":"
                        fill: Color.web("#FFFFFF")
                    },
                    Group {
                        content: [
                            Text {
                                font:Font.font("Courier", FontWeight.BOLD, 16)
                                x: -4
                                y: 6
                                content: bind model.timeString.substring(3,4)
                                fill: Color.web("#000000")},]
                        translateX: 130
                        translateY: 210
                    },
                    Group {
                        content: [
                            Text {
                                font:Font.font("Courier", FontWeight.BOLD, 16)
                                x: -4
                                y: 6
                                content: bind model.timeString.substring(4,5)
                                fill: Color.web("#000000")},]
                        translateX: 146
                        translateY: 210
                    },
                    Text {
                        font:Font{
                            name: "Courier"
                            size: 16
                        }
                        x: 153
                        y: 214
                        content: "."
                        fill: Color.web("#FFFFFF")
                    },
                    Group {
                        content: [
                            Text {
                                font:Font.font("Courier", FontWeight.BOLD, 16)
                                x: -4
                                y: 6
                                content: bind model.timeString.substring(6,7)
                                fill: Color.web("#FFFFFF")
                            },
                        ]
                        translateX: 168
                        translateY: 210
                    },
                    Group {
                        content: [
                            Text {
                                font:Font.font("Courier", FontWeight.BOLD, 16)
                                x: -4
                                y: 6
                                content: bind model.timeString.substring(7,8)
                                fill: Color.web("#FFFFFF")},]
                        translateX: 184
                        translateY: 210
                    },
                    // Tenths Hand
                    Group {
                        content: [
                            Group { content: [
                                    Circle {
                                        centerX: 0
                                        centerY: 0
                                        radius: 3
                                        fill: Color.web("#FFFFFF")
                                        },
                                    Rectangle {
                                            x: -1
                                            y: -8
                                            width: 2
                                            height: 35
                                            fill: Color.web("#FFFFFF")
                                            rotate: bind model.tenthsHandAngle},
                                ]
                            }
                        ]
                        translateX: 180
                        translateY: 100
                    },
                    // Minutes Hand
                    Group {
                        content: [
                            Group { content: [
                                    Circle {
                                        centerX: 0
                                        centerY: 0
                                        radius: 3
                                        fill: Color.web("#FFFFFF")},
                                    Rectangle {
                                        x: -1
                                        y: -8
                                        width: 2
                                        height: 35
                                        fill: Color.web("#FFFFFF")
                                        rotate: bind model.minutesHandAngle},
                                ]
                            }
                        ]
                        translateX: 100
                        translateY: 100
                    },
                    // Hand
                    Group {
                        content: [
                            Group {
                                content: [
                                    Circle {
                                        centerX: 140
                                        centerY: 140
                                        radius: 8
                                        fill: Color.web("#FF0000")},
                                    Rectangle {
                                        x: -1.5
                                        y: -20
                                        width: 3
                                        height: 120
                                        fill: Color.web("#FF0000")
                                        rotate: bind model.handAngle
                                        translateX: 140
                                        translateY: 140
                                        },
                                    Rectangle {
                                        x: -1.5
                                        y: -40
                                        width: 3
                                        height: 20
                                        fill: Color.web("#FFFFFF")
                                        rotate: bind model.handAngle
                                        translateX: 140
                                        translateY: 140
                                    }
                                ]
                                effect:Lighting{
                                    light: DistantLight {
                                        azimuth: 225
                                    }
                                }
                            }
                        ]
                        effect: DropShadow {
                            offsetX: 4
                            offsetY: 4
                            radius: 6
                            color: Color.web("#000000")
                        }
                    },
                    // Highlight
                    Group {
                        cache: true
                        content: [
                            Arc {
                                centerX: 140
                                centerY: 140
                                radiusX: 120
                                radiusY: 120
                                type: ArcType.CHORD
                                startAngle: 200
                                length: -130
                                fill: Color.WHITE
                            },
                            Arc {
                                centerX: 140
                                centerY: 140
                                radiusX:120
                                radiusY: 120
                                type: ArcType.CHORD
                                startAngle: 190
                                length: -122
                                fill: Color.WHITE
                            },
                        ]
                        effect: GaussianBlur{ radius: 2 }
                        opacity: 0.05
                    },
                ]},
                // Reset Button
                Group {
                    content: [
                        Rectangle {
                            x: -7
                            y: bind -(150+resetPressedAmount)
                            width: 14
                            height: 7
                            fill:LinearGradient {
                            startX: 0
                            startY: 0
                            endX: 1
                            endY: 0
                                stops: [
                                    Stop {
                                      offset:0
                                        color: Color.web("#AA0000")
                                },
                                    Stop {
                                        offset:0.5
                                        color: Color.web("#660000")
                                },
                                    Stop {
                                        offset:1
                                        color: Color.web("#AA0000")
                                    }
                                ]
                            }
                        },
                        Rectangle {
                            x: -12
                            y: -150
                            width: 24
                            height: 14
                            fill:LinearGradient {
                                startX: 0
                                startY: 0
                                endX: 1
                                endY: 0
                                stops: [
                                    Stop {
                                        offset:0
                                        color: Color.web("#DDDDDD")
                                    },
                                    Stop {
                                        offset:0.5
                                        color: Color.web("#AAAAAA")
                                    },
                                    Stop {
                                        offset:1
                                        color: Color.web("#DDDDDD")
                                    }
                                ]
                            }
                        },
                        Rectangle {
                            x: -14
                            y: bind -(155 + resetPressedAmount)
                            width: 28
                            height: 5
                            fill:LinearGradient {
                                startX: 0
                                startY: 0
                                endX: 1
                                endY: 0
                                stops: [
                                    Stop {
                                        offset:0
                                        color: Color.web("#FF0000")
                                    },
                                    Stop {
                                        offset:0.5
                                        color: Color.web("#AA0000")
                                    },
                                    Stop {
                                        offset:1
                                        color: Color.web("#FF0000")
                                    }
                                ]
                            }
                        },
                    ]
                    rotate: -360/12
                    translateX: 180
                    translateY: 200
                    onMousePressed:function(e:MouseEvent) {
                        resetPressedAmount=0;
                    }
                    onMouseReleased: function(e:MouseEvent) {
                        resetPressedAmount=7;
                    }
                    onMouseClicked: function(e:MouseEvent) {
                        model.reset();
                    }
                    cursor: Cursor.HAND
                },
                // Start/Stop Button
                Group {
                    content: [
                        Rectangle {
                            x: -7
                            y: bind -(150 + startPressedAmount)
                            width: 14
                            height: 7
                            fill:LinearGradient {
                                startX: 0
                                startY: 0
                                endX: 1
                                endY: 0
                                stops: [
                                    Stop {
                                        offset: 0
                                        color: Color.web("#8cc700")
                                    },
                                    Stop {
                                        offset: 0.5
                                        color: Color.web("#71a000")
                                    },
                                    Stop {
                                        offset: 1
                                        color: Color.web("#8cc700")
                                    }
                                ]
                            }
                        },
                        Rectangle {
                                x: -12
                                y: -150
                                width: 24
                                height: 14
                            fill:LinearGradient {
                            startX: 0
                            startY: 0
                            endX: 1
                            endY: 0
                                stops: [
                                    Stop {
                                        offset: 0
                                        color: Color.web("#DDDDDD")
                                    },
                                    Stop {
                                        offset: 0.5
                                        color: Color.web("#AAAAAA")
                                    },
                                    Stop {
                                        offset: 1
                                        color: Color.web("#DDDDDD")
                                    }
                                ]
                            }
                        },
                        Rectangle {
                            x: -14
                            y: bind -(155 + startPressedAmount)
                            width: 28
                            height: 5
                            fill:LinearGradient {
                                startX: 0
                                startY: 0
                                endX: 1
                                endY: 0
                                stops: [
                                    Stop {
                                        offset: 0
                                        color: Color.web("#b4FF00")
                                        },
                                    Stop {
                                    offset: 0.5
                                    color: Color.web("#8cc700")
                                    },
                                    Stop {
                                        offset: 1
                                        color: Color.web("#b4FF00")
                                    }
                                ]
                            }
                        },
                    ]
                    rotate: 360/12
                    translateX: 180
                    translateY: 200
                    onMousePressed:function(e:MouseEvent) {
                        startPressedAmount=0;
                    }
                    onMouseReleased: function(e:MouseEvent) {
                        startPressedAmount=7;
                    }
                    onMouseClicked: function(e:MouseEvent) {
                        model.startStop();
                    }
                    cursor: Cursor.HAND
                },
            ]
        };
    }
}