| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | Smalltalk current createPackage: 'Processing-Examples' properties: #{}!Object subclass: #ProcessingClock	instanceVariableNames: 'processing centerX centerY maxArmLength'	package: 'Processing-Examples'!!ProcessingClock methodsFor: 'not yet classified'!draw| drawBlock |drawBlock := [  | now hoursPosition minutesPosition secondsPosition |    processing background: 224.    now := Date new.    "Moving hours arm by small increments"   hoursPosition := now hours \\ 12 + now minutes / 60 / 12.   self drawArm: hoursPosition lengthScale: 0.5 weight: 5.      "Moving minutes arm by small increments"    minutesPosition := now minutes + now seconds / 60 / 60.    self drawArm: minutesPosition lengthScale: 0.80 weight: 3.    "Moving hour arm by second increments"    secondsPosition := now seconds / 60.    self drawArm: secondsPosition lengthScale: 0.90 weight: 1.  ].^drawBlock!drawArm: aPosition lengthScale: aLengthScale weight: aWeight| myDX myDY |processing strokeWeight: aWeight.myDX := centerX 			+ ((Math sin: (aPosition * 2 * Math PI))			* aLengthScale * maxArmLength).myDY := centerY 			- ((Math cos: (aPosition * 2 * Math PI))			* aLengthScale * maxArmLength).processing line: centerX y: centerY dX: myDX dy: myDY.!initializeprocessing := <Processing.instances[0]>.centerX := processing width / 2.centerY := processing height / 2.maxArmLength := Math min: centerX or: centerY.!processing^processing! !!ProcessingClock class methodsFor: 'not yet classified'!init| clock processing block |clock := ProcessingClock new .processing := clock processing.block := clock draw.<processing.draw=block>! !
 |