SillyBallsSaver

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