SillyBallsSaver
===============

* :download:`Download example <PyObjCExample-SillyBallsSaver.zip>`

A PyObjC Example without documentation

.. rst-class:: tabber

Sources
-------

.. rst-class:: tabbertab

SillyBalls.py
.............

.. sourcecode:: python

    """
    Example showing screen saver in PyObjC
    
    Based on "Silly Balls.saver" by Eric Peyton <epeyton@epicware.com>
        http://www.epicware.com/macosxsavers.html
    """
    from random import random, randrange
    
    import objc
    from AppKit import NSBezierPath, NSColor
    from ScreenSaver import ScreenSaverView
    
    
    class SillyBalls(ScreenSaverView):
        def animateOneFrame(self):
            # choose a random point.
            (x, y), (fw, fh) = self.frame()
            x, y = randrange(0.0, fw), randrange(0.0, fw)
            ballSize = randrange(10.0, 90.0)
    
            path = NSBezierPath.bezierPathWithOvalInRect_(((x, y), (ballSize, ballSize)))
    
            # make a random color.
            randomColor = NSColor.colorWithCalibratedRed_green_blue_alpha_(
                random(), random(), random(), random()
            )
    
            # set it.
            randomColor.set()
    
            # draw a new ball.
            path.fill()
    
    
    objc.removeAutoreleasePool()

.. rst-class:: tabbertab

setup.py
........

.. sourcecode:: python

    """
    Script for building the example.
    
    Usage:
        python3 setup.py py2app
    """
    from setuptools import setup
    
    plist = {"NSPrincipalClass": "SillyBalls"}
    
    setup(
        plugin=["SillyBalls.py"],
        data_files=["English.lproj"],
        options={"py2app": {"extension": ".saver", "plist": plist}},
        setup_requires=["py2app", "pyobjc-framework-Cocoa", "pyobjc-framework-ScreenSaver"],
    )

