Skip to content

Commit 9ef9561

Browse files
author
Michael Bleigh
committed
Make tools handle their own events.
1 parent 667cfc3 commit 9ef9561

File tree

4 files changed

+112
-101
lines changed

4 files changed

+112
-101
lines changed

docs/sketch.html

Lines changed: 37 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,18 @@
8181
contents will be downloaded in the specified format (acceptable formats
8282
are <code>jpeg</code> and <code>png</code>).</p> </td> <td class="code"> <div class="highlight"><pre> <span class="k">if</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;data-download&#39;</span><span class="p">)</span>
8383
<span class="nx">$canvas</span><span class="p">.</span><span class="nx">trigger</span> <span class="s1">&#39;sketch.download&#39;</span><span class="p">,</span> <span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;data-download&#39;</span><span class="p">)</span>
84-
<span class="kc">false</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">&#182;</a> </div> <h3>sketch.set(key, value)</h3>
84+
<span class="kc">false</span></pre></div> </td> </tr> <tr id="section-13"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-13">&#182;</a> </div> <h3>sketch.download(format)</h3>
8585

86-
<p>Sets an arbitrary instance variable on the Sketch instance.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">set: </span><span class="nf">(key, value)-&gt;</span>
87-
<span class="k">this</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">&#182;</a> </div> <h3>sketch.startPainting()</h3>
86+
<p>Cause the browser to open up a new window with the Data URL of the current
87+
canvas. The <code>format</code> parameter can be either <code>png</code> or <code>jpeg</code>.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">download: </span><span class="nf">(format)-&gt;</span>
88+
<span class="nx">format</span> <span class="o">or=</span> <span class="s2">&quot;png&quot;</span>
89+
<span class="nv">format = </span><span class="s2">&quot;jpeg&quot;</span> <span class="k">if</span> <span class="nx">format</span> <span class="o">==</span> <span class="s2">&quot;jpg&quot;</span>
90+
<span class="nv">mime = </span><span class="s2">&quot;image/#{format}&quot;</span>
91+
92+
<span class="nb">window</span><span class="p">.</span><span class="nx">open</span> <span class="nx">@el</span><span class="p">.</span><span class="nx">toDataURL</span><span class="p">(</span><span class="nx">mime</span><span class="p">)</span></pre></div> </td> </tr> <tr id="section-14"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-14">&#182;</a> </div> <h3>sketch.set(key, value)</h3>
93+
94+
<p><em>Internal method.</em> Sets an arbitrary instance variable on the Sketch instance.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">set: </span><span class="nf">(key, value)-&gt;</span>
95+
<span class="k">this</span><span class="p">[</span><span class="nx">key</span><span class="p">]</span> <span class="o">=</span> <span class="nx">value</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</a> </div> <h3>sketch.startPainting()</h3>
8896

8997
<p><em>Internal method.</em> Called when a mouse or touch event is triggered
9098
that begins a paint stroke. </p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">startPainting: </span><span class="o">-&gt;</span>
@@ -94,57 +102,52 @@
94102
<span class="nv">color: </span><span class="nx">@color</span>
95103
<span class="nv">size: </span><span class="nx">@size</span>
96104
<span class="nv">events: </span><span class="p">[]</span>
97-
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-15"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-15">&#182;</a> </div> <h3>sketch.stopPainting()</h3>
105+
<span class="p">}</span></pre></div> </td> </tr> <tr id="section-16"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-16">&#182;</a> </div> <h3>sketch.stopPainting()</h3>
98106

99107
<p><em>Internal method.</em> Called when the mouse is released or leaves the canvas.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">stopPainting: </span><span class="o">-&gt;</span>
100108
<span class="nx">@actions</span><span class="p">.</span><span class="nx">push</span> <span class="nx">@action</span> <span class="k">if</span> <span class="nx">@action</span>
101109
<span class="vi">@painting = </span><span class="kc">false</span>
102110
<span class="vi">@action = </span><span class="kc">null</span>
103111
<span class="nx">@redraw</span><span class="p">()</span>
104-
105-
<span class="nv">onEvent: </span><span class="nf">(e)-&gt;</span>
106-
<span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">data</span><span class="p">(</span><span class="s1">&#39;sketch&#39;</span><span class="p">).</span><span class="nx">addEvent</span> <span class="nx">e</span>
112+
</pre></div> </td> </tr> <tr id="section-17"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-17">&#182;</a> </div> <h3>sketch.onEvent(e)</h3>
113+
114+
<p><em>Internal method.</em> Universal event handler for the canvas. Any mouse or
115+
touch related events are passed through this handler before being passed
116+
on to the individual tools.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">onEvent: </span><span class="nf">(e)-&gt;</span>
117+
<span class="k">if</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span>
118+
<span class="nv">e.pageX = </span><span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">pageX</span>
119+
<span class="nv">e.pageY = </span><span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">pageY</span>
120+
<span class="nx">$</span><span class="p">.</span><span class="nx">sketch</span><span class="p">.</span><span class="nx">tools</span><span class="p">[</span><span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">data</span><span class="p">(</span><span class="s1">&#39;sketch&#39;</span><span class="p">).</span><span class="nx">tool</span><span class="p">].</span><span class="nx">onEvent</span><span class="p">.</span><span class="nx">call</span><span class="p">(</span><span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">data</span><span class="p">(</span><span class="s1">&#39;sketch&#39;</span><span class="p">),</span> <span class="nx">e</span><span class="p">)</span>
107121
<span class="nx">e</span><span class="p">.</span><span class="nx">preventDefault</span><span class="p">()</span>
108-
<span class="kc">false</span>
122+
<span class="kc">false</span></pre></div> </td> </tr> <tr id="section-18"> <td class="docs"> <div class="pilwrap"> <a class="pilcrow" href="#section-18">&#182;</a> </div> <h3>sketch.redraw()</h3>
123+
124+
<p><em>Internal method.</em> Redraw the sketchpad from scratch using the aggregated
125+
actions that have been stored as well as the action in progress if it has
126+
something renderable.</p> </td> <td class="code"> <div class="highlight"><pre> <span class="nv">redraw: </span><span class="o">-&gt;</span>
127+
<span class="vi">@el.width = </span><span class="nx">@canvas</span><span class="p">.</span><span class="nx">width</span><span class="p">()</span>
128+
<span class="vi">@context = </span><span class="nx">@el</span><span class="p">.</span><span class="nx">getContext</span> <span class="s1">&#39;2d&#39;</span>
129+
<span class="nv">sketch = </span><span class="k">this</span>
130+
<span class="nx">$</span><span class="p">.</span><span class="nx">each</span> <span class="nx">@actions</span><span class="p">,</span> <span class="o">-&gt;</span>
131+
<span class="k">if</span> <span class="k">this</span><span class="p">.</span><span class="nx">tool</span>
132+
<span class="nx">$</span><span class="p">.</span><span class="nx">sketch</span><span class="p">.</span><span class="nx">tools</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">tool</span><span class="p">].</span><span class="nx">draw</span><span class="p">.</span><span class="nx">call</span> <span class="nx">sketch</span><span class="p">,</span> <span class="k">this</span>
133+
<span class="nx">$</span><span class="p">.</span><span class="nx">sketch</span><span class="p">.</span><span class="nx">tools</span><span class="p">[</span><span class="nx">@action</span><span class="p">.</span><span class="nx">tool</span><span class="p">].</span><span class="nx">draw</span><span class="p">.</span><span class="nx">call</span> <span class="nx">sketch</span><span class="p">,</span> <span class="nx">@action</span> <span class="k">if</span> <span class="nx">@painting</span> <span class="o">&amp;&amp;</span> <span class="nx">@action</span>
109134

110-
<span class="nv">addEvent: </span><span class="nf">(e)-&gt;</span>
135+
<span class="nv">$.sketch.tools.marker =</span>
136+
<span class="nv">onEvent: </span><span class="nf">(e)-&gt;</span>
111137
<span class="k">switch</span> <span class="nx">e</span><span class="p">.</span><span class="nx">type</span>
112138
<span class="k">when</span> <span class="s1">&#39;mousedown&#39;</span><span class="p">,</span> <span class="s1">&#39;touchstart&#39;</span>
113139
<span class="nx">@startPainting</span><span class="p">()</span>
114140
<span class="k">when</span> <span class="s1">&#39;mouseup&#39;</span><span class="p">,</span> <span class="s1">&#39;mouseout&#39;</span><span class="p">,</span> <span class="s1">&#39;mouseleave&#39;</span><span class="p">,</span> <span class="s1">&#39;touchend&#39;</span><span class="p">,</span> <span class="s1">&#39;touchcancel&#39;</span>
115141
<span class="nx">@stopPainting</span><span class="p">()</span>
116142

117143
<span class="k">if</span> <span class="nx">@painting</span>
118-
<span class="k">if</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span> <span class="o">&amp;&amp;</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span><span class="p">.</span><span class="nx">length</span> <span class="o">&gt;</span> <span class="mi">1</span>
119-
<span class="nx">@stopPainting</span><span class="p">()</span>
120-
<span class="k">return</span>
121-
<span class="nv">mouseX = </span><span class="k">if</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span> <span class="k">then</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">pageX</span> <span class="k">else</span> <span class="nx">e</span><span class="p">.</span><span class="nx">pageX</span>
122-
<span class="nv">mouseY = </span><span class="k">if</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span> <span class="k">then</span> <span class="nx">e</span><span class="p">.</span><span class="nx">originalEvent</span><span class="p">.</span><span class="nx">targetTouches</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">pageY</span> <span class="k">else</span> <span class="nx">e</span><span class="p">.</span><span class="nx">pageY</span>
123-
124144
<span class="nx">@action</span><span class="p">.</span><span class="nx">events</span><span class="p">.</span><span class="nx">push</span>
125-
<span class="nv">x: </span><span class="nx">mouseX</span> <span class="o">-</span> <span class="nx">@canvas</span><span class="p">.</span><span class="nx">offset</span><span class="p">().</span><span class="nx">left</span>
126-
<span class="nv">y: </span><span class="nx">mouseY</span> <span class="o">-</span> <span class="nx">@canvas</span><span class="p">.</span><span class="nx">offset</span><span class="p">().</span><span class="nx">top</span>
145+
<span class="nv">x: </span><span class="nx">e</span><span class="p">.</span><span class="nx">pageX</span> <span class="o">-</span> <span class="nx">@canvas</span><span class="p">.</span><span class="nx">offset</span><span class="p">().</span><span class="nx">left</span>
146+
<span class="nv">y: </span><span class="nx">e</span><span class="p">.</span><span class="nx">pageY</span> <span class="o">-</span> <span class="nx">@canvas</span><span class="p">.</span><span class="nx">offset</span><span class="p">().</span><span class="nx">top</span>
127147
<span class="nv">event: </span><span class="nx">e</span><span class="p">.</span><span class="nx">type</span>
128148

129149
<span class="nx">@redraw</span><span class="p">()</span>
130150

131-
<span class="nv">redraw: </span><span class="o">-&gt;</span>
132-
<span class="vi">@el.width = </span><span class="nx">@canvas</span><span class="p">.</span><span class="nx">width</span><span class="p">()</span>
133-
<span class="vi">@context = </span><span class="nx">@el</span><span class="p">.</span><span class="nx">getContext</span> <span class="s1">&#39;2d&#39;</span>
134-
<span class="nv">sketch = </span><span class="k">this</span>
135-
<span class="nx">$</span><span class="p">.</span><span class="nx">each</span> <span class="nx">@actions</span><span class="p">,</span> <span class="o">-&gt;</span>
136-
<span class="k">if</span> <span class="k">this</span><span class="p">.</span><span class="nx">tool</span>
137-
<span class="nx">$</span><span class="p">.</span><span class="nx">sketch</span><span class="p">.</span><span class="nx">tools</span><span class="p">[</span><span class="k">this</span><span class="p">.</span><span class="nx">tool</span><span class="p">].</span><span class="nx">draw</span><span class="p">.</span><span class="nx">call</span> <span class="nx">sketch</span><span class="p">,</span> <span class="k">this</span>
138-
<span class="nx">$</span><span class="p">.</span><span class="nx">sketch</span><span class="p">.</span><span class="nx">tools</span><span class="p">[</span><span class="nx">@action</span><span class="p">.</span><span class="nx">tool</span><span class="p">].</span><span class="nx">draw</span><span class="p">.</span><span class="nx">call</span> <span class="nx">sketch</span><span class="p">,</span> <span class="nx">@action</span> <span class="k">if</span> <span class="nx">@painting</span> <span class="o">&amp;&amp;</span> <span class="nx">@action</span>
139-
140-
<span class="nv">download: </span><span class="nf">(filename, format)-&gt;</span>
141-
<span class="nx">format</span> <span class="o">or=</span> <span class="s2">&quot;png&quot;</span>
142-
<span class="nv">format = </span><span class="s2">&quot;jpeg&quot;</span> <span class="k">if</span> <span class="nx">format</span> <span class="o">==</span> <span class="s2">&quot;jpg&quot;</span>
143-
<span class="nv">mime = </span><span class="s2">&quot;image/#{format}&quot;</span>
144-
145-
<span class="nb">window</span><span class="p">.</span><span class="nx">open</span> <span class="nx">@el</span><span class="p">.</span><span class="nx">toDataURL</span><span class="p">(</span><span class="nx">mime</span><span class="p">)</span>
146-
147-
<span class="nv">$.sketch.tools.marker =</span>
148151
<span class="nv">draw: </span><span class="nf">(action)-&gt;</span>
149152
<span class="vi">@context.lineJoin = </span><span class="s2">&quot;round&quot;</span>
150153
<span class="vi">@context.lineCap = </span><span class="s2">&quot;round&quot;</span>

index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ <h1>Sketch.js</h1>
5151
<article class='info'>
5252
<h1>Installation</h1>
5353

54-
<p>To use Sketch.js in your project, just grab the latest <a href='http://intridea.github.com/sketch.js/src/sketch.js'>sketch.js</a>
54+
<p>To use Sketch.js in your project, just grab the latest <a href='http://intridea.github.com/sketch.js/lib/sketch.js'>sketch.js</a>
5555
from GitHub and include it in your project after jQuery.</p>
5656

5757
<h1>Documentation</h1>

0 commit comments

Comments
 (0)