CocoaDrawingShell
=================

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

A PyObjC Example without documentation

.. rst-class:: tabber

Sources
-------

.. rst-class:: tabbertab

MyView.py
.........

.. sourcecode:: python

    import math
    
    import Cocoa
    import Quartz
    
    
    def doAlphaRects(context):
        # ***** Part 1 *****
        ourRect = Quartz.CGRectMake(0.0, 0.0, 130.0, 100.0)
        numRects = 6
        rotateAngle = 2 * math.pi / numRects
        tintAdjust = 1.0 / numRects
    
        # ***** Part 2 *****
        Quartz.CGContextTranslateCTM(
            context, 2 * ourRect.size.width, 2 * ourRect.size.height
        )
    
        # ***** Part 3 *****
        tint = 1.0
        for _ in range(numRects):
            Quartz.CGContextSetRGBFillColor(context, tint, 0.0, 0.0, tint)
            Quartz.CGContextFillRect(context, ourRect)
            Quartz.CGContextRotateCTM(context, rotateAngle)  # cumulative
            tint -= tintAdjust
    
    
    class MyView(Cocoa.NSView):
        def drawRect_(self, rect):
            nsctx = Cocoa.NSGraphicsContext.currentContext()
            context = nsctx.graphicsPort()
    
            Quartz.CGContextSetLineWidth(context, 5.0)
            # Draw the coordinate axes.
            Quartz.CGContextBeginPath(context)
            # First draw the x axis.
            Quartz.CGContextMoveToPoint(context, -2000.0, 0.0)
            Quartz.CGContextAddLineToPoint(context, 2000.0, 0.0)
            Quartz.CGContextDrawPath(context, Quartz.kCGPathStroke)
            # Next draw the y axis.
            Quartz.CGContextMoveToPoint(context, 0.0, -2000.0)
            Quartz.CGContextAddLineToPoint(context, 0.0, 2000.0)
            Quartz.CGContextDrawPath(context, Quartz.kCGPathStroke)
    
            doAlphaRects(context)

.. rst-class:: tabbertab

main.py
.......

.. sourcecode:: python

    import MyView  # noqa: F401
    from PyObjCTools import AppHelper
    
    AppHelper.runEventLoop()

.. rst-class:: tabbertab

setup.py
........

.. sourcecode:: python

    """
    Script for building the example.
    
    Usage:
        python3 setup.py py2app
    """
    from setuptools import setup
    
    setup(
        name="CocoaDrawingShell",
        app=["main.py"],
        data_files=["English.lproj"],
        setup_requires=["py2app", "pyobjc-framework-Cocoa", "pyobjc-framework-Quartz"],
    )

