<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/"
     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
     >
  <channel>
    <title>SVG Wow!</title>
    <link>http://svg-wow.org/blog</link>
    <description></description>
    <pubDate>Mon, 03 Mar 2014 21:47:48 GMT</pubDate>
    <generator>Blogofile</generator>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Text Effects</title>
      <link>http://svg-wow.org/blog/2010/09/25/text-effects</link>
      <pubDate>Sat, 25 Sep 2010 15:22:00 EDT</pubDate>
      <category><![CDATA[yui]]></category>
      <category><![CDATA[text]]></category>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2010/09/25/text-effects</guid>
      <description>Text Effects</description>
      <content:encoded><![CDATA[
<div id="description">
    <h3>Running the demo</h3>
    <p>
        Click the 'start svg demo' button on this page. When the page is loaded,
        you can click anywhere on the canvas to start the demo.
    </p>

    <h3>Play time!</h3>
    <p>
        I had never got around to play with SVG text as I wanted to and
        it finally happened with this demo. The demo shows how to
        access the content of SVG <code>&lt;text&gt;</code> elements and animate
        individual glyphs.
    </p>
    <p>
        The demo has a library of 'effects' which are succesively applied to
        quotes (from <a href="http://en.wikiquote.org/wiki/American_proverbs">
            http://en.wikiquote.org/wiki/American_proverbs</a>).
    </p>
    
    <h3>Breaking text into spans</h3>
    <p>
        All the effects work similarly. When applied, they first break down the
        text into a set of text spans which are then animated individually.
        The target text element (or elements, since the effect can apply to
        multiple lines of text) is (are) left unmodified and their display
        property is set to 'none'. The text spans are inserted after the
        text elemenet and are the target of the different animation effects.
        The key DOM API method used in the process of computing individual 
        glyph positions is <code>getStartPositionOfChar</code> on the
        <code>SVGTextContentElement</code> interface (see the
        <a href="http://www.w3.org/TR/2002/PR-SVG11-20021115/text.html#InterfaceSVGTextContentElement">specification</a>).
    </p>

    <p>

<div class="pygments_monokai"><pre><span class="c1">// Compute the different glyph positions and how many characters map to the</span>
<span class="c1">// same glyph position (may happen with ligatures).</span>
<span class="kd">var</span> <span class="nx">p</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
    <span class="nx">pos</span> <span class="o">=</span> <span class="p">[],</span>
    <span class="nx">curPos</span><span class="p">,</span>
    <span class="nx">n</span> <span class="o">=</span> <span class="p">..</span> <span class="cm">/* textContent length */</span>
<span class="k">for</span> <span class="p">(</span><span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">n</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">p</span> <span class="o">=</span> <span class="nx">text</span><span class="p">.</span><span class="nx">getStartPositionOfChar</span><span class="p">(</span><span class="nx">i</span><span class="p">);</span>
    <span class="k">if</span> <span class="p">(</span><span class="nx">curPos</span> <span class="o">===</span> <span class="kc">null</span> <span class="o">||</span>
        <span class="nx">p</span><span class="p">.</span><span class="nx">x</span> <span class="o">!==</span> <span class="nx">curPos</span><span class="p">.</span><span class="nx">p</span><span class="p">.</span><span class="nx">x</span> <span class="o">||</span> <span class="nx">p</span><span class="p">.</span><span class="nx">y</span> <span class="o">!==</span> <span class="nx">curPos</span><span class="p">.</span><span class="nx">p</span><span class="p">.</span><span class="nx">y</span><span class="p">)</span> <span class="p">{</span>
        <span class="nx">curPos</span> <span class="o">=</span> <span class="p">{</span>
            <span class="nx">p</span><span class="o">:</span> <span class="p">{</span><span class="nx">x</span><span class="o">:</span> <span class="nx">p</span><span class="p">.</span><span class="nx">x</span> <span class="o">+</span> <span class="nx">dx</span><span class="p">,</span> <span class="nx">y</span><span class="o">:</span> <span class="nx">p</span><span class="p">.</span><span class="nx">y</span> <span class="o">+</span> <span class="nx">dy</span><span class="p">},</span>
            <span class="nx">n</span><span class="o">:</span> <span class="mi">1</span>
        <span class="p">};</span>
        <span class="nx">pos</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">curPos</span><span class="p">);</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="c1">// Same position, just increase the text run length</span>
        <span class="nx">curPos</span><span class="p">.</span><span class="nx">n</span><span class="o">++</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">}</span>
</pre></div>



    </p>

    <h3>Effects and animations</h3>
    <p>
        As in several other demos on this web site, the animations are built
        by extending the <a href="http://developer.yahoo.com/yui/3/">YUI 3</a>
        JavaScript and CSS library to support SVG. The code also uses a
        concept of <code>Effect</code> to encapsulate a number of related
        animations so that they can be manipulated as a single abstraction.
        For example, the 'opacity-swipe' effect has one animation on the
        'fill-opacity' of each glyph, each animation starts when the previous
        one ends and the user can run the effect which internally starts the
        first animation, causing the whole animation chain to run. Likewise,
        the user can use the <code>onBegin</code> and <code>onEnd</code> events
        on the effect object to invoke specific code when the effect starts or
        ends.
    </p>
    <p>
        The following code snippet shows how the 'opacity-swipe' effect
        applies to the different text spans.
    </p>
    <p>

<div class="pygments_monokai"><pre><span class="c1">// ...</span>

<span class="c1">// toGlyphSpans is a utility method to break down the text in multiple</span>
<span class="c1">// elements.</span>
<span class="kd">var</span> <span class="nx">spans</span> <span class="o">=</span> <span class="nx">toGlyphSpans</span><span class="p">(</span><span class="nx">text</span><span class="p">),</span>
    <span class="nx">n</span> <span class="o">=</span> <span class="nx">spans</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span>
    <span class="nx">s</span><span class="p">,</span>
    <span class="nx">a</span><span class="p">,</span>
    <span class="nx">anims</span> <span class="o">=</span> <span class="p">[];</span>

<span class="c1">// duration, offset and easing a defined somewhere else in the code.s</span>
<span class="k">for</span> <span class="p">(</span><span class="kd">var</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">n</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
    <span class="nx">s</span> <span class="o">=</span> <span class="nx">spans</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
    <span class="nx">a</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Animate</span><span class="p">({</span>
        <span class="nx">node</span><span class="o">:</span> <span class="nx">s</span><span class="p">,</span>
        <span class="nx">from</span><span class="o">:</span> <span class="p">{</span><span class="s1">&#39;fill-opacity&#39;</span><span class="o">:</span> <span class="mi">0</span><span class="p">},</span>
        <span class="nx">to</span><span class="o">:</span> <span class="p">{</span><span class="s1">&#39;fill-opacity&#39;</span><span class="o">:</span> <span class="mi">1</span><span class="p">},</span>
        <span class="nx">duration</span><span class="o">:</span> <span class="nx">duration</span><span class="p">,</span>
        <span class="nx">easing</span><span class="o">:</span> <span class="nx">easing</span>
    <span class="p">});</span>
    <span class="nx">anims</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">a</span><span class="p">);</span>
<span class="p">}</span>

<span class="k">for</span> <span class="p">(</span><span class="nx">i</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span> <span class="nx">i</span> <span class="o">&lt;</span> <span class="nx">n</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
     <span class="nx">anims</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">onBegin</span><span class="p">(</span><span class="nx">anims</span><span class="p">[</span><span class="nx">i</span><span class="p">],</span> <span class="nx">i</span> <span class="o">*</span> <span class="nx">offset</span><span class="p">);</span>
<span class="p">}</span>

<span class="c1">// The Effect utility provides a way to manipulate a group of animations</span>
<span class="c1">// as a single entity.</span>
<span class="k">return</span> <span class="k">new</span> <span class="nx">Effect</span><span class="p">(</span><span class="nx">anims</span><span class="p">);</span>
</pre></div>



    </p>
    <h3>Music and Font</h3>

    <p>
        Music by <a href="/attributions.html#text-effects-audio">Roger Kidd</a>
        (with all my thanks).
    </p>

    <p>
        The font used in this demo is "GoodDog" and can be found on
        <a href="http://www.fontsquirrel.com/">Font Squirrel</a>. See the
        <a href="/attributions.html">attributions</a> page.
    </p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Graffitis</title>
      <link>http://svg-wow.org/blog/2010/09/06/graffitis</link>
      <pubDate>Mon, 06 Sep 2010 18:44:00 EDT</pubDate>
      <category><![CDATA[css3]]></category>
      <category><![CDATA[canvas]]></category>
      <category><![CDATA[yui]]></category>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[html5]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2010/09/06/graffitis</guid>
      <description>Graffitis</description>
      <content:encoded><![CDATA[
<div id="description">

    <h3>Running the demo</h3>

    <p>
        Click the 'start svg demo' on the page. When the page is loaded, it
        has the following header:
    </p>
        <img src="/graffitis/graffitis-header.png"/>

    <p>
        You can do several things (which are explained later on):
    </p>
    <ul>
        <li>
            select one of the predefined graffitis following the
            'On blackbook' label and see them
            rendered with SVG and Canvas. There are two predefined graffitis:
            one is
            <a href="http://000000book.com/data/12526">'draw'</a> from an 
            unknown contributor and the other one
            is <a href="http://000000book.com/data/161">'katsu'</a> from Katsu.
        </li>
        <li>select the random link and see an random graffiti from
            the  <a href="http://000000book.com/">http://000000book.com/ (black book)</a>
            graffiti repository.</li>
        <li>select the 'record' button and click and drag in the
            black drawing area to draw strokes. To start a new stroke, release
            the mouse and the click and drag to draw the new stroke. When you
            are done recording the graffiti, you can select the 'play' button
            to see it rendered with SVG and Canvas
        </li>
        <li>
            export the graffiti as SVG when clicking on the 'show SVG' button.
        </li>
        <li>
            see the graffiti's GML source when clicking on the 'show GML' button.
        </li>
        <li>
            show an alternate rendering of the graffiti using the 'overlay'
            filter by clicking on the 'show brick overlay' button.
        </li>
    </ul>
    <p>The 'spray paint' check box turns the Canavs rendering on or off.</p>
    

    <h3>Graffitis and the Graffiti Markup Language (GML)</h3>
    
    <p>
        <a href="http://en.wikipedia.org/wiki/Graffitis">Graffitis</a> go from
        the simplest scribbles to the most sophisticated artwork, as you can
        see on <a href="http://www.flickr.com/photos/tags/graffiti/show/">Flickr</a>
        for example.
    </p>
    <p>
        There is amazing work done to capture graffiti
        drawing and render them with computers graphics.
        Some renderings are absolutely stunning, as
        the work done by <a href="http://graffitianalysis.com/">Chris
            Sugrue and Evan Roth</a> shows.
    </p>
    <p>
        The graffiti data is captured in the 
        <a href="http://graffitianalysis.com/gml/">Graffiti Markup Language</a>,
        GML. 
        <a href="http://000000book.com/">http://000000book.com/ (black book)</a> is a
        repository of GML graffitis. Graffitis can be created with applications
        such as
        <a href="http://fffff.at/fattag-deluxe-katsu-edition/">FatTagKatsu</a>
        for the iPhone to draw tags and upload them to the Blackbook repository.
    </p>

    <h3>Using SVG and Canvas together</h3>

    <p>
        This demo uses and manipulates GML JSON data to render and animate
        tags in the blackbook tags repository.
        The graffiti data is turned into a number of SVG <code class="code" >&lt;path&gt;</code>
        objects and the 'drawing' effect is simply done by animating the
        <code class="code" >stroke-dashoffset</code> on the different path elements.
        The <code class="code" >getTotalLength</code> method on the
        <a href="http://www.w3.org/TR/SVG/paths.html#InterfaceSVGPathElement">SVGPathElement interface</a> provides the length for each
        path and lets the code compute the proper <code class="code" >stroke-dashoffset</code>
        value. This is illustrated in the following figure.
    </p>
    
    <img class="illustration" src="/graffitis/graffiti-stroke.png" width="600" height="300" />

    <p>
        The rendering also uses the <a href="http://dev.w3.org/html5/canvas-api/canvas-2d-api.html">Canvas API</a>
        to draw particles of paint as the stroke gets rendered. The particles are sprayed based on the
        speed of the pen as it moves along the graffiti. The canvas with the particles is
        part of the SVG tree, as a child of a <code class="code" >foreignObject</code> element,
        which demonstrates how well the two rendering models can be combined.
    </p>
    <p>
        The demonstration also shows how to simply create a GML file: when the
        user selects the 'record' button, he/she can the draw on the canvas and
        then select the 'play' button when done. This will render the rendering
        of the captured GML content.
    </p>

    <h3>An 'overlay' filter effect lurking in a corner</h3>
    <p>
        Finally, the demonstration illustrates an overlay filter effect.
        The overlay compositing rule does not come directly in SVG as
        it is not part of the
        <a href="http://www.w3.org/TR/SVG/filters.html#feBlendElement">
            <code class="code" >&lt;feBlend&gt;</code>
        </a> modes. However, it is possible
        (even though a bit computation intensive) to create an overlay by
        combining the 'multiply' and 'screen' modes of <code class="code" >&lt;feBlend&gt;</code>.
        This is a bit of a sophisticated filter which I'll further describe
        in a separate demo decicated to just that filter.
    </p>

    <h3>An ugly hack also lurking</h3>

    <p>
        Several implementations (Firefox 3.6, Safari 5.0 and Chrome 6.0) have a
        bug at the time of this writing and fail to correctly render stroke line
        joins when the path points are closer than the stroke width. The code
        contains an ugly hack to get the
        visually correct result. The hack consists in adding
        circles at the point poisitions to make sure the line joins are properly
        rounded. This is ugly because it adds to the DOM load (many
        <code>&lt;circle&gt;</code> elements are added) and slows down the
        animation.
    </p>
    <p>
        The page header uses the <a href="/attributions.html#hvdPeace">HVD-Peace</a>
        font.
    </p>
    
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Mustache</title>
      <link>http://svg-wow.org/blog/2009/10/04/mustache</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/mustache</guid>
      <description>Mustache</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This demo shows how to create an interactive svg webapp. Place a beard/mustache on a photo of your choice.
    </p>
    
    <h3>Running the demo</h3>
    <p>
        Hover the bottom part of the photo to show the palette of available face enhancements, and drag the one of your choice
        from the palette to the photo. 
    </p>
    <p>
        When an item is selected it can be rotated by pressing the right- or left-arrow key. To scale an item press
        up- or down-arrow key to zoom in or out respectively. To rotate/scale in smaller steps hold down the shiftkey at the
        same time.
        
        To remove an item, select it and then press backspace or delete.
    </p>
    <p>
        You can also add your own photo by clicking the "Add photo" button in the palette, as well as save
        the result to a data uri. Per default the saved svg file only links to the photo, but it's also possible to save a standalone file by following 
        <a href="/mustache/beard.svg#save=standalone">this link</a> (note that big photos can take a bit of time to export, and your browser may appear frozen during the encoding phase).
    </p>
    <p>See <a href="/attributions.html">attributions</a> about
        the resources used in this demo.
    </p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Animated Lyrics</title>
      <link>http://svg-wow.org/blog/2009/10/04/animated-lyrics</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[audio]]></category>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/animated-lyrics</guid>
      <description>Animated Lyrics</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This example illustrates the use of the following features:
    </p>
    <ul>
        <li>
            Depending on the implementation, SVG or HTML 5 <span class="code">&lt;audio&gt;</span> in
            a <span class="code">&lt;foreignObject&gt;</span>
        </li>
        <li>
            Web fonts
        </li>
        <li>
            Text on a path
        </li>
        <li>
            Scripted animation
        </li>
    </ul>

    <p>Note that the demo uses <a href="http://www.w3schools.com/js/js_timing.asp"><span class="code">setTimer</span></a> to synchronize
        the lyrics with the audio because
        the new audio <a href="http://www.w3.org/TR/html5/Overview.html#event-media-timeupdate">timeupdate</a> event is not supported in
        all the browsers yet. However, as explained on
        <a href="http://blog.gingertech.net/2009/08/19/jumping-to-time-offsets-in-videos/">Silvia Pfeiffer's site</a>
        it would be a better way to synchronize the lyrics in a pure HTML5 context.</p>
    <p>See <a href="/attributions.html">attributions</a> about
        the song and fonts used in this demo (also showing at the
    end of the demo). The code leverages the YUI library with
    an extension to allow animation of SVG transform attributes.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.
       When the demo has loaded, click in the center of the
       image. Then, once the menu has settled, click on the
    "ancient sun" item.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Pebbles</title>
      <link>http://svg-wow.org/blog/2009/10/04/pebbles</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/pebbles</guid>
      <description>Pebbles</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This demo illustrates the use of the <span class="code">getPointAtLength()</span>
        API on the SVG <span class="code">&lt;path&gt;</span> element.
    </p>
    <p>
        The script simply accesses the path of an object and gets the
        coordinates of points along that path. Then, it positions a
        'pebble' of random size at a pseudo-random position about the
        coordinates returned by <span class="code">getPointAtLength</span>
    </p>
    <p>
        <a href="http://www.inkscape.org">Inkscape</a> was used to convert the
        "SVG" and "Wow!" texts to SVG paths elements which the
        demo code manipulates.
    </p>
    <p>See <a href="/attributions.html">attributions</a> for the
    OpenClipArt play/pause icons.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.
       When the demo has loaded, click in the play button at
       the bottom right. Once the "SVG" text has fully appeared,
       click on the display.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Photo Album</title>
      <link>http://svg-wow.org/blog/2009/10/04/photo-album</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/photo-album</guid>
      <description>Photo Album</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This demo shows how SVG can be used to render images
        retrieved from the Flickr interesting photo source and 
        provide a dynamic, interactive user experience.
    </p>
    <p>
        The purpose of this demo is to show illustrate that SVG
        can be used, just like HTML, for AJAX applications.
    </p>
    <p>
        The <a href="/res/2.0/scripts/tools/magnifier.js">magnifier</a> effect used in this demo
        was inspired by <a href="http://levitated.net/jt/index.html">Jared Tarbell</a>'s
        <a href="http://www.levitated.net/daily/levTextSphere.html">text sphere</a>. Here, the
        magnifier effect is applied on a single (horizontal) axis.
    </p>
    <p>See <a href="/attributions.html">attributions</a> for
        details on using the Flickr APIs.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.
        When the demo has loaded, move the cursor to the bottom
        of the display. This will make the animated menu
        appear. The menu's speed is controlled by the distance
        from the center of the menu on the horizontal axis.
    </p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Light Table</title>
      <link>http://svg-wow.org/blog/2009/10/04/light-table</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/light-table</guid>
      <description>Light Table</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        Like the <a href="/blog/2009/10/04/photo-album">Photo Album</a> demo,
        this demo shows how SVG can be used to render images
        retrieved from the Flickr interesting photo source and 
        provide a dynamic, interactive user experience.
    </p>
    <p>
        This demo leverages the Yahoo
        <a href="http://developer.yahoo.com/yui/">YUI</a>
        library with extensions to make it work with SVG
        elements, in particular to allow the animation of the
        <span class="code">transform</span> attribute.
    </p>
    <p>
        The <a href="/res/2.0/scripts/tools/magnifier.js">magnifier</a> effect used in this demo
        was inspired by <a href="http://levitated.net/jt/index.html">Jared Tarbell</a>'s
        <a href="http://www.levitated.net/daily/levTextSphere.html">text sphere</a>.
    </p>

    <p>See <a href="/attributions.html">attributions</a> for
    details on the YUI library.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.
       When the demo has loaded a first page of images, 
       click on the 'prev' or 'next' links at the bottom
       left of the page to load a new page.</p>
    <p>WARNING: the demo runs very slowly in Firefox as of
        version 3.6.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Ripple</title>
      <link>http://svg-wow.org/blog/2009/10/04/ripple</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[animation]]></category>
      <category><![CDATA[filters]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/ripple</guid>
      <description>Ripple</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This demo shows interactive animated SVG filter effects.
    </p>
    <p>
        The animation is made by animating a displacement map image, with a radial gradient mask to smoothly fade out the edges.
        To be able to run the animation the browser must support SVG filters, declarative animation (SMIL) and scripting.
    </p>
    <p>See <a href="/attributions.html">attributions</a>.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.</p>
    
    <p>Then click anywhere on the image to start animating a droplet ripple effect from that point.</p>
    
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Twirl</title>
      <link>http://svg-wow.org/blog/2009/10/04/twirl</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[filters]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/twirl</guid>
      <description>Twirl</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>
        This demo uses an animated displacement map filter to make a twirling effect on a photo.
    </p>
    <p>
        The displacement map image was created from an identity displacementmap svg image that was rasterized to 640x480 pixels and then 
        processed in a normal graphics editor to produce <a href="/res/1.0/images/DisplacementMap640dist.png">this image</a>.
        That image is then animated (rotated) by SVG declarative animation (SMIL).
    </p>
    <p>See <a href="/attributions.html">attributions</a>.</p>

    <h3>Running the demo</h3>

    <p>Click on the "Start SVG Demo" at the top of this page.</p>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Pattern1</title>
      <link>http://svg-wow.org/blog/2009/10/04/pattern1</link>
      <pubDate>Sun, 04 Oct 2009 15:00:00 EDT</pubDate>
      <category><![CDATA[pattern]]></category>
      <category><![CDATA[interactive]]></category>
      <guid isPermaLink="true">http://svg-wow.org/blog/2009/10/04/pattern1</guid>
      <description>Pattern1</description>
      <content:encoded><![CDATA[
<div id="description">
    <p>This example illustrates the use of
        the svg <code>&lt;pattern&gt;</code> element. The background rectangle
        is drawn with a simple pattern made of dots and rectangles,
        similar to that found in modern art work and designs
        (e.g., Vasarely, Verner Panton). The "svg" text is painted with
        a similar, inverted pattern.
    </p>
    <p>
        Patterns a common in computer graphics. However, SVG patterns
        are powerful in that they can be defined not only as bitmap
        content, which is the common case in graphics libraries, but
        also as vector content. In other words, the content of an SVG
        pattern can be any arbitrary SVG graphics. Furthermore,
        SVG patterns can be created by scripts.
    </p>
    <p>
        In the initial rendering, there is actually no outline for the
        text, and our perception still makes out the 'svg' shape outline by
        assuming continuity between unconnected path segments. This is
        an <a href="http://en.wikipedia.org/wiki/Optical_illusion">optical illusion</a>
        similar to what happens with the famous <a href="http://en.wikipedia.org/wiki/Kanizsa_triangle">Kanizsa triangle</a>.
    </p>
    <p>
        Note, however, that even though there is no
        real "svg" shape in the visual rendering, a shape is
        actually filled with a different pattern...
    </p>

    <h3>Running the demo</h3>
    <p>
        After loading the demo, move the cursor over the
        rectangle. This will first show the 'SVG' text filled
        with a different pattern. Then, move the cursor over the
        text iteself to show the text in another, colored
        pattern.
    </p>
</div>
]]></content:encoded>
    </item>
  </channel>
</rss>
