<?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>muhuk.com &#187; canvas</title>
	<atom:link href="http://www.muhuk.com/tag/canvas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muhuk.com</link>
	<description>know thyself</description>
	<lastBuildDate>Thu, 29 Dec 2011 05:05:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Using Layouts In Qooxdoo &#8211; Part 5: Basic &amp; Canvas</title>
		<link>http://www.muhuk.com/2009/04/using-layouts-in-qooxdoo-part-5-basic-canvas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-layouts-in-qooxdoo-part-5-basic-canvas</link>
		<comments>http://www.muhuk.com/2009/04/using-layouts-in-qooxdoo-part-5-basic-canvas/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 07:57:40 +0000</pubDate>
		<dc:creator>Atamert Ölçgen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[qooxdoo]]></category>
		<category><![CDATA[ria]]></category>
		<category><![CDATA[widget]]></category>

		<guid isPermaLink="false">http://www.muhuk.com/?p=183</guid>
		<description><![CDATA[This is the fifth part of a tutorial series about layout managers, container objects and object hierarchies in Qooxdoo. Read the first part (/2009/01/using-layouts-in-qooxdoo-part-1/).

<h3>Basic Layout Manager</h3>

<code>qx.ui.layout.Basic</code> layout manager positions your widgets with absolute coordinates. It doesn't have much to offer except the freedom of manual positioning.

We supply a <code>left</code> and <code>top</code> property when ...]]></description>
			<content:encoded><![CDATA[<p><small>This is the fifth part of a tutorial series about layout managers, container objects and object hierarchies in Qooxdoo. Read the first part <a href="http://www.muhuk.com/2009/01/using-layouts-in-qooxdoo-part-1/">here</a>.</small></p>

<h3>Basic Layout Manager</h3>

<p><code>qx.ui.layout.Basic</code> layout manager positions your widgets with absolute coordinates. It doesn&#8217;t have much to offer except the freedom of manual positioning.</p>

<p>We supply a <code>left</code> and <code>top</code> property when we add our widgets. Following example places buttons in a circular path, like a clock.</p>

<pre><code><span style="color:#9a9a9a">   1 </span><span style="color:#38ad24">/*</span>
<span style="color:#9a9a9a">   2 </span><span style="color:#38ad24">#asset(qooxdoolayouts/*)</span>
<span style="color:#9a9a9a">   3 </span><span style="color:#38ad24">*/</span>
<span style="color:#9a9a9a">   4 </span>qx<span style="color:#555555">.</span>Class<span style="color:#555555">.</span><span style="color:#d11ced">define</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;qooxdoolayouts.Application&quot;</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">   5 </span><span style="color:#555555">{</span>
<span style="color:#9a9a9a">   6 </span>    extend<span style="color:#555555">:</span> qx<span style="color:#555555">.</span>application<span style="color:#555555">.</span>Standalone<span style="color:#555555">,</span>
<span style="color:#9a9a9a">   7 </span>    members<span style="color:#555555">: {</span>
<span style="color:#9a9a9a">   8 </span>        main<span style="color:#555555">:</span> <span style="color:#ff3030; font-weight:bold">function</span><span style="color:#555555">(){</span>
<span style="color:#9a9a9a">   9 </span>            <span style="color:#ff3030; font-weight:bold">this</span><span style="color:#555555">.</span><span style="color:#d11ced">base</span><span style="color:#555555">(</span>arguments<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  10 </span>
<span style="color:#9a9a9a">  11 </span>            <span style="color:#ff3030; font-weight:bold">var</span> main_container <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>container<span style="color:#555555">.</span><span style="color:#d11ced">Composite</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  12 </span>
<span style="color:#9a9a9a">  13 </span>            <span style="color:#ff3030; font-weight:bold">var</span> layout_manager <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>layout<span style="color:#555555">.</span><span style="color:#d11ced">Basic</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  14 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">setLayout</span><span style="color:#555555">(</span>layout_manager<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  15 </span>
<span style="color:#9a9a9a">  16 </span>            <span style="color:#ff3030; font-weight:bold">var</span> btn_size <span style="color:#555555">=</span> <span style="color:#32ba06">50</span><span style="color:#555555">;</span>
<span style="color:#9a9a9a">  17 </span>            <span style="color:#ff3030; font-weight:bold">var</span> distance <span style="color:#555555">=</span> <span style="color:#32ba06">175</span><span style="color:#555555">;</span>
<span style="color:#9a9a9a">  18 </span>            <span style="color:#ff3030; font-weight:bold">var</span> pi2 <span style="color:#555555">=</span> <span style="color:#32ba06">2</span> <span style="color:#555555">*</span> <span style="color:#32ba06">3.141592</span><span style="color:#555555">;</span>
<span style="color:#9a9a9a">  19 </span>            center <span style="color:#555555">= {</span>
<span style="color:#9a9a9a">  20 </span>                x<span style="color:#555555">:</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">round</span><span style="color:#555555">(</span>qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getWidth</span><span style="color:#555555">()/</span><span style="color:#32ba06">2</span><span style="color:#555555">)-</span>btn_size<span style="color:#555555">/</span><span style="color:#32ba06">2</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  21 </span>                y<span style="color:#555555">:</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">round</span><span style="color:#555555">(</span>qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getHeight</span><span style="color:#555555">()/</span><span style="color:#32ba06">2</span><span style="color:#555555">)-</span>btn_size<span style="color:#555555">/</span><span style="color:#32ba06">2</span>
<span style="color:#9a9a9a">  22 </span>            <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  23 </span>
<span style="color:#9a9a9a">  24 </span>            <span style="color:#ff3030; font-weight:bold">for</span> <span style="color:#555555">(</span><span style="color:#ff3030; font-weight:bold">var</span> i<span style="color:#555555">=</span><span style="color:#32ba06">0</span><span style="color:#555555">;</span> i<span style="color:#555555">&lt;</span><span style="color:#32ba06">12</span><span style="color:#555555">;</span> i<span style="color:#555555">++) {</span>
<span style="color:#9a9a9a">  25 </span>                <span style="color:#ff3030; font-weight:bold">var</span> button <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;CW&quot;</span><span style="color:#555555">+(</span>i<span style="color:#555555">+</span><span style="color:#32ba06">1</span><span style="color:#555555">).</span><span style="color:#0000ff">toString</span><span style="color:#555555">());</span>
<span style="color:#9a9a9a">  26 </span>                button<span style="color:#555555">.</span><span style="color:#d11ced">setWidth</span><span style="color:#555555">(</span>btn_size<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  27 </span>                button<span style="color:#555555">.</span><span style="color:#d11ced">setHeight</span><span style="color:#555555">(</span>btn_size<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  28 </span>                <span style="color:#ff3030; font-weight:bold">var</span> dist_x <span style="color:#555555">=</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">round</span><span style="color:#555555">(</span>distance <span style="color:#555555">*</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">sin</span><span style="color:#555555">(-(</span>i<span style="color:#555555">/</span><span style="color:#32ba06">12</span><span style="color:#555555">+</span><span style="color:#32ba06">0.5</span><span style="color:#555555">)*</span>pi2<span style="color:#555555">));</span>
<span style="color:#9a9a9a">  29 </span>                <span style="color:#ff3030; font-weight:bold">var</span> dist_y <span style="color:#555555">=</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">round</span><span style="color:#555555">(</span>distance <span style="color:#555555">*</span> <span style="color:#0000ff">Math</span><span style="color:#555555">.</span><span style="color:#0000ff">cos</span><span style="color:#555555">(-(</span>i<span style="color:#555555">/</span><span style="color:#32ba06">12</span><span style="color:#555555">+</span><span style="color:#32ba06">0.5</span><span style="color:#555555">)*</span>pi2<span style="color:#555555">));</span>
<span style="color:#9a9a9a">  30 </span>                main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span>button<span style="color:#555555">, {</span>
<span style="color:#9a9a9a">  31 </span>                    left<span style="color:#555555">:</span> center<span style="color:#555555">.</span>x <span style="color:#555555">+</span> dist_x<span style="color:#555555">,</span>
<span style="color:#9a9a9a">  32 </span>                    <span style="color:#0000ff">top</span><span style="color:#555555">:</span> center<span style="color:#555555">.</span>y <span style="color:#555555">+</span> dist_y
<span style="color:#9a9a9a">  33 </span>                <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  34 </span>            <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  35 </span>
<span style="color:#9a9a9a">  36 </span>            <span style="color:#ff3030; font-weight:bold">var</span> application_root <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">this</span><span style="color:#555555">.</span><span style="color:#d11ced">getRoot</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  37 </span>            application_root<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span>main_container<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  38 </span>        <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  39 </span>    <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  40 </span><span style="color:#555555">});</span></code></pre>

<div id="attachment_186" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.muhuk.com/wp-content/uploads/2009/04/basic1.png"><img src="http://www.muhuk.com/wp-content/uploads/2009/04/basic1-300x187.png" alt="Basic Example" title="Basic Example" width="300" height="187" class="size-medium wp-image-186" /></a><p class="wp-caption-text">Basic Example</p></div>

<p>Nevermind the math. What is important is; this would be much harder to achieve with other, more advanced managers such as <code>Grid</code>.</p>

<h3>Canvas Layout Manager</h3>

<p><code>qx.ui.layout.Canvas</code> is a slightly advanced version of <code>Basic</code>. <code>Canvas</code> lets you define margins (of all four directions) and dimensions in percentage as well as in pixels.</p>

<p><code>Canvas</code> allows you to define all four margins. You don&#8217;t have to define all of them of course. For example if you define a <code>top</code> and <code>bottom</code> margin remaining space will be your widget&#8217;s <code>height</code><sup>1</sup>. Alternatively you can specify a <code>bottom</code> margin and a <code>height</code> for you widget. This way it will keep its position relative to container&#8217;s bottom edge.</p>

<p>One thing to keep in mind is <strong>margins are defined against container</strong>, not against a bounding box like <a href="http://en.wikipedia.org/wiki/Document_Object_Model">DOM</a>. Say, if you set the same <code>left</code> on two widgets, they&#8217;ll be stacked on top of each other if they happen to have the same vertical coordinates. The following example mimics a <code>Grid</code> layout using <code>Canvas</code>:</p>

<pre><span style="color:#9a9a9a">   1 </span><span style="color:#38ad24">/*</span>
<span style="color:#9a9a9a">   2 </span><span style="color:#38ad24">#asset(qooxdoolayouts/*)</span>
<span style="color:#9a9a9a">   3 </span><span style="color:#38ad24">*/</span>
<span style="color:#9a9a9a">   4 </span>qx<span style="color:#555555">.</span>Class<span style="color:#555555">.</span><span style="color:#d11ced">define</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;qooxdoolayouts.Application&quot;</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">   5 </span><span style="color:#555555">{</span>
<span style="color:#9a9a9a">   6 </span>    extend<span style="color:#555555">:</span> qx<span style="color:#555555">.</span>application<span style="color:#555555">.</span>Standalone<span style="color:#555555">,</span>
<span style="color:#9a9a9a">   7 </span>    members<span style="color:#555555">: {</span>
<span style="color:#9a9a9a">   8 </span>        main<span style="color:#555555">:</span> <span style="color:#ff3030; font-weight:bold">function</span><span style="color:#555555">(){</span>
<span style="color:#9a9a9a">   9 </span>            <span style="color:#ff3030; font-weight:bold">this</span><span style="color:#555555">.</span><span style="color:#d11ced">base</span><span style="color:#555555">(</span>arguments<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  10 </span>
<span style="color:#9a9a9a">  11 </span>            <span style="color:#ff3030; font-weight:bold">var</span> main_container <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>container<span style="color:#555555">.</span><span style="color:#d11ced">Composite</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  12 </span>
<span style="color:#9a9a9a">  13 </span>            <span style="color:#ff3030; font-weight:bold">var</span> layout_manager <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>layout<span style="color:#555555">.</span><span style="color:#d11ced">Canvas</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  14 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">setLayout</span><span style="color:#555555">(</span>layout_manager<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  15 </span>
<span style="color:#9a9a9a">  16 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span><span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;Child Widget 1&quot;</span><span style="color:#555555">), {</span>
<span style="color:#9a9a9a">  17 </span>                left<span style="color:#555555">:</span> <span style="color:#32ba06">20</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  18 </span>                <span style="color:#0000ff">top</span><span style="color:#555555">:</span> <span style="color:#32ba06">10</span>
<span style="color:#9a9a9a">  19 </span>            <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  20 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span><span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;Child Widget 2&quot;</span><span style="color:#555555">), {</span>
<span style="color:#9a9a9a">  21 </span>                left<span style="color:#555555">:</span> <span style="color:#32ba06">140</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  22 </span>                right<span style="color:#555555">:</span> <span style="color:#32ba06">20</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  23 </span>                <span style="color:#0000ff">top</span><span style="color:#555555">:</span> <span style="color:#32ba06">10</span>
<span style="color:#9a9a9a">  24 </span>            <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  25 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span><span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;Child Widget 3&quot;</span><span style="color:#555555">), {</span>
<span style="color:#9a9a9a">  26 </span>                left<span style="color:#555555">:</span> <span style="color:#32ba06">20</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  27 </span>                <span style="color:#0000ff">top</span><span style="color:#555555">:</span> <span style="color:#32ba06">50</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  28 </span>                bottom<span style="color:#555555">:</span> <span style="color:#32ba06">10</span>
<span style="color:#9a9a9a">  29 </span>            <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  30 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span><span style="color:#ff3030; font-weight:bold">new</span> qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;Child Widget 4&quot;</span><span style="color:#555555">), {</span>
<span style="color:#9a9a9a">  31 </span>                left<span style="color:#555555">:</span> <span style="color:#32ba06">140</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  32 </span>                right<span style="color:#555555">:</span> <span style="color:#32ba06">20</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  33 </span>                <span style="color:#0000ff">top</span><span style="color:#555555">:</span> <span style="color:#32ba06">50</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  34 </span>                bottom<span style="color:#555555">:</span> <span style="color:#32ba06">10</span>
<span style="color:#9a9a9a">  35 </span>            <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  36 </span>
<span style="color:#9a9a9a">  37 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">getChildren</span><span style="color:#555555">()[</span><span style="color:#32ba06">0</span><span style="color:#555555">].</span><span style="color:#d11ced">setWidth</span><span style="color:#555555">(</span><span style="color:#32ba06">100</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  38 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">getChildren</span><span style="color:#555555">()[</span><span style="color:#32ba06">2</span><span style="color:#555555">].</span><span style="color:#d11ced">setWidth</span><span style="color:#555555">(</span><span style="color:#32ba06">100</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  39 </span>
<span style="color:#9a9a9a">  40 </span>            <span style="color:#ff3030; font-weight:bold">var</span> application_root <span style="color:#555555">=</span> <span style="color:#ff3030; font-weight:bold">this</span><span style="color:#555555">.</span><span style="color:#d11ced">getRoot</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  41 </span>            application_root<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span>main_container<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  42 </span>
<span style="color:#9a9a9a">  43 </span>            application_root<span style="color:#555555">.</span><span style="color:#d11ced">addListener</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;resize&quot;</span><span style="color:#555555">,</span> <span style="color:#ff3030; font-weight:bold">function</span><span style="color:#555555">(</span>e<span style="color:#555555">) {</span>
<span style="color:#9a9a9a">  44 </span>                main_container<span style="color:#555555">.</span><span style="color:#d11ced">set</span><span style="color:#555555">({</span>
<span style="color:#9a9a9a">  45 </span>                    <span style="color:#1861a7">&quot;width&quot;</span><span style="color:#555555">:</span> qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getWidth</span><span style="color:#555555">(),</span>
<span style="color:#9a9a9a">  46 </span>                    <span style="color:#1861a7">&quot;height&quot;</span><span style="color:#555555">:</span> qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getHeight</span><span style="color:#555555">(),</span>
<span style="color:#9a9a9a">  47 </span>                <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  48 </span>            <span style="color:#555555">},</span> <span style="color:#ff3030; font-weight:bold">this</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  49 </span>        <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  50 </span>    <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  51 </span><span style="color:#555555">});</span>
</pre>

<div id="attachment_188" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.muhuk.com/wp-content/uploads/2009/04/canvas1.png"><img src="http://www.muhuk.com/wp-content/uploads/2009/04/canvas1-300x187.png" alt="Canvas Example 1" title="Canvas Example 1" width="300" height="187" class="size-medium wp-image-188" /></a><p class="wp-caption-text">Canvas Example 1</p></div>

<p>We set two widgets&#8217; widths manually (see lines 37 &amp; 38) to get all the margins (almost) equal. The first row only has <code>top</code> margin set, but the second row has both <code>top</code> and <code>bottom</code> margins. We have given widgets in the second row <code>top</code> margins taking:</p>

<ul>
<li>Top margin of first row</li>
<li>Height of the widgets in the first row</li>
</ul>

<p>and</p>

<ul>
<li>Margin between first and second rows</li>
</ul>

<p>into account. The same thing is true for the <code>left</code> margin of second column. This is because, as I mentioned, margins are calculated relative to container edges.</p>

<p>If you need to position your controls relative to one another, like DOM positioning, you should probably look into other layout managers like <code>Grid</code>. A good example of a use case for <code>Canvas</code> can be a mapping application such as <a href="http://maps.google.com/">Google Maps</a>.</p>

<p>As I mentioned earlier <code>Canvas</code> layout accepts parameters in percentages. Following example sets vertical margins in pixels but horizontal margins in percentages:</p>

<pre><span style="color:#9a9a9a">   1 </span><span style="color:#555555">/*</span>
<span style="color:#9a9a9a">   2 </span><span style="color:#38ad24">#asset(qooxdoolayouts/*)</span>
<span style="color:#9a9a9a">   3 </span><span style="color:#555555">*/</span>
<span style="color:#9a9a9a">   4 </span>qx<span style="color:#555555">.</span>Class<span style="color:#555555">.</span><span style="color:#d11ced">define</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;qooxdoolayouts.Application&quot;</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">   5 </span><span style="color:#555555">{</span>
<span style="color:#9a9a9a">   6 </span>    extend<span style="color:#555555">:</span> qx<span style="color:#555555">.</span>application<span style="color:#555555">.</span>Standalone<span style="color:#555555">,</span>
<span style="color:#9a9a9a">   7 </span>    members<span style="color:#555555">: {</span>
<span style="color:#9a9a9a">   8 </span>        main<span style="color:#555555">:</span> <span style="color:#d11ced">function</span><span style="color:#555555">(){</span>
<span style="color:#9a9a9a">   9 </span>            this<span style="color:#555555">.</span><span style="color:#d11ced">base</span><span style="color:#555555">(</span>arguments<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  10 </span>
<span style="color:#9a9a9a">  11 </span>            var main_container <span style="color:#555555">=</span> new qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>container<span style="color:#555555">.</span><span style="color:#d11ced">Composite</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  12 </span>
<span style="color:#9a9a9a">  13 </span>            var layout_manager <span style="color:#555555">=</span> new qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>layout<span style="color:#555555">.</span><span style="color:#d11ced">Canvas</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  14 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">setLayout</span><span style="color:#555555">(</span>layout_manager<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  15 </span>
<span style="color:#9a9a9a">  16 </span>            var button <span style="color:#555555">=</span> new qx<span style="color:#555555">.</span>ui<span style="color:#555555">.</span>form<span style="color:#555555">.</span><span style="color:#d11ced">Button</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;Child Widget 1&quot;</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  17 </span>            button<span style="color:#555555">.</span><span style="color:#d11ced">setMinWidth</span><span style="color:#555555">(</span><span style="color:#32ba06">250</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  18 </span>            button<span style="color:#555555">.</span><span style="color:#d11ced">setMaxWidth</span><span style="color:#555555">(</span><span style="color:#32ba06">400</span><span style="color:#555555">);</span>
<span style="color:#9a9a9a">  19 </span>            main_container<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span>button<span style="color:#555555">, {</span>
<span style="color:#9a9a9a">  20 </span>                left<span style="color:#555555">:</span> <span style="color:#1861a7">&quot;30%&quot;</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  21 </span>                right<span style="color:#555555">:</span> <span style="color:#1861a7">&quot;30%&quot;</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  22 </span>                top<span style="color:#555555">:</span> <span style="color:#32ba06">40</span><span style="color:#555555">,</span>
<span style="color:#9a9a9a">  23 </span>                bottom<span style="color:#555555">:</span> <span style="color:#32ba06">40</span>
<span style="color:#9a9a9a">  24 </span>            <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  25 </span>
<span style="color:#9a9a9a">  26 </span>            var application_root <span style="color:#555555">=</span> this<span style="color:#555555">.</span><span style="color:#d11ced">getRoot</span><span style="color:#555555">();</span>
<span style="color:#9a9a9a">  27 </span>            application_root<span style="color:#555555">.</span><span style="color:#d11ced">add</span><span style="color:#555555">(</span>main_container<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  28 </span>
<span style="color:#9a9a9a">  29 </span>            application_root<span style="color:#555555">.</span><span style="color:#d11ced">addListener</span><span style="color:#555555">(</span><span style="color:#1861a7">&quot;resize&quot;</span><span style="color:#555555">,</span> <span style="color:#d11ced">function</span><span style="color:#555555">(</span>e<span style="color:#555555">) {</span>
<span style="color:#9a9a9a">  30 </span>                main_container<span style="color:#555555">.</span><span style="color:#f48c23">set</span><span style="color:#555555">({</span>
<span style="color:#9a9a9a">  31 </span>                    <span style="color:#1861a7">&quot;width&quot;</span><span style="color:#555555">:</span> qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getWidth</span><span style="color:#555555">(),</span>
<span style="color:#9a9a9a">  32 </span>                    <span style="color:#1861a7">&quot;height&quot;</span><span style="color:#555555">:</span> qx<span style="color:#555555">.</span>bom<span style="color:#555555">.</span>Viewport<span style="color:#555555">.</span><span style="color:#d11ced">getHeight</span><span style="color:#555555">(),</span>
<span style="color:#9a9a9a">  33 </span>                <span style="color:#555555">});</span>
<span style="color:#9a9a9a">  34 </span>            <span style="color:#555555">},</span> this<span style="color:#555555">);</span>
<span style="color:#9a9a9a">  35 </span>        <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  36 </span>    <span style="color:#555555">}</span>
<span style="color:#9a9a9a">  37 </span><span style="color:#555555">});</span>
</pre>

<hr />

<p><strong>1</strong>: Whether your widget grows this high depends. Let&#8217;s say that height is reserved for your widget.</p>
<div><a class="addthis_button" href="http://www.muhuk.com//addthis.com/bookmark.php?v=250" addthis:url='http://www.muhuk.com/2009/04/using-layouts-in-qooxdoo-part-5-basic-canvas/' addthis:title='Using Layouts In Qooxdoo &#8211; Part 5: Basic &amp; Canvas '><img src="//cache.addthis.com/cachefly/static/btn/v2/lg-share-en.gif" width="125" height="16" alt="Bookmark and Share" style="border:0"/></a></div><p>No related posts.</p><p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.muhuk.com/2009/04/using-layouts-in-qooxdoo-part-5-basic-canvas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

