# SillyBallsSaver

- `Download example`

A PyObjC Example without documentation

## Sources

### SillyBalls.py

    """
    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()

### setup.py

    """
    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"],
    )