import javafx.ui.canvas.*; import javafx.ui.*; import java.lang.System; import javax.swing.Timer; import java.awt.event.ActionListener; import java.awt.Toolkit; import java.lang.Thread; import java.lang.Exception; import java.awt.Robot; import java.awt.Rectangle; import java.awt.Image as JavaImg; var size = Toolkit.getDefaultToolkit().getScreenSize(); operation getDesktop():JavaImg { var r = new Robot(); var s = Toolkit.getDefaultToolkit().getScreenSize(); return r.createScreenCapture(new Rectangle((Integer)0, (Integer)0, (Integer)s.width, bind (Integer)s.height)); } var image = Image {image: getDesktop()}; class RotateModel { attribute zoom: Number; attribute rotate: Number; attribute alpha: Number; attribute elapsed: Number; attribute goUp: Boolean; operation animate(); } attribute RotateModel.elapsed = bind [0..100] dur 300000 linear; attribute RotateModel.zoom = 1.0; attribute RotateModel.rotate = 0; attribute RotateModel.alpha = 1.0; attribute RotateModel.goUp = false; var rotModel = RotateModel { zoom: 1.0, rotate: 0, alpha: 1.0, goUp: false }; var transformGroup = false; trigger on RotateModel.elapsed = value { goUp = not goUp; animate(); } operation RotateModel.animate() { if (goUp) { zoom = [0.000,0.001..1.0] dur 1000 linear; rotate = [0,1..360] dur 1000 linear; alpha = [0.10,0.11..1.00] dur 1000 linear; } else { zoom = [1.000,0.999..0.0] dur 2000 linear; rotate = [360..0] dur 2000 linear; alpha = [1.00,0.99..0.10] dur 2000 linear; } } Frame { width: bind size.width height: bind size.height undecorated: true resizable: true disposeOnClose: true background: black content: Canvas { var pattern = new Pattern { content: ImageView { image: bind image } } onMouseClicked: operation (e:MouseEvent) { if (e.button == 1) { System.exit(1); } } var backgroundRect = Rect { x: 0 y: 0 width: bind size.width height: bind size.height fill: pattern } var rectObj = Rect { transform: bind [rotate(360, size.width/2, size.height/2), scale(rotModel.zoom, rotModel.zoom), rotate(rotModel.rotate, size.width/2, size.height/2)] x: 0 y: 0 width: bind size.width height: bind size.height } var arcObj = Arc { transform: bind [rotate(180, size.width/2, size.height/2), scale(rotModel.zoom, rotModel.zoom), rotate(rotModel.rotate, size.width/2, size.height/2)] x: 0 y: 0 width: bind size.width height: bind size.height startAngle: 0 length: bind rotModel.rotate closure: PIE } var circleObj = Circle { transform: bind [rotate(90, size.width/2, size.height/2), scale(rotModel.zoom, rotModel.zoom), rotate(rotModel.rotate, size.width/2, size.height/2)] cx: bind size.width/2 cy: bind size.height/2 radius: bind size.height/2 } var qCurve = QuadCurve { transform: bind [rotate(270, size.width/2, size.height/2), scale(rotModel.zoom, rotModel.zoom), rotate(rotModel.rotate, size.width/2, size.height/2)] x1: 0 y1: 0 ctrlx: bind (2 * size.width) ctrly: bind size.height/2 x2: 0 y2: bind size.height } var objectsGroup = Group { content: [rectObj, arcObj, circleObj, qCurve] } content: [Clip { shape: Add { shape1: qCurve shape2: Add { shape1: Add { shape1: arcObj shape2: rectObj } shape2: circleObj } } /*shape: Add { shape1: Add { shape1: qCurve shape2: rectObj } shape2: Add { shape1: arcObj shape2: circleObj } }*/ content: [backgroundRect, objectsGroup] }] } visible: true }