Canvas.st 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. Object subclass: #CanvasRenderingContext instanceVariableNames: '' category: 'Canvas'! !CanvasRenderingContext methodsFor: 'drawing arcs'! arcTo: aPoint radius: aNumber startAngle: aNumber2 endAngle: aNumber3 anticlockwise: aBoolean
  2. {'self.arc(aPoint._x(), aPoint._y(), aNumber, aNumber2, aNumber3, aBoolean)'} ! arcTo: aPoint radius: aNumber
  3. self arcTo: aPoint radius: aNumber startAngle: 0 endAngle: Number pi * 2 anticlockwise: false ! ! !CanvasRenderingContext methodsFor: 'drawing paths'! fillStyle: aString
  4. {'self.fillStyle = String(aString)'} ! beginPath
  5. {'self.beginPath()'} ! closePath
  6. {'self.closePath()'} ! fill
  7. {'self.fill()'} ! stroke
  8. {'self.stroke()'} ! moveTo: aPoint
  9. {'self.moveTo(aPoint._x(), aPoint._y())'} ! lineTo: aPoint
  10. {'self.lineTo(aPoint._x(), aPoint._y())'} ! strokeStyle: aString
  11. {'self.strokeStyle = String(aString)'} ! lineWidth: aNumber
  12. {'self.lineWidth = aNumber'} ! ! !CanvasRenderingContext methodsFor: 'drawing rectangles'! fillRectFrom: aPoint to: anotherPoint
  13. {'self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y())'} ! strokeRectFrom: aPoint to: anotherPoint
  14. {'self.strokeRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y())'} ! clearRectFrom: aPoint to: anotherPoint
  15. {'self.fillRect(aPoint._x(), aPoint._y(), anotherPoint._x(), anotherPoint._y())'} ! ! !CanvasRenderingContext class methodsFor: 'instance creation'! tagBrush: aTagBrush
  16. {'return aTagBrush._element().getContext(''2d'')'} ! ! Object subclass: #HTMLCanvas instanceVariableNames: 'root' category: 'Canvas'! !HTMLCanvas methodsFor: '*JQuery'! appendToJQuery: aJQuery
  17. aJQuery appendElement: root element
  18. ! ! !HTMLCanvas methodsFor: 'accessing'! root: aTagBrush
  19. root := aTagBrush
  20. ! root
  21. ^root
  22. ! ! !HTMLCanvas methodsFor: 'adding'! with: anObject
  23. ^self root with: anObject
  24. ! ! !HTMLCanvas methodsFor: 'initialization'! initialize
  25. super initialize.
  26. root := TagBrush fromString: 'div' canvas: self
  27. ! ! !HTMLCanvas methodsFor: 'tags'! newTag: aString
  28. ^TagBrush fromString: aString canvas: self
  29. ! tag: aString
  30. ^root addBrush: (self newTag: aString)
  31. ! h1
  32. ^self tag: 'h1'
  33. ! h2
  34. ^self tag: 'h2'
  35. ! h3
  36. ^self tag: 'h3'
  37. ! h4
  38. ^self tag: 'h4'
  39. ! h5
  40. ^self tag: 'h5'
  41. ! h6
  42. ^self tag: 'h6'
  43. ! p
  44. ^self tag: 'p'
  45. ! div
  46. ^self tag: 'div'
  47. ! span
  48. ^self tag: 'span'
  49. ! img
  50. ^self tag: 'img'
  51. ! ul
  52. ^self tag: 'ul'
  53. ! ol
  54. ^self tag: 'ol'
  55. ! li
  56. ^self tag: 'li'
  57. ! table
  58. ^self tag: 'table'
  59. ! tr
  60. ^self tag: 'tr'
  61. ! td
  62. ^self tag: 'td'
  63. ! th
  64. ^self tag: 'th'
  65. ! form
  66. ^self tag: 'form'
  67. ! input
  68. ^self tag: 'input'
  69. ! button
  70. ^self tag: 'button'
  71. ! select
  72. ^self tag: 'select'
  73. ! option
  74. ^self tag: 'option'
  75. ! textarea
  76. ^self tag: 'textarea'
  77. ! a
  78. ^self tag: 'a'
  79. ! canvas
  80. ^self tag: 'canvas'
  81. ! ! Object subclass: #TagBrush instanceVariableNames: 'canvas, element' category: 'Canvas'! !TagBrush methodsFor: 'accessing'! element
  82. ^element
  83. ! ! !TagBrush methodsFor: 'adding'! contents: anObject
  84. self asJQuery empty.
  85. self append: anObject
  86. ! addBrush: aTagBrush
  87. self appendChild: aTagBrush element.
  88. ^aTagBrush
  89. ! with: anObject
  90. self append: anObject
  91. ! append: anObject
  92. anObject appendToBrush: self
  93. ! appendToBrush: aTagBrush
  94. aTagBrush addBrush: self
  95. ! appendBlock: aBlock
  96. | root |
  97. root := canvas root.
  98. canvas root: self.
  99. aBlock value: canvas.
  100. canvas root: root
  101. ! appendChild: anElement
  102. {'self[''@element''].appendChild(anElement)'}
  103. ! appendString: aString
  104. self appendChild: (self createTextNodeFor: aString)
  105. ! ! !TagBrush methodsFor: 'attributes'! at: aString put: aValue
  106. {'self[''@element''].setAttribute(aString, aValue)'}
  107. ! removeAt: aString
  108. {'self[''@element''].removeAttribute(aString)'}
  109. ! class: aString
  110. self at: 'class' put: aString
  111. ! id: aString
  112. self at: 'id' put: aString
  113. ! src: aString
  114. self at: 'src' put: aString
  115. ! href: aString
  116. self at: 'href' put: aString
  117. ! title: aString
  118. self at: 'title' put: aString
  119. ! style: aString
  120. self at: 'style' put: aString
  121. ! ! !TagBrush methodsFor: 'converting'! asJQuery
  122. {'return smalltalk.JQuery._from_(jQuery(self[''@element'']))'}
  123. ! asJQueryDo: aBlock
  124. aBlock value: self asJQuery
  125. ! ! !TagBrush methodsFor: 'events'! onKeyDown: aBlock
  126. self asJQuery on: 'keydown' do: aBlock
  127. ! onKeyPress: aBlock
  128. self asJQuery on: 'keypress' do: aBlock
  129. ! onKeyUp: aBlock
  130. self asJQuery on: 'keyup' do: aBlock
  131. ! onFocus: aBlock
  132. self asJQuery on: 'focus' do: aBlock
  133. ! onBlur: aBlock
  134. self asJQuery on: 'blur' do: aBlock
  135. ! onChange: aBlock
  136. self asJQuery on: 'change' do: aBlock
  137. ! onClick: aBlock
  138. self asJQuery on: 'click' do: aBlock
  139. ! ! !TagBrush methodsFor: 'initialization'! initializeFromString: aString canvas: aCanvas
  140. element := self createElementFor: aString.
  141. canvas := aCanvas
  142. ! ! !TagBrush methodsFor: 'private'! createElementFor: aString
  143. {'return document.createElement(String(aString))'}
  144. ! createTextNodeFor: aString
  145. {'return document.createTextNode(String(aString))'}
  146. ! ! !TagBrush class methodsFor: 'instance creation'! fromString: aString canvas: aCanvas
  147. ^self new
  148. initializeFromString: aString canvas: aCanvas;
  149. yourself
  150. ! ! Object subclass: #Widget instanceVariableNames: 'root' category: 'Canvas'! !Widget methodsFor: 'accessing'! root
  151. ^root
  152. ! ! !Widget methodsFor: 'actions'! alert: aString
  153. {'alert(aString)'}
  154. ! confirm: aString
  155. {'return window.confirm(aString)'}
  156. ! prompt: aString
  157. ^self prompt: aString default: ''
  158. ! prompt: aString default: anotherString
  159. {'return window.prompt(aString, anotherString)'}
  160. ! update
  161. | canvas |
  162. canvas := HTMLCanvas new.
  163. canvas root: self root.
  164. self root asJQuery empty.
  165. self renderOn: canvas
  166. ! ! !Widget methodsFor: 'adding'! appendToBrush: aTagBrush
  167. self appendToJQuery: aTagBrush asJQuery
  168. ! appendToJQuery: aJQuery
  169. self render.
  170. aJQuery append: self root asJQuery
  171. ! ! !Widget methodsFor: 'rendering'! render
  172. | canvas |
  173. canvas := HTMLCanvas new.
  174. root := canvas root.
  175. self renderOn: canvas
  176. ! renderOn: html
  177. self
  178. ! ! TagBrush subclass: #CanvasBrush instanceVariableNames: '' category: 'Canvas'! !CanvasBrush methodsFor: 'initialization'! initializeWithCanvas: aCanvas
  179. canvas := aCanvas ! ! !CanvasBrush methodsFor: 'private'! createElement
  180. {'return document.createElement(''canvas'')'} ! ! !CanvasBrush class methodsFor: 'instance creation'! canvas: aCanvas
  181. ^self new
  182. initializeWithCanvas: aCanvas;
  183. yourself ! ! appendToBrush: aTagBrush
  184. aTagBrush append: self asString
  185. ! appendToBrush: aTagBrush
  186. aTagBrush appendBlock: self ! appendToBrush: aTagBrush
  187. aTagBrush appendString: self
  188. !