<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Julien Templier &#187; Programming</title>
	<atom:link href="http://www.templier.info/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.templier.info</link>
	<description>"It's not under construction, just perpetually unfinished"</description>
	<lastBuildDate>Thu, 23 Jul 2009 19:36:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Extended System Control plugin for DesktopX</title>
		<link>http://www.templier.info/2009/06/22/extended-system-control-plugin-for-desktopx/</link>
		<comments>http://www.templier.info/2009/06/22/extended-system-control-plugin-for-desktopx/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 11:16:38 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/06/22/extended-system-control-plugin-for-desktopx/</guid>
		<description><![CDATA[The plan for this plugin is to include all system-related functionality that isn’t already available in the DesktopX System namespace. &#160; Download You can download a test version here (set to expire on 10/5/2009). If you have ideas for stuff to add to this plugin, feel free to post them on the DesktopX 4.x request [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/06/image3.png"><img style="border-right-width: 0px; margin: 2px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.templier.info/wp-content/uploads/2009/06/image_thumb3.png" width="360" height="199" /></a> </p>
<p>The plan for this plugin is to include all system-related functionality that isn’t already available in the DesktopX System namespace.</p>
<p>&#160;</p>
<p><strong>Download</strong></p>
<p>You can download a test version <a href="http://www.templier.info/wp-content/uploads/2009/07/DXSystemEx.zip">here</a> (set to expire on 10/5/2009).</p>
<p>If you have ideas for stuff to add to this plugin, feel free to post them on the <a href="http://forums.wincustomize.com/345094">DesktopX 4.x request thread</a>.</p>
<p>&#160;</p>
<p><strong>Plugin Information</strong></p>
<p><u>Mouse wheel</u></p>
<ul>
<li>SystemEx_OnMouseWheel(rotation) </li>
<li>SystemEx_OnMButtonDown(x, y) </li>
<li>SystemEx_OnMButtonUp(x, y, dragged) </li>
</ul>
<p><u>Monitor information</u></p>
<ul>
<li>Monitors </li>
<li>NumberOfMonitors </li>
<li>GetMonitor(index) </li>
</ul>
<p>MonitorInfo object:</p>
<ul>
<li>IsPrimary </li>
<li>Left </li>
<li>Top </li>
<li>Bottom </li>
<li>Right </li>
</ul>
<p><u>Volume</u></p>
<ul>
<li>Volume </li>
<li>Mute </li>
<li>PeakValue (read-only) </li>
<li>SystemEx_OnVolumeEvent(volume) </li>
<li>SystemEx_OnMuteEvent(isMuted) </li>
</ul>
<p><u>Instance</u></p>
<ul>
<li>CommandLine</li>
<li>CommandLineArgs</li>
<li>IsFirstInstance </li>
<li>SystemEx_OnNewInstance(commandLineArgs)</li>
</ul>
<p><u>Misc</u></p>
<ul>
<li>VerifySignature(path, signature, type) </li>
</ul>
<p>&#160;</p>
<p><strong>Documentation</strong></p>
<p><em>Mouse wheel</em></p>
<p><u>SystemEx_OnMouseWheel(rotation)</u></p>
<p>When the mouse is over the object and the mousewheel is used, the <u>SystemEx</u>OnMouseWheel     <br />function will be called with the wheel rotation passed as a parameter. </p>
<p>The wheel rotation will be in number of lines. </p>
<p>Default value: 3    <br />Default value for page scrolling: 10 </p>
<p>A positive value indicates that the wheel was rotated forward, away from the user;    <br />a negative value indicates that the wheel was rotated backward, toward the user. </p>
<p><u>SystemEx_OnMButtonDown(x, y) &amp; SystemEx_OnMButtonUp(x, y, dragged)</u></p>
<p>When you middle click on your object, the <u>SystemEx</u>_OnMButtonDown function will be     <br />called. When you release the button, the<u>SystemEx</u>_OnMButtonUp function will be called. </p>
<p>Both functions will have the mouse coordinates relative to your object passed as    <br />parameters.</p>
<p>&#160;</p>
<p><em>Monitor Information</em></p>
<p>This one was asked by Zubaz to better handle multi-monitor systems. As it turns out, the virtual screen coordinates are not nearly enough to be able to position objects on multi-monitor systems. WMI is exposing monitor information, but it does not seems to work reliably (it only gives information for the first monitor on my system for example).</p>
<p><u><em>SystemEx.Monitors</em></u></p>
<p>Gets an array of MonitorInfo objects</p>
<p><em><u>SystemEx.GetMonitor(index)</u></em></p>
<p>Returns the MonitorInfo for the given screen</p>
<p><em><u>SystemEx.NumberOfMonitors</u></em></p>
<p>Gets the number of monitors on the machine</p>
<p>&#160;</p>
<p><em>Volume Information</em></p>
<p><u>SystemEx_OnVolumeEvent(volume)</u></p>
<p>When the user change the master volume through the volume mixer or another application    <br />your object callback is called. The volume parameter will contain the current master     <br />volume. </p>
<p>XP Compatibility: never called. </p>
<p><u>SystemEx_OnMuteEvent(isMuted)</u></p>
<p>If the volume is muted, your object callback is called.    <br />isMuted will be True if the volume has been muted, false otherwise. </p>
<p>XP Compatibility: never called. </p>
<p><u>SystemEx.Volume</u></p>
<p>Sets or gets the master volume. </p>
<p>Usage:&#160; <br />SystemEx.Volume = &lt;volume&gt;     <br />&lt;volume&gt; = SystemEx.Volume </p>
<p>&lt;volume&gt; should/will be between 0 and 100. Any value outside these bounds will be capped. </p>
<p><u>SystemEx.Mute</u></p>
<p>Mute or un-mute the audio stream </p>
<p>Usage:    <br />SystemEx.Mute = True     <br />isMuted = SystemEx.Mute </p>
<p>Mute can take two values: True and False.    <br />If Mute is True the audio stream is muted, otherwise it is not muted. </p>
<p><u>SystemEx.PeakValue</u></p>
<p>This is a read-only property. It allows you to get the peak level value for the    <br />currently playing sample. </p>
<p>Usage:&#160; <br />level = SystemEx.PeakValue     <br />level will be between 0 and 100. </p>
<p>XP Compatibility: might not work with some cards, in which case it will always&#160; returns 100.    <br />It reads from the waveout device, so it won&#8217;t work when reading from a CD for example.</p>
<p>&#160;</p>
<p><em>Instance Information</em></p>
<p><u>SystemEx.CommandLine</u></p>
<p>Get the full command line (including the path to the executable and DesktopX-specific arguments) </p>
<p><u>SystemEx.CommandLineArgs</u></p>
<p>Get an array of command line arguments.   <br />Command line arguments have been cleaned up to remove DesktopX-specific arguments (in the case of single-exe gadgets) </p>
<p><u>SystemEx.IsFirstInstance</u></p>
<p>Will be True if this is the first instance to run, False otherwise.   <br />It is preferable to check for it at startup and close the gadget accordingly,    <br />as only the first instance will receive a callback message when a new instance is started. </p>
<p><u>SystemEx_OnNewInstance(commandLineArgs)</u></p>
<p>Gets called when another instance is started. The command line arguments are passed in an array.</p>
<p>&#160;</p>
<p><em>Misc Information</em></p>
<p><u>SystemEx.VerifySignature(path, signature, type)</u>     <br />Check the signature of the file pointed to by path. </p>
<p>The only type of signature supported at this time is SIGNATURE_SHA1</p>
<p>&#160;</p>
<p><strong>Changelog</strong></p>
<p>1.0 Build 228:</p>
<ul>
<li>Renamed to DXSystemEx (plugin namespace is now SystemEx) </li>
<li>Added SHA1 signature check </li>
<li>Added MouseWheel and Middle button click callbacks (merged from DXMouseWheel) </li>
<li>Added Master volume control / Mute / Peak (merged from DXVolumeControl) </li>
<li>Added instance information (merged from DxInstance)</li>
</ul>
<p>1.0 Build 205:</p>
<ul>
<li>First test version </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/06/22/extended-system-control-plugin-for-desktopx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DXInstance: command line &amp; single instance plugin for DesktopX</title>
		<link>http://www.templier.info/2009/06/17/dxinstance-command-line-single-instance-plugin-for-desktopx/</link>
		<comments>http://www.templier.info/2009/06/17/dxinstance-command-line-single-instance-plugin-for-desktopx/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 07:02:45 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/06/17/dxinstance-command-line-single-instance-plugin-for-desktopx/</guid>
		<description><![CDATA[This is a very small plugin for DesktopX that exposes command line information in your scripts, allowing you to act on certain parameters. It also adds a new callback that is called when another instance is started and gives you its command line arguments. Use associate a gadget to a custom file type and be [...]]]></description>
			<content:encoded><![CDATA[<p>This is a very small plugin for DesktopX that exposes command line information in your scripts, allowing you to act on certain parameters. It also adds a new callback that is called when another instance is started and gives you its command line arguments.</p>
<p><strong>Use</strong></p>
<ul>
<li>associate a gadget to a custom file type and be able to do custom processing when called with the file path as an argument. </li>
<li>make the &quot;Tasks&quot; category of the jump list in Windows 7 usable (they are shortcuts and supposed to be available even if the application is not running, so they need to be shortcuts to the single exe, not the extracted one). </li>
<li>handle any other custom command line arguments like a normal application. </li>
</ul>
<p><strong></strong></p>
<p><strong>Documentation</strong></p>
<p>Remember to select “Allow multiple instances of the application to run” when exporting your gadget!</p>
<p>Here are the new functions/callbacks available to your scripts:</p>
<p><em>Instance.CommandLine</em></p>
<p>Get the full command line (including the path to the executable and DesktopX-specific arguments)</p>
<p><em>Instance.CommandLineArgs</em></p>
<p>Get an array of command line arguments. Command line arguments have been cleaned up to remove DesktopX-specific arguments (in the case of single-exe gadgets)</p>
<p><em>Instance.IsFirstInstance</em></p>
<p>Will be True if this is the first instance to run, False otherwise. It is preferable to check for it at startup and close the gadget accordingly, as only the first instance will receive a callback message when a new instance is started.</p>
<p><em>Instance_OnNewInstance(commandLineArgs)</em></p>
<p>Gets called when another instance is started. The command line arguments are passed in an array.</p>
<p><strong></strong></p>
<p><strong>Download </strong></p>
<p>This plugin functionality is now part of the DXSystemEx plugin. You can get more information in this <a href="http://www.templier.info/2009/06/22/extended-system-control-plugin-for-desktopx/">blog post</a>.</p>
<p>&#160;</p>
<p><em>Note:</em> This plugin will not work with single-exe gadgets (or widgets)! Due to the way simple deployment gadget’s command line is handled, adding arguments will result in the gadget not even starting (it’s treating almost any command line argument as a path&#8230;). I sent a bug report/request to Stardock, but in the meantime, you will have to use custom deployment. I have a binary patch available for DXAppCustom.bin that fixes the command line parsing and allows gadgets to get the original command line (but disables ObjectBar-related code as it’s kind of a hack), so it’s definitely fixable. Let’s hope the next version of DX will have a fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/06/17/dxinstance-command-line-single-instance-plugin-for-desktopx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DXTaskbar7: a DesktopX plugin to access Windows 7 taskbar extensions</title>
		<link>http://www.templier.info/2009/06/12/dxtaskbar7-a-desktopx-plugin-to-access-windows-7-taskbar-extensions/</link>
		<comments>http://www.templier.info/2009/06/12/dxtaskbar7-a-desktopx-plugin-to-access-windows-7-taskbar-extensions/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 20:07:51 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/06/12/dxtaskbar7-a-desktopx-plugin-to-access-windows-7-taskbar-extensions/</guid>
		<description><![CDATA[With Windows 7 a few months away, it was time to bring some of the new features to DesktopX. One of the things gadgets could really benefit from is the new extended taskbar. It has a few new options such as jump lists, tasks, thumbnails toolbars, icon overlays, progress bars and thumbnails. DXTaskbar7 is a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/07/image3.png"><img style="border-right-width: 0px; margin: 0px 0px 0px 3px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DXTaskbar7 - Preview" border="0" alt="DXTaskbar7 - Preview" align="right" src="http://www.templier.info/wp-content/uploads/2009/07/image3_thumb.png" width="300" height="214" /></a> </p>
<p>With Windows 7 a few months away, it was time to bring some of the new features to DesktopX. One of the things gadgets could really benefit from is the new extended taskbar. It has a few new options such as jump lists, tasks, thumbnails toolbars, icon overlays, progress bars and thumbnails.</p>
<p>DXTaskbar7 is a new plugin for DesktopX that allows you to access all those new features from your DesktopX scripts.</p>
<p><strong>How to help</strong></p>
<p>Download the DXTaskbar7 package and start creating gadgets &amp;widgets!</p>
<p><u>What to look for</u></p>
<ul>
<li>Tab handling problems: tabs not appearing, tab name and icon not properly updated </li>
<li>Toolbar: icon corruption </li>
<li>crashes or memory leaks </li>
</ul>
<p><u><strong><u><a href="http://www.templier.info/wp-content/uploads/2009/06/DeliveryTrackerWin7.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="DeliveryTracker-Win7" border="0" alt="DeliveryTracker-Win7" align="right" src="http://www.templier.info/wp-content/uploads/2009/06/DeliveryTrackerWin7_thumb.png" width="302" height="235" /></a></u></strong>What is broken/not working properly</u></p>
<ul>
<li>ActiveX controls are not drawn on the tab preview (this is a problem with DesktopX) </li>
<li>This is a DEBUG build, so it&#8217;s going to be slower than normal </li>
</ul>
<p><u>Links</u></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/dd378460%28VS.85%29.aspx">MSDN Documentation</a> </li>
</ul>
<p><strong>Documentation</strong></p>
<p><em>Tabs management</em></p>
<p><u>TabHwnd</u></p>
<p>Get the handle for that tab (to be used in ConfigureTab).</p>
<p><u>SetTabsIcon(image)</u></p>
<p>Set a global icon for all the tabs.</p>
<ul>
<li>image: path to a 16&#215;16 image file </li>
</ul>
<p><u>ConfigureTab(name, insertAfter)</u></p>
<p>Setup the tab name and position.</p>
<ul>
<li>name: title of the tab </li>
<li>insertAfter: handle of the tab after which the configured tab should be inserted. Use 0 to insert after the last tab </li>
</ul>
<p><u>SetTabActive()</u></p>
<p>Set the tab as active and show it in the tab list.</p>
<p><u>RemoveTab()</u></p>
<p>Remove the tab from the list.</p>
<p><u>Taskbar_OnCloseTab()</u></p>
<p>This function will be called when the user closes a tab in the list.</p>
<p>&#160;</p>
<p><em>ThumbBar</em></p>
<p><u>SetupButton(id, image, tooltip, flags)      <br /></u>    <br />Setup a new tab button. </p>
<ul>
<li>id: internal id (to be passed in the Taskbar_OnButtonClicked callback when the button is clicked) </li>
<li>image: path to a 16&#215;16 image file </li>
<li>tooltip: the tooltip to shown on mouse-over </li>
<li>flags: a list of flags (see DXTaskbarDefines.vbs) </li>
</ul>
<p><u>UpdateButton(id, image, tooltip, flags)</u>     </p>
<p>Update an existing tab button (only after buttons have been added).</p>
<ul>
<li>id: internal id (to be passed in the Taskbar_OnButtonClicked callback when the button is clicked) </li>
<li>image: path to a 16&#215;16 image file </li>
<li>tooltip: the tooltip to shown on mouse-over </li>
<li>flags: a list of flags (see DXTaskbarDefines.vbs) </li>
</ul>
<p><u>AddButtons()</u>     </p>
<p>Add the list of buttons to the tab.&#160; <br />A maximum of 7 buttons can be added at one time. After the buttons have been added, you cannot setup new ones. Use the UpdateButton function to modify existing buttons. </p>
<p><u>Taskbar_OnButtonClicked(id)</u>     </p>
<p>Called when the user clicks on a thumbbar button.</p>
<ul>
<li>id: the button id used in SetupButton and UpdateButton </li>
</ul>
<p>&#160;</p>
<p><em>Overlay</em></p>
<p><u>SetOverlayIcon(image, description)</u></p>
<p>Applies an overlay to a taskbar button to indicate application status or a notification to the user.</p>
<ul>
<li>image: path to a 16&#215;16 image file </li>
<li>description: an alternative text version, for accessibility purposes </li>
</ul>
<p>&#160;</p>
<p><em>Progress</em></p>
<p><u>SetProgressState(flag)</u></p>
<p>Sets the type and state of the progress indicator displayed on a taskbar button.</p>
<ul>
<li>flag: a progress flag (see DXTaskbarDefines.vbs) </li>
</ul>
<p><u>SetProgressValue(completed, total)</u></p>
<p>Displays or updates a progress bar hosted in a taskbar button to show the specific percentage completed of the full operation.</p>
<ul>
<li>completed: number of steps completed </li>
<li>total: total number of steps </li>
</ul>
<p>&#160;</p>
<p><em>Tasks and destinations</em></p>
<p><u>AddUserTask(name, path, arguments, icon, iconIndex, workingFolder)</u></p>
<p>Add a new user tasks (typically static links)</p>
<ul>
<li>name: name of the task </li>
<li>path: path to the program to execute </li>
<li>arguments: arguments to the program </li>
<li>icon: path to .ico file to use as an icon </li>
<li>iconIndex: index of the icon to use in the .ico file (typically 0 if you only have 1 icon type) </li>
<li>workingFolder: working folder when executing the program </li>
</ul>
<p><u>AddSeparator(category)</u></p>
<p>Add a separator</p>
<ul>
<li>category: the category to add a separator to. To add a separator to the tasks, use “Tasks” as the category. </li>
</ul>
<p><u>CommitList()</u></p>
<p>Declares that the Jump List is complete and ready for display</p>
<p><u>AbortList()</u></p>
<p>Discontinues a Jump List building session without committing any changes</p>
<p>&#160;</p>
<p><strong>Changelog</strong></p>
<p>1.0 Build 231</p>
<ul>
<li>Implemented Tasks </li>
</ul>
<p>1.0 Build 205:</p>
<ul>
<li>Added parameter checking in most functions </li>
<li>Fix for Vista and XP: all functions calls are ignored on those systems but are still available to scripts, so you should not get any script error </li>
</ul>
<p>1.0 Build 198:</p>
<ul>
<li>First test version </li>
</ul>
<p><strong></strong></p>
<p><strong>Download </strong></p>
<p>You can download it on <a href="http://www.wincustomize.com/skins.aspx?skinid=4510&amp;libid=3" target="_blank">Wincustomize</a> or from <a href="http://www.templier.info/downloads/DXTaskbar7.zip" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/06/12/dxtaskbar7-a-desktopx-plugin-to-access-windows-7-taskbar-extensions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Animator Script Component 1.1</title>
		<link>http://www.templier.info/2009/05/12/animator-script-component-1-1/</link>
		<comments>http://www.templier.info/2009/05/12/animator-script-component-1-1/#comments</comments>
		<pubDate>Tue, 12 May 2009 19:49:32 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/06/12/animator-script-component-1-1/</guid>
		<description><![CDATA[A small update for the Animator Component is now available. Changes from the internal version have been merged and a new method to remove all animations related to a specific object has been added. The Animator Sample now has checkboxes to enable/disable a specific animation and the requested script “export” has been added. You can [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/06/image.png"><img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.templier.info/wp-content/uploads/2009/06/image_thumb.png" width="292" height="235" /></a>A small update for the Animator Component is now available. Changes from the internal version have been merged and a new method to remove all animations related to a specific object has been added.</p>
<p>The Animator Sample now has checkboxes to enable/disable a specific animation and the requested script “export” has been added. You can now tweak your object animation and have a ready to use script copied to the clipboard.</p>
<p>Download it from <a href="http://www.wincustomize.com/skins.aspx?skinid=4477&amp;libid=3" target="_blank">Wincustomize</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/05/12/animator-script-component-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DXCanvas 2.0</title>
		<link>http://www.templier.info/2009/05/12/dxcanvas-20/</link>
		<comments>http://www.templier.info/2009/05/12/dxcanvas-20/#comments</comments>
		<pubDate>Tue, 12 May 2009 17:34:12 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/05/12/dxcanvas-20/</guid>
		<description><![CDATA[I released an update for DXCanvas yesterday. This new version is in sync with the latest Canvas specifications. Error handling has been overhauled and is now closer to the spec (some things still aren’t the same as we are not running inside a browser and thus do not have access to a real DOM tree). [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/05/image.png"><img style="border-right-width: 0px; margin: 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" align="right" src="http://www.templier.info/wp-content/uploads/2009/05/image-thumb.png" width="309" height="198" /></a> I released an update for DXCanvas yesterday. This new version is in sync with the latest Canvas specifications. Error handling has been overhauled and is now closer to the spec (some things still aren’t the same as we are not running inside a browser and thus do not have access to a real DOM tree).</p>
<p>The Canvas Controller widget has received a lot of updates and can now run the Canvas test suite and generate a test report. We now pass 92.1% of the tests.</p>
<p>The source code has also been moved to a public repository on <a href="http://code.google.com/p/threeoaks/" target="_blank">Google Code</a>.</p>
<p><strong>Download</strong></p>
<p>You can get DXCanvas from <a href="http://www.templier.info/downloads/DXCanvas.zip">here</a> or from <a href="http://www.wincustomize.com/skins.aspx?skinid=4461&amp;libid=3" target="_blank">Wincustomize</a>.</p>
<p><strong>Changelog</strong></p>
<p>2.0 Build 174:</p>
<ul>
<li>Sync with the latest version of the Canvas specifications </li>
<li>Added new createImageDataFrom function to create an new ImageData instance using an existing one dimensions </li>
<li>Exceptions now return the correct DOMException error code </li>
<li>Completed documentation of IDL interface </li>
<li>Updated Canvas Controller with a pin to desktop icon </li>
<li>Integrated test suite into Canvas Controller (allows to run all tests at once and generate a report) </li>
<li>Updated test suite generator to parse the XML generated by Canvas Controller </li>
<li>Fixed Canvas Controller dialog drag during long operations </li>
<li>Fixed crash on exit when BETA was expired&#160;&#160;&#160; </li>
<li>Fixed handling of negative width&amp;height values by drawImage </li>
<li>Fixed handling of nonfinite arguments by drawImage </li>
<li>Fixed pattern leak in drawImage </li>
<li>canvas.rect() now handles NaN and Infinity correctly </li>
<li>pattern.addColorStop() now handles NaN and Infinity correctly&#160;&#160;&#160; </li>
<li>Tweaked text drawing on paths&#160;&#160;&#160; </li>
<li>Updated box blur algorithm to use precomputed values (slightly faster) </li>
<li>Moved support libs to a subfolder of project&#160;&#160;&#160; </li>
<li>Moved source code from private repository to Google Code </li>
<li>Update Cairo (HEAD), Pixman (0.15.2), Pango (1.24.2), Glib (2.20.1) </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/05/12/dxcanvas-20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DockletX</title>
		<link>http://www.templier.info/2009/02/23/dockletx/</link>
		<comments>http://www.templier.info/2009/02/23/dockletx/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 15:57:34 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[ObjectDock]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/02/23/dockletx/</guid>
		<description><![CDATA[DockletX is a plugin for DesktopX that allows you to run ObjectDock docklets on your Desktop. It implements the ObjectDock Docklet host interface and can load pretty much any docklets built for ObjectDock. A few things are not implemented at this time: Attention animations (such as glow or bounce) Export (running as a gadget is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/02/dockletxpreview.jpg"><img style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 0px 0px 10px; border-left: 0px; border-bottom: 0px" title="DockletX-Preview" src="http://www.templier.info/wp-content/uploads/2009/02/dockletxpreview-thumb.jpg" border="0" alt="DockletX-Preview" width="280" height="235" align="right" /></a> DockletX is a plugin for DesktopX that allows you to run ObjectDock docklets on your Desktop.</p>
<p>It implements the ObjectDock Docklet host interface and can load pretty much any docklets built for ObjectDock.</p>
<p>A few things are not implemented at this time:</p>
<ul>
<li>Attention animations (such as glow or bounce)</li>
<li>Export (running as a gadget is not tested and might not be working properly)</li>
</ul>
<p> </p>
<p>Right now, only ObjectDock docklets are supported, but support for Y’z Dock and maybe AveDesk desklets is planned.</p>
<p> </p>
<p>Download <a href="http://www.wincustomize.com/skins.aspx?skinid=4480&amp;libid=3" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/02/23/dockletx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net 2.0 support for ObjectDock</title>
		<link>http://www.templier.info/2009/02/23/net-20-support-for-objectdock/</link>
		<comments>http://www.templier.info/2009/02/23/net-20-support-for-objectdock/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 15:05:38 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[ObjectDock]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/02/23/net-20-support-for-objectdock/</guid>
		<description><![CDATA[It’s been available for some time from Wincustomize but I never did any big announcement. The old .Net&#160; docklet for ObjectDock was compiled with .Net 1.0 and thus wasn’t working on newer version of the Framework. It also had problems on Vista with plugin registration which didn’t work with UAC on. The new version is [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/02/runtimesdkpreview.jpg"><img title="Runtime SDK-Preview" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="231" alt="Runtime SDK-Preview" src="http://www.templier.info/wp-content/uploads/2009/02/runtimesdkpreview-thumb.jpg" width="292" align="right" border="0" /></a>It’s been available for some time from Wincustomize but I never did any big announcement. The old .Net&#160; docklet for ObjectDock was compiled with .Net 1.0 and thus wasn’t working on newer version of the Framework. It also had problems on Vista with plugin registration which didn’t work with UAC on.
<p>The new version is compiled with .Net 2.0 and should run correctly on Vista. I recently published a small update with support for ContextMenuStrip for docklet context menus, a check for older versions of the SDK so that docklets can specify a minimum supported SDK version and a workaround for the broken OnDropFiles in ObjectDock. There is also two new Host methods exposed (DoClickAnimation and RemoveSelf). </p>
<p><strong>Download</strong></p>
<p>The .Net 2.0 runtime docklet is available from Wincustomize and you can download it <a href="http://www.wincustomize.com/skins.aspx?skinid=15157&amp;libid=29" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/02/23/net-20-support-for-objectdock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Animator Script Component for DesktopX</title>
		<link>http://www.templier.info/2009/02/01/animator-script-component-for-desktopx/</link>
		<comments>http://www.templier.info/2009/02/01/animator-script-component-for-desktopx/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 15:07:00 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2009/02/01/animator-script-component-for-desktopx/</guid>
		<description><![CDATA[I have this animation script I wrote 2 years ago for a widget (that I never finished), and I recently got back to work on a package tracking widget that is going to use some part of it. Still 70% of the script is never going to be used and I don&#8217;t want to throw [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2009/02/preview.png"><img style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 0px 0px 10px; border-right-width: 0px" title="Preview" src="http://www.templier.info/wp-content/uploads/2009/02/preview-thumb.png" border="0" alt="Preview" width="309" height="221" align="right" /></a> I have this animation script I wrote 2 years ago for a widget (that I never finished), and I recently got back to work on a package tracking widget that is going to use some part of it. Still 70% of the script is never going to be used and I don&#8217;t want to throw it away, especially if it can help other people.</p>
<p>I&#8217;ve noticed a lot of questions on how to animate groups of objects, and everybody seems to write semi-custom code over and over. My script takes the form of a Script Component (an external script file you reference in your DesktopX script), which means it can be reused without cut&amp;pasting dozens of lines of code every time.</p>
<p>Let me give you an example. In the script below Animator is the main object (already initialized, 3 lines of code, not of interest here). The last argument of each XXXAnim.Init methods is a callback that you can use to call a function when the animation is done. It&#8217;s especially interesting if you need to coordinate several complex animations. I&#8217;ve added variables so you can understand what each Init call does, but in practice the script would be a little bit simpler.</p>
<pre class="brush: vb">

opacity = 75
length_fade = 1500
delay_fade = 500
toX = 300
toY = 300
length_move = 5000
delay_move  = 0
 
Set fadeAnim = CreateObject(&quot;DXScriptLibrary.FadeAnimation&quot;)
Set moveAnim = CreateObject(&quot;DXScriptLibrary.MoveAnimation&quot;)
 
fadeAnim.Init DesktopX.Object(&quot;My_Object_Layer&quot;), opacity, length_fade, delay_fade, Animator.EaseNone, &quot;&quot;
moveAnim.Init DesktopX.Object(&quot;My_Object_Layer&quot;), toX, toY, length_move, delay_move, Animator.EaseIn, &quot;&quot;
 
Animator.Add Array(fadeAnim, moveAnim)
Animator.Start
</pre>
<p>So, what this code does is prepare 2 animations with different length and start time, give them to the animator component and then start the animations. The Animator object will automatically manage the animations, starting each one after the delay (and of course fade will apply to all child objects). You can also add a new animation while the previous ones are playing, it will be handled transparently, adjusting delays and total animation length.</p>
<p>As a bonus, you can specify the easing type. In the example, the object will start to move slowly and speed up as it moves through the animation.</p>
<p>There are 4 different animation objects (Fade, Move, Rotate, Resize) and 5 types of easing (EaseIn, EaseOut, EaseInOut, EaseOutElasticBig, BackOut). Everything is in separate components with minimal dependencies, so adding new stuff is relatively easy should you wish to so (new easing types for example)</p>
<p>Download from <a href="http://www.wincustomize.com/skins.aspx?skinid=4477&amp;libid=3" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2009/02/01/animator-script-component-for-desktopx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nightmares &#8211; a dynamic dream testing utility</title>
		<link>http://www.templier.info/2008/08/31/nightmares-a-dynamic-dream-testing-utility/</link>
		<comments>http://www.templier.info/2008/08/31/nightmares-a-dynamic-dream-testing-utility/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 00:03:09 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[Dreams]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2008/08/31/nightmares-a-dynamic-dream-testing-utility/</guid>
		<description><![CDATA[Nightmares is a small application created to test dynamic dreams. It runs them in a window, allowing you to debug them easily or to record a preview video. You can set the window size (default is 800&#215;600), chose an output file and FourCC code for the output video. It currently only runs unprotected dreams: the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.templier.info/wp-content/uploads/2008/08/nightmares-build-10173-dynamic-dream-testing-utility.png"><img border="0" alt="Nightmares (Build 1.0.173) - Dynamic dream testing utility" align="right" src="http://www.templier.info/wp-content/uploads/2008/08/nightmares-build-10173-dynamic-dream-testing-utility-thumb.png" width="305" height="231" /></a>Nightmares is a small application created to test dynamic dreams. It runs them in a window,     <br />allowing you to debug them easily or to record a preview video.</p>
<p>You can set the window size (default is 800&#215;600), chose an output file and FourCC code for the output video.</p>
<p>It currently only runs unprotected dreams: the dreams that come with DeskScapes will work, but any dynamic dream that you bought won&#8217;t.</p>
<p>See the readme file for command line switches.</p>
<p>Download test build <a title="Nightmares" href="http://www.templier.info/downloads/Nightmares.zip">here</a>.</p>
<p>Update: Added preliminary support for protected Dreams (you will have to activate them first through DeskScapes).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2008/08/31/nightmares-a-dynamic-dream-testing-utility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DXCanvas &#8211; a canvas implementation for DesktopX</title>
		<link>http://www.templier.info/2008/08/26/dxcanvas-a-canvas-implementation-for-desktopx/</link>
		<comments>http://www.templier.info/2008/08/26/dxcanvas-a-canvas-implementation-for-desktopx/#comments</comments>
		<pubDate>Tue, 26 Aug 2008 10:50:08 +0000</pubDate>
		<dc:creator>Julien</dc:creator>
				<category><![CDATA[DesktopX]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.templier.info/2008/08/26/dxcanvas-a-canvas-implementation-for-desktopx/</guid>
		<description><![CDATA[Every major browser has support for it, Yahoo! Widgets has support for it, how come there isn&#8217;t something for DesktopX? Enter DXCanvas, a DesktopX drawing plugin that implements the Canvas spec (plus some DesktopX-specific additions). How does it work DXCanvas is a DesktopX drawing plugin, which means it takes over drawing for the object it [...]]]></description>
			<content:encoded><![CDATA[<p>Every major browser has support for it, Yahoo! Widgets has support for it, how come there isn&#8217;t something for DesktopX? </p>
<p>Enter DXCanvas, a DesktopX drawing plugin that implements the Canvas spec (plus some DesktopX-specific additions).</p>
<p><strong>How does it work</strong></p>
<p><a href="http://www.templier.info/wp-content/uploads/2008/08/configure-canvas-plugin.png"><img border="0" alt="Configure Canvas Plugin" align="right" src="http://www.templier.info/wp-content/uploads/2008/08/configure-canvas-plugin-thumb.png" width="243" height="231" /></a></p>
<p>DXCanvas is a DesktopX drawing plugin, which means it takes over drawing for the object it is associated to.</p>
<p>In the configuration, you can set the initial size for the canvas. By default, the drawing surface size will be 300&#215;150. You can also specify whether you want the surface to be transparent and show the other objects or windows under it, or opaque.</p>
<p>A <em>canvas</em> object is made available to scripting. To be able to draw on the canvas, you need to request a context. This is done by calling getContext(type) on the canvas object. The only supported type right now is &quot;2d&quot;.</p>
<p>See the list of functions in the implementation section. Note that some are slightly different from the Canvas specification, or are completely new. This is to adjust to differences in what is possible in a browser and in DesktopX.</p>
<p><strong>Canvas Controller Widget</strong></p>
<p><a href="http://www.templier.info/wp-content/uploads/2008/08/preview.png"><img style="border-right-width: 0px; margin: 5px 1px 5px 5px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Preview" align="right" src="http://www.templier.info/wp-content/uploads/2008/08/preview-thumb.png" width="309" height="122" /></a> I&#8217;ve made a little widget to make testing easier. It loads a list of scripts from a user-defined folder and allows you to switch between them. It support scripts written in both JScript and VBScript.</p>
<p>It basically associate the script to an object having the DXCanvas plugin as a capability.</p>
<p>Two functions are required for the scripts to work: <em>Object_OnScriptEnter</em>() and <em>Object_OnScriptExit</em>().</p>
<p>The canvas size is reset its default size of 300&#215;150 when switching between scripts, so make sure to set it to the required size if needed by your script. </p>
<p>To add a new script to the list, create a new .js or .vbs file in a folder and select this folder in the widget preferences. A few test scripts are included in the Script folder.</p>
<p>It also support subfolders (only 1 folder deep), so you can organize your scripts in subfolders.</p>
<p><strong>How to help</strong></p>
<p>Download the Canvas Controller widget and start creating scripts!</p>
<p><u>What to look for</u></p>
<ul>
<li>strange behavior: colors are not right, context is not saved or restored correctly, etc. </li>
<li>the output from a script is different in Firefox or Safari </li>
<li>crashes or memory leaks (there are a least a few <img src='http://www.templier.info/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) </li>
</ul>
<p><u>What is broken/not working properly</u></p>
<ul>
<li>Drawing still flicker (not as badly as before) </li>
<li>This is a DEBUG build, so it&#8217;s going to be slower than normal </li>
</ul>
<p><u>Links</u></p>
<ul>
<li><a href="http://www.whatwg.org/specs/web-apps/current-work/#the-canvas">HTML5 Spec on Canvas</a> </li>
<li><a href="http://developer.mozilla.org/En/Canvas_tutorial">Canvas Tutorial</a> </li>
<li><a href="http://manual.widgets.yahoo.com/">Yahoo! Widgets Canvas Documentation</a> (Look in Core DOM Reference -&gt; Canvas / CanvasRenderingContext2D) </li>
</ul>
<p><strong>Changelog</strong></p>
<p>1.0 Build 225:</p>
<ul>
<li>Fixed large canvas objects taking a lot of CPU</li>
<li>Log is always enabled</li>
</ul>
<p>1.0 Build 217</p>
<ul>
<li>Fixed drawing being incomplete in some cases </li>
<li>Added workaround for pink color drawing transparent. DesktopX always use pink to draw transparent surfaces, even in per-pixel mode. rgb(255, 0, 255) will be changed to rgb(255, 1, 255) </li>
</ul>
<p>1.0 Build 214</p>
<ul>
<li>Added per-object log files </li>
<li>Added more log info when creating a new context object </li>
</ul>
<p>1.0 Build 211</p>
<ul>
<li>Added support for % in rgb/rgba colors </li>
<li>Added &quot;transparent&quot; color (equivalent to &quot;rgba(0,0,0,0)&quot;) </li>
<li>Added SVG colors &quot;darkgrey&quot;, &quot;darkslategrey&quot;, &quot;dimgrey&quot;, &quot;grey&quot;, &quot;lightgray&quot;, &quot;lightslategrey&quot; and &quot;slategrey&quot; </li>
<li>Zero size canvas is allowed </li>
<li>Properly share canvas state (context style stack was not properly shared before) </li>
<li>DrawImage and DrawImageRegion check for negative width and height and adjust the coordinates </li>
<li>Only match full color strings </li>
<li>Accept rgb values outside [0;255] and clamp the value properly </li>
<li>Clamp alpha and use premultiplied color values when painting with alpha (still somewhat wrong) </li>
<li>Fixed leak and crash with CanvasImageData &amp; CanvasPixelArray </li>
<li>Fixed crash with invalid parameters in createImageData and getImageData </li>
<li>Zero-length line gradients should paint nothing </li>
<li>Radial gradients with the same start and end circle should paint nothing </li>
<li>Image data now accepts negative width and height (you get the untransformed data for the resulting rectangle) </li>
<li>arc() with zero radius draws a line to the start point. </li>
<li>arcTo() has no effect if the context has no subpaths or if P0 = P1 </li>
<li>arcTo() draws a straight line to P1 if P1 = P2 or if radius = 0 </li>
<li>bezierCurveTo() has no effect if the context has no subpaths </li>
<li>lineTo() has no effect if the context has no subpaths </li>
<li>quadraticCurveTo() has no effect if the context has no subpaths </li>
<li>Updated cairo, pixman and pango libraries </li>
</ul>
<p>1.0 Build 201</p>
<ul>
<li>Added hsl/hsla color parsing </li>
<li>Added some logging (DXCanvas.log in object directory) </li>
<li>Fixed text stroking always drawing at position (0,0) </li>
<li>Fixed text baseline being off by the text height </li>
</ul>
<p>1.0 Build 191</p>
<ul>
<li>Added redraw calls buffering (less flickering) </li>
<li>Added debugMode attribute to canvas. In debug mode, passing invalid parameters will result in an error being raised instead of the invalid value being silently ignored. </li>
<li>No longer returns errors when passing invalid parameters to a lot of functions (as specified in Canvas specification) </li>
<li>CanvasPixelArray.XXX6(index, value) now takes an int instead of a char and will clamp that value to [0;255] </li>
</ul>
<p>1.0 Build 180</p>
<ul>
<li>Implemented toImage </li>
<li>Implemented createImageData, getImageData and putImageData </li>
<li>Added canvas support to createPattern, drawImage and drawImageRegion </li>
<li>Fixed createPattern, drawImage and drawImageRegion not working in VBScript </li>
<li>Fixed createPattern, drawImage and drawImageRegion not making a copy of the source image or canvas </li>
<li>Fixed drawImageRegion using wrong default values for dw and dh </li>
<li>Fixed drawImageRegion not creating a new path, resulting in image &quot;corruption&quot; </li>
</ul>
<p>1.0 Build 168</p>
<ul>
<li>Implemented font attribute setter/getter </li>
<li>Implemented fillText, strokeText and measureText (using Pango) </li>
<li>Implemented arcTo (using patch from Behdad Esfahbod) </li>
<li>Fixed image loading (SD_LOAD_IMAGE seems to be corrupting some images&#8230;) </li>
</ul>
<p>1.0 Build 159</p>
<ul>
<li>Implemented textAlign and textBaseline attributes setters/getters&#160; (not used yet) </li>
<li>Implemented createPattern, loadImage, drawImage and drawImageRegion </li>
<li>Update to cairo 1.7.4 (better support for text) </li>
<li>Statically linked to cairo lib (no need for cairo.dll anymore) </li>
</ul>
<p>1.0 Build 149</p>
<ul>
<li>First test version </li>
</ul>
<p><strong>Download</strong></p>
<p>You can download a test version <a title="DXCanvas Plugin for DesktopX" href="http://www.templier.info/downloads/DXCanvas.zip">here</a>. It only includes the Canvas Controller widget for now. Please do not use the DXCanvas plugin in your own objects and widgets yet. This version of the plugin will expire on the 10/01/2008.</p>
<p><strong>Implementation</strong></p>
<p>Under the hood, it&#8217;s using Cairo, a 2D vector graphics library that also powers the Mozilla and Yahoo Widgets implementations. Right now, the Cairo library is dynamically loaded at runtime, but I hope to have it statically linked into the plugin for the final version.</p>
<p>Here is a list classes with their attributes and functions and the state of their implementation</p>
<p><em>Canvas</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="536">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195">width</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="110" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="229">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195">height</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="110" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="229">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195">debugMode</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="110" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="229">Invalid input will raise an error instead of being ignored.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="196">getContext(type)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="111" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="229">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195">toImage(path)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="110" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="229">Saves to a PNG file (replaces toDataURL)</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><em>CanvasRenderingContext2D</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="536">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">globalAlpha</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">globalCompositeOperation</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">strokeStyle</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">fillStyle</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">lineWidth</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">lineCap</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">lineJoin</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">miterLimit</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">shadowOffsetX</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">Shadows are not implemented yet.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">shadowOffsetY</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">Shadows are not implemented yet.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">shadowBlur</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">Shadows are not implemented yet.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">shadowColor</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">Shadows are not implemented yet.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">font</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">textAlign</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">textBaseLine</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">Hanging and ideographic baselines are treated as alphabetic.</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">canvas</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">save</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">restore</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">scale(x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">rotate(angle)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">translate(x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">transform(m11, m12, m21, m22, dx, dy)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">setTransform(m11, m12, m21, m22, dx, dy)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">createLinearGradient(x0, y0, x1, y1)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">createRadialGradient(x0, y0, r0, x1, y1, r1)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">createPattern(input, repeat)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">clearRect(x, y, w, h)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">fillRect(x, y, w, h)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">strokeRect(x, y, w, h)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">beginPath</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">closePath</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">moveTo(x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">lineTo(x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">quadraticCurveTo(cpx, cpy, x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">arcTo(x1, y1, x2, y2, radius)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">rect(x, y, width, height)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">arc(x, y, radius, startAngle, endAngle, anticlockwise)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">fill()</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">stroke()</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">clip()</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">isPointInPath(x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">fillText(text, x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">strokeText(text, x, y)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">measureText(text)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">loadImage(path)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">drawImage(input, dx, dy, dw, dh)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">drawImageRegion(input, sx, sy, sw, sh, dx, dy, dz, dh)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">createImageData(sw, sh)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">getImageData(sx, sy, sw, sh)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="95" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="232">image data uses the BGRA format</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="213">putImageData(imageData, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="96" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="235">&#160;</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><em>Gradient</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="537">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">addColorStop(offset, color)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><em>ImageData</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="536">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">width</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">height</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">data</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><em>PixelArray</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="536">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">length</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">XXX5(index)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; background: #f5fafa; color: #797268; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">XXX6(index, value)</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><em>TextMetrics</em></p>
<table border="0" cellspacing="0" cellpadding="2" width="537">
<tbody>
<tr>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; border-left: #c1dad7 1px solid; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="195" align="center"><strong>Name</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="115" align="center"><strong>Implemented</strong></th>
<th style="border-bottom: #c1dad7 1px solid; text-align: left; padding-bottom: 6px; text-transform: uppercase; padding-left: 12px; padding-right: 6px; background: #cae8ea; letter-spacing: 2px; color: #4f6b72; border-top: #c1dad7 1px solid; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="230" align="center"><strong>Comment</strong></th>
</tr>
<tr>
<td style="border-bottom: #c1dad7 1px solid; border-left: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="191">width</td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="106" align="center"><font color="#008000"><strong>YES</strong></font></td>
<td style="border-bottom: #c1dad7 1px solid; padding-bottom: 6px; padding-left: 12px; padding-right: 6px; color: #4f6b72; border-right: #c1dad7 1px solid; padding-top: 6px" valign="top" width="242">&#160;</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.templier.info/2008/08/26/dxcanvas-a-canvas-implementation-for-desktopx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
