[macruby-changes] [489] MacRuby/trunk/sample-macruby/Scripts/jumpy.rb
source_changes at macosforge.org
source_changes at macosforge.org
Tue Aug 26 18:01:51 PDT 2008
Revision: 489
http://trac.macosforge.org/projects/ruby/changeset/489
Author: lsansonetti at apple.com
Date: 2008-08-26 18:01:51 -0700 (Tue, 26 Aug 2008)
Log Message:
-----------
adding jumpy.rb sample
Added Paths:
-----------
MacRuby/trunk/sample-macruby/Scripts/jumpy.rb
Added: MacRuby/trunk/sample-macruby/Scripts/jumpy.rb
===================================================================
--- MacRuby/trunk/sample-macruby/Scripts/jumpy.rb (rev 0)
+++ MacRuby/trunk/sample-macruby/Scripts/jumpy.rb 2008-08-27 01:01:51 UTC (rev 489)
@@ -0,0 +1,110 @@
+# This script is based on Jumpy.app, a CoreAnimation sample written by Lucas Newman,
+# of Delicious Monster Software.
+
+framework 'Cocoa'
+framework 'QuartzCore'
+framework 'ApplicationServices'
+
+class JumpyController
+
+ ANIMATION_DURATION = 4.0
+
+ def applicationDidFinishLaunching(notification)
+ # create a window the size of the screen and set it to solid black
+ displayBounds = NSScreen.mainScreen.frame
+ @mainWindow = NSWindow.alloc.initWithContentRect displayBounds, styleMask:NSBorderlessWindowMask, backing:NSBackingStoreRetained, defer:false, screen:NSScreen.mainScreen
+ contentView = @mainWindow.contentView
+ contentView.wantsLayer = true
+ #contentView.layer.backgroundColor = CGColorCreateGenericGray(0.0, 1.0)
+
+ # create a snapshot of the screen
+ image = CGWindowListCreateImage(CGRectInfinite, KCGWindowListOptionOnScreenOnly, KCGNullWindowID, KCGWindowImageDefault)
+
+ # create a layer for the current screen
+ screenLayer = CALayer.layer
+ screenLayer.frame = [0, 0, CGImageGetWidth(image), CGImageGetHeight(image)]
+ screenLayer.contents = image
+
+ # add a container which will hold our screen and reflection layers
+ containerLayer = CALayer.layer
+ containerLayer.frame = screenLayer.frame
+ containerLayer.addSublayer screenLayer
+
+ # create the reflection layer
+ reflectionLayer = CALayer.layer
+ reflectionLayer.contents = screenLayer.contents # share the contents image with the screen layer
+ reflectionLayer.opacity = 0.4
+ reflectionLayer.frame = CGRectOffset(screenLayer.frame, 0.5, -NSHeight(displayBounds) + 0.5)
+ reflectionLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0) # flip the y-axis
+ reflectionLayer.sublayerTransform = reflectionLayer.transform
+ containerLayer.addSublayer reflectionLayer
+
+ # create a shadow layer which lies on top of the reflection layer
+ shadowLayer = CALayer.layer
+ shadowLayer.frame = reflectionLayer.bounds
+ shadowLayer.delegate = self
+ shadowLayer.setNeedsDisplay # this invokes -drawLayer:inContext: below, since we are the delegate
+ reflectionLayer.addSublayer shadowLayer
+
+ # add the container layer to the window's content view's layer
+ contentView.layer.addSublayer containerLayer
+
+ # place the window on top of everything
+ @mainWindow.level = CGShieldingWindowLevel()
+ @mainWindow.makeKeyAndOrderFront nil
+
+ # animate the screen away
+ CATransaction.begin
+ CATransaction.setValue ANIMATION_DURATION, forKey:KCATransactionAnimationDuration
+
+ # scale it down
+ shrinkAnimation = CABasicAnimation.animationWithKeyPath "transform.scale"
+ shrinkAnimation.timingFunction = CAMediaTimingFunction.functionWithName KCAMediaTimingFunctionEaseIn
+ shrinkAnimation.toValue = 0.0
+ containerLayer.addAnimation shrinkAnimation, forKey:"shrinkAnimation"
+
+ # fade it out
+ fadeAnimation = CABasicAnimation.animationWithKeyPath "opacity"
+ fadeAnimation.toValue = 0.0
+ fadeAnimation.timingFunction = CAMediaTimingFunction.functionWithName KCAMediaTimingFunctionEaseIn
+ containerLayer.addAnimation fadeAnimation, forKey:"fadeAnimation"
+
+ # make it jump a couple of times
+ positionAnimation = CAKeyframeAnimation.animationWithKeyPath "position"
+
+ positionPath = CGPathCreateMutable()
+ CGPathMoveToPoint(positionPath, nil, containerLayer.position.x, containerLayer.position.y)
+ CGPathAddQuadCurveToPoint(positionPath, nil, containerLayer.position.x, containerLayer.position.y, containerLayer.position.x, containerLayer.position.y)
+ CGPathAddQuadCurveToPoint(positionPath, nil, containerLayer.position.x, containerLayer.position.y * 2, containerLayer.position.x, containerLayer.position.y)
+ CGPathAddQuadCurveToPoint(positionPath, nil, containerLayer.position.x, containerLayer.position.y * 3, containerLayer.position.x, containerLayer.position.y)
+
+ positionAnimation.path = positionPath
+ positionAnimation.timingFunction = CAMediaTimingFunction.functionWithName KCAMediaTimingFunctionEaseIn
+ containerLayer.addAnimation positionAnimation, forKey:"positionAnimation"
+
+ CATransaction.commit
+
+ # quit after animating
+ NSApp.performSelector :"terminate:", withObject:nil, afterDelay:ANIMATION_DURATION
+ end
+
+ def applicationWillTerminate(notification)
+ @mainWindow.orderOut self
+ end
+
+ def drawLayer(layer, inContext:context)
+ NSGraphicsContext.saveGraphicsState
+ NSGraphicsContext.currentContext = NSGraphicsContext.graphicsContextWithGraphicsPort context, flipped:false
+
+ shadowGradient = NSGradient.alloc.initWithColors [NSColor.clearColor, NSColor.blackColor]
+ layerRect = CGContextGetClipBoundingBox(context)
+ shadowGradient.drawFromPoint NSPoint.new(0, layerRect.origin.y + layerRect.size.height), toPoint:NSPoint.new(0, layerRect.origin.y), options:NSGradientDrawsAfterEndingLocation
+
+ NSGraphicsContext.restoreGraphicsState
+ end
+
+end
+
+app = NSApplication.sharedApplication
+app.delegate = JumpyController.new
+app.run
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macruby-changes/attachments/20080826/161e9850/attachment-0001.html
More information about the macruby-changes
mailing list