<s> from Sink import Sink , SinkInfo <EOL> from pyjamas . ui . Image import Image <EOL> from pyjamas . ui . HTML import HTML <EOL> from pyjamas . ui . VerticalPanel import VerticalPanel <EOL> from pyjamas . ui . HorizontalPanel import HorizontalPanel <EOL> from pyjamas . ui . RootPanel import RootPanel <EOL> from pyjamas . Canvas2D import Canvas , CanvasImage , ImageLoadListener <EOL> from pyjamas . Timer import Timer <EOL> from math import floor , cos , sin <EOL> import time <EOL> class CanvasTab ( Sink ) : <EOL> def __init__ ( self ) : <EOL> Sink . __init__ ( self ) <EOL> colour_grid = ColourGridCanvas ( ) <EOL> rotated = RotatedCanvas ( ) <EOL> spheres = SpheresCanvas ( ) <EOL> pattern = PatternCanvas ( ) <EOL> spiro = SpiroCanvas ( ) <EOL> self . solar = SolarCanvas ( ) <EOL> row0 = HorizontalPanel ( ) <EOL> row0 . setSpacing ( <NUM_LIT:8> ) <EOL> row0 . add ( colour_grid ) <EOL> row0 . add ( rotated ) <EOL> row0 . add ( spheres ) <EOL> row0 . add ( pattern ) <EOL> row1 = HorizontalPanel ( ) <EOL> row1 . setSpacing ( <NUM_LIT:8> ) <EOL> row1 . add ( self . solar ) <EOL> row1 . add ( spiro ) <EOL> panel = VerticalPanel ( ) <EOL> panel . add ( row0 ) <EOL> panel . add ( row1 ) <EOL> self . setWidget ( panel ) <EOL> def onShow ( self ) : <EOL> self . solar . isActive = True <EOL> self . solar . onTimer ( ) <EOL> def onHide ( self ) : <EOL> self . solar . isActive = False <EOL> def init ( ) : <EOL> text = """<STR_LIT>""" <EOL> return SinkInfo ( "<STR_LIT>" , text , CanvasTab ) <EOL> class ColourGridCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . draw ( ) <EOL> self . addMouseListener ( self ) <EOL> self . addKeyboardListener ( self ) <EOL> def draw ( self ) : <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:6> ) : <EOL> for j in range ( <NUM_LIT:0> , <NUM_LIT:6> ) : <EOL> self . context . fillStyle = u'<STR_LIT>' % ( floor ( <NUM_LIT:255> - <NUM_LIT> * i ) , floor ( <NUM_LIT:255> - <NUM_LIT> * j ) ) <EOL> self . context . fillRect ( j * <NUM_LIT> , i * <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) <EOL> def onMouseDown ( self , sender , x , y ) : <EOL> pass <EOL> def onMouseEnter ( self , sender ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" ) ) <EOL> self . setFocus ( True ) <EOL> def onMouseLeave ( self , sender ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" ) ) <EOL> self . setFocus ( False ) <EOL> def onMouseMove ( self , sender , x , y ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" % x + "<STR_LIT>" % y ) ) <EOL> def onMouseUp ( self , sender , x , y ) : <EOL> pass <EOL> def onKeyUp ( self , sender , keyCode , modifiers ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" % keyCode ) ) <EOL> def onKeyDown ( self , sender , keyCode , modifiers ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" % keyCode ) ) <EOL> def onClick ( self , sender ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" ) ) <EOL> def onKeyPress ( self , sender , keyCode , modifiers ) : <EOL> RootPanel ( ) . add ( HTML ( "<STR_LIT>" % keyCode ) ) <EOL> class RotatedCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . translate ( <NUM_LIT> , <NUM_LIT> ) <EOL> self . draw ( ) <EOL> def draw ( self ) : <EOL> pi = <NUM_LIT> <EOL> for i in range ( <NUM_LIT:1> , <NUM_LIT:6> ) : <EOL> self . context . save ( ) <EOL> self . context . fillStyle = '<STR_LIT>' % ( ( <NUM_LIT> * i ) , ( <NUM_LIT:255> - <NUM_LIT> * i ) ) <EOL> for j in range ( <NUM_LIT:0> , i * <NUM_LIT:6> ) : <EOL> self . context . rotate ( pi * <NUM_LIT:2> / ( i * <NUM_LIT:6> ) ) <EOL> self . context . beginPath ( ) <EOL> self . context . arc ( <NUM_LIT:0> , i * <NUM_LIT> , <NUM_LIT:5> , <NUM_LIT:0> , pi * <NUM_LIT:2> , True ) <EOL> self . context . fill ( ) <EOL> self . context . restore ( ) <EOL> class SpheresCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . draw ( ) <EOL> def draw ( self ) : <EOL> radgrad = self . context . createRadialGradient ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:10> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:30> ) <EOL> radgrad . addColorStop ( <NUM_LIT:0> , '<STR_LIT>' ) <EOL> radgrad . addColorStop ( <NUM_LIT> , '<STR_LIT>' ) <EOL> radgrad . addColorStop ( <NUM_LIT:1> , '<STR_LIT>' ) <EOL> radgrad2 = self . context . createRadialGradient ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:50> ) <EOL> radgrad2 . addColorStop ( <NUM_LIT:0> , '<STR_LIT>' ) <EOL> radgrad2 . addColorStop ( <NUM_LIT> , '<STR_LIT>' ) <EOL> radgrad2 . addColorStop ( <NUM_LIT:1> , '<STR_LIT>' ) <EOL> radgrad3 = self . context . createRadialGradient ( <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:15> , <NUM_LIT> , <NUM_LIT:20> , <NUM_LIT> ) <EOL> radgrad3 . addColorStop ( <NUM_LIT:0> , '<STR_LIT>' ) <EOL> radgrad3 . addColorStop ( <NUM_LIT> , '<STR_LIT>' ) <EOL> radgrad3 . addColorStop ( <NUM_LIT:1> , '<STR_LIT>' ) <EOL> radgrad4 = self . context . createRadialGradient ( <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> radgrad4 . addColorStop ( <NUM_LIT:0> , '<STR_LIT>' ) <EOL> radgrad4 . addColorStop ( <NUM_LIT> , '<STR_LIT>' ) <EOL> radgrad4 . addColorStop ( <NUM_LIT:1> , '<STR_LIT>' ) <EOL> self . context . fillStyle = radgrad4 <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . fillStyle = radgrad3 <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . fillStyle = radgrad2 <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . fillStyle = radgrad <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> class PatternCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . img = CanvasImage ( '<STR_LIT>' , self ) <EOL> def onLoad ( self , sender = None ) : <EOL> if sender == self . img : <EOL> self . draw ( ) <EOL> def onError ( self ) : <EOL> pass <EOL> def draw ( self ) : <EOL> ptrn = self . context . createPattern ( self . img . getElement ( ) , '<STR_LIT>' ) <EOL> self . context . fillStyle = ptrn <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:200> , <NUM_LIT:200> ) <EOL> class SpiroCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . draw ( ) <EOL> def draw ( self ) : <EOL> self . context . fillRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> for i in range ( <NUM_LIT:0> , <NUM_LIT:3> ) : <EOL> for j in range ( <NUM_LIT:0> , <NUM_LIT:3> ) : <EOL> self . context . save ( ) <EOL> self . context . strokeStyle = "<STR_LIT>" <EOL> self . context . translate ( <NUM_LIT:50> + j * <NUM_LIT:100> , <NUM_LIT:50> + i * <NUM_LIT:100> ) <EOL> self . drawSpirograph ( <NUM_LIT:20> * ( j + <NUM_LIT:2> ) / ( j + <NUM_LIT:1> ) , - <NUM_LIT:8> * ( i + <NUM_LIT:3> ) / ( i + <NUM_LIT:1> ) , <NUM_LIT:10> ) <EOL> self . context . restore ( ) <EOL> def drawSpirograph ( self , R , r , O ) : <EOL> pi = <NUM_LIT> <EOL> x1 = R - O <EOL> y1 = <NUM_LIT:0> <EOL> x2 = - <NUM_LIT:1> <EOL> y2 = - <NUM_LIT:1> <EOL> i = <NUM_LIT:1> <EOL> self . context . beginPath ( ) <EOL> self . context . moveTo ( x1 , y1 ) <EOL> while x2 != R - O and y2 != <NUM_LIT:0> : <EOL> if i > <NUM_LIT> : <EOL> break <EOL> x2 = ( R + r ) * cos ( i * pi / <NUM_LIT> ) - ( r + O ) * cos ( ( ( R + r ) / r ) * ( i * pi / <NUM_LIT> ) ) <EOL> y2 = ( R + r ) * sin ( i * pi / <NUM_LIT> ) - ( r + O ) * sin ( ( ( R + r ) / r ) * ( i * pi / <NUM_LIT> ) ) <EOL> self . context . lineTo ( x2 , y2 ) <EOL> x1 = x2 <EOL> y1 = y2 <EOL> i += <NUM_LIT:1> <EOL> self . context . stroke ( ) <EOL> class SolarCanvas ( Canvas ) : <EOL> def __init__ ( self ) : <EOL> Canvas . __init__ ( self , <NUM_LIT> , <NUM_LIT> ) <EOL> self . sun = CanvasImage ( '<STR_LIT>' ) <EOL> self . moon = CanvasImage ( '<STR_LIT>' ) <EOL> self . earth = CanvasImage ( '<STR_LIT>' ) <EOL> self . loader = ImageLoadListener ( ) <EOL> self . loader . add ( self . sun ) <EOL> self . loader . add ( self . moon ) <EOL> self . loader . add ( self . earth ) <EOL> self . isActive = True <EOL> self . onTimer ( ) <EOL> def onTimer ( self , t = None ) : <EOL> if not self . isActive : <EOL> return <EOL> Timer ( <NUM_LIT:100> , self ) <EOL> self . draw ( ) <EOL> def getTimeSeconds ( self ) : <EOL> return time . time ( ) % <NUM_LIT> <EOL> def getTimeMilliseconds ( self ) : <EOL> return ( time . time ( ) * <NUM_LIT> ) % <NUM_LIT:1.0> <EOL> def draw ( self ) : <EOL> pi = <NUM_LIT> <EOL> if not self . loader . isLoaded ( ) : <EOL> return <EOL> self . context . globalCompositeOperation = '<STR_LIT>' <EOL> self . context . clearRect ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . save ( ) <EOL> self . context . fillStyle = '<STR_LIT>' <EOL> self . context . strokeStyle = '<STR_LIT>' <EOL> self . context . translate ( <NUM_LIT> , <NUM_LIT> ) <EOL> self . context . rotate ( ( ( <NUM_LIT:2> * pi ) / <NUM_LIT> ) * self . getTimeSeconds ( ) + ( ( <NUM_LIT:2> * pi ) / <NUM_LIT> ) * self . getTimeMilliseconds ( ) ) <EOL> self . context . translate ( <NUM_LIT> , <NUM_LIT:0> ) <EOL> self . context . fillRect ( <NUM_LIT:0> , - <NUM_LIT:12> , <NUM_LIT:50> , <NUM_LIT> ) <EOL> self . context . drawImage ( self . earth . getElement ( ) , - <NUM_LIT:12> , - <NUM_LIT:12> ) <EOL> self . context . save ( ) <EOL> self . context . rotate ( ( ( <NUM_LIT:2> * pi ) / <NUM_LIT:6> ) * self . getTimeSeconds ( ) + ( ( <NUM_LIT:2> * pi ) / <NUM_LIT> ) * self . getTimeMilliseconds ( ) ) <EOL> self . context . translate ( <NUM_LIT:0> , <NUM_LIT> ) <EOL> self . context . drawImage ( self . moon . getElement ( ) , - <NUM_LIT> , - <NUM_LIT> ) <EOL> self . context . restore ( ) <EOL> self . context . restore ( ) <EOL> self . context . beginPath ( ) <EOL> self . context . arc ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , pi * <NUM_LIT:2> , False ) <EOL> self . context . stroke ( ) <EOL> self . context . drawImage ( self . sun . getElement ( ) , <NUM_LIT:0> , <NUM_LIT:0> ) </s>
