<?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/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
>

<channel>
	<title>EMSTONE Bebop &#187; GooCanvas</title>
	<atom:link href="http://bebop.emstone.com/tags/goocanvas/feed/" rel="self" type="application/rss+xml" />
	<link>http://bebop.emstone.com</link>
	<description>엠스톤 개발팀 블로그</description>
	<lastBuildDate>Sun, 29 Jan 2012 05:25:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
		<item>
		<title>GooCanvas 라이브러리에서 툴팁 모양 Polygon 생성하기</title>
		<link>http://bebop.emstone.com/2009/01/07/create-tooltip-polygon-with-goocanvas-library/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=create-tooltip-polygon-with-goocanvas-library</link>
		<comments>http://bebop.emstone.com/2009/01/07/create-tooltip-polygon-with-goocanvas-library/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 06:21:05 +0000</pubDate>
		<dc:creator>lethean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[GooCanvas]]></category>
		<category><![CDATA[GTK+]]></category>

		<guid isPermaLink="false">http://bebop.emstone.com/?p=396</guid>
		<description><![CDATA[Canvas 위에 정보를 표시하는 인터페이스로 Google map 과 비슷하게 툴팁 모양을 생각해 볼수 있는데 이를 위해서는 GooCanvasPolyline을 이용하면 됩니다. 예제에는 polyline을 그룹으로 관리하는 방식과 points 구조체를 이용하여 하나의 polyline을 구성하는 방식을 테스트 했습니다. 처음 방식은 툴팁내부의 색상을 &#8220;fill-color&#8221; 속성으로 영역을 &#8230; <a href="http://bebop.emstone.com/2009/01/07/create-tooltip-polygon-with-goocanvas-library/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Canvas 위에 정보를 표시하는 인터페이스로 Google map 과 비슷하게 툴팁 모양을  생각해 볼수 있는데 이를 위해서는 GooCanvasPolyline을 이용하면 됩니다.  예제에는 polyline을 그룹으로 관리하는 방식과 points 구조체를 이용하여 하나의 polyline을 구성하는 방식을 테스트 했습니다. 처음 방식은 툴팁내부의 색상을 &#8220;fill-color&#8221; 속성으로 영역을 채우지 못하고 pattern 등의 다른 방법을 이용해야 가능할 것으로 보입니다. 동작 여부는 아직 확인하지 못한 상태입니다. 두번째 방식으로는 쉽게 색상 표시가 가능 합니다.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">GooCanvasItem <span style="color: #339933;">*</span>polyline_item<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>polygon_item<span style="color: #339933;">;</span>
GooCanvasItem <span style="color: #339933;">*</span>group<span style="color: #339933;">;</span>
GooCanvasPoints <span style="color: #339933;">*</span>points<span style="color: #339933;">;</span>
&nbsp;
group <span style="color: #339933;">=</span> goo_canvas_group_new <span style="color: #009900;">&#40;</span>root<span style="color: #339933;">,</span>
                              <span style="color: #ff0000;">&quot;line-width&quot;</span><span style="color: #339933;">,</span> <span style="color:#800080;">2.0</span><span style="color: #339933;">,</span>
                              <span style="color: #ff0000;">&quot;line-cap&quot;</span><span style="color: #339933;">,</span> CAIRO_LINE_CAP_ROUND<span style="color: #339933;">,</span>
                              <span style="color: #ff0000;">&quot;stroke-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;yellow&quot;</span><span style="color: #339933;">,</span>
                              NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
goo_canvas_item_translate <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">15</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">65</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">15</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">65</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">30</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
polyline_item <span style="color: #339933;">=</span> goo_canvas_polyline_new_line <span style="color: #009900;">&#40;</span>group<span style="color: #339933;">,</span> <span style="color: #0000dd;">50</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
points <span style="color: #339933;">=</span> goo_canvas_points_new <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">30.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">20.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">30.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">6</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">15.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">65.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">30.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">30.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">50.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">11</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">30.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">12</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">50.0</span><span style="color: #339933;">;</span>
points<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>coords<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">13</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">;</span>
&nbsp;
polygon_item <span style="color: #339933;">=</span> goo_canvas_polyline_new <span style="color: #009900;">&#40;</span>root<span style="color: #339933;">,</span> TRUE<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span>
                                        <span style="color: #ff0000;">&quot;line-width&quot;</span><span style="color: #339933;">,</span> <span style="color:#800080;">1.0</span><span style="color: #339933;">,</span>
                                        <span style="color: #ff0000;">&quot;points&quot;</span><span style="color: #339933;">,</span> points<span style="color: #339933;">,</span>
                                        <span style="color: #ff0000;">&quot;stroke_color&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;red&quot;</span><span style="color: #339933;">,</span>
                                        <span style="color: #ff0000;">&quot;fill-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;yellow&quot;</span><span style="color: #339933;">,</span>
                                        NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><img class="aligncenter size-medium wp-image-397" src="http://bebop.emstone.com/wp-content/uploads/2009/01/goocanvas-polygon-300x137.png" alt="goocanvas-polygon" width="300" height="137" /></p>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2009/01/07/create-tooltip-polygon-with-goocanvas-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
		<item>
		<title>GooCanvas 라이브러리에서 마우스 이벤트 처리와 에니메이션 효과 주기</title>
		<link>http://bebop.emstone.com/2009/01/07/mouse-event-handling-and-animation-effects-in-goocanvas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mouse-event-handling-and-animation-effects-in-goocanvas</link>
		<comments>http://bebop.emstone.com/2009/01/07/mouse-event-handling-and-animation-effects-in-goocanvas/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 02:42:10 +0000</pubDate>
		<dc:creator>lethean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[GooCanvas]]></category>
		<category><![CDATA[GTK+]]></category>

		<guid isPermaLink="false">http://bebop.emstone.com/?p=387</guid>
		<description><![CDATA[이전에 설명한 이미지 파일을 보여주는 부분을 활용하여 작은 아이콘 이미지 를 배경 위에 표시하고 이 아이콘을 마우스로 움직이도록 하는 간단한 코드를 작성해 보도록 하겠습니다. GooCanvasItem 은 마우스 이벤트를 처리할 수 있는 singal 이 연결되어 있습니다. 이중 &#8220;motion_notify_event&#8221;, &#8220;button_press_event&#8221;, &#8220;button_release_event&#8221; 를 &#8230; <a href="http://bebop.emstone.com/2009/01/07/mouse-event-handling-and-animation-effects-in-goocanvas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>이전에 설명한 이미지 파일을 보여주는 부분을 활용하여 작은 아이콘 이미지 를 배경 위에 표시하고 이 아이콘을 마우스로 움직이도록 하는 간단한 코드를 작성해 보도록 하겠습니다.</p>
<p>GooCanvasItem 은 마우스 이벤트를 처리할 수 있는 singal 이 연결되어 있습니다. 이중 &#8220;motion_notify_event&#8221;, &#8220;button_press_event&#8221;, &#8220;button_release_event&#8221; 를 이용하면 됩니다.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">static</span> gboolean dragging <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>
<span style="color: #993333;">static</span> <span style="color: #993333;">double</span> drag_x<span style="color: #339933;">,</span> drag_y<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">static</span> gboolean
on_motion_notify <span style="color: #009900;">&#40;</span>GooCanvasItem <span style="color: #339933;">*</span>item<span style="color: #339933;">,</span>
                  GooCanvasItem <span style="color: #339933;">*</span>target<span style="color: #339933;">,</span>
                  GdkEventMotion <span style="color: #339933;">*</span>event<span style="color: #339933;">,</span>
                  gpointer data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>dragging <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> GDK_BUTTON1_MASK<span style="color: #009900;">&#41;</span>
   <span style="color: #009900;">&#123;</span>
      <span style="color: #993333;">double</span> new_x <span style="color: #339933;">=</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>x<span style="color: #339933;">;</span>
      <span style="color: #993333;">double</span> new_y <span style="color: #339933;">=</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>y<span style="color: #339933;">;</span>
&nbsp;
      goo_canvas_item_translate <span style="color: #009900;">&#40;</span>item<span style="color: #339933;">,</span> new_x <span style="color: #339933;">-</span> drag_x<span style="color: #339933;">,</span> new_y <span style="color: #339933;">-</span> drag_y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> gboolean
on_button_press <span style="color: #009900;">&#40;</span>GooCanvasItem <span style="color: #339933;">*</span>item<span style="color: #339933;">,</span>
                 GooCanvasItem <span style="color: #339933;">*</span>target<span style="color: #339933;">,</span>
                 GdkEventButton <span style="color: #339933;">*</span>event<span style="color: #339933;">,</span>
                 gpointer data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GooCanvas <span style="color: #339933;">*</span>canvas<span style="color: #339933;">;</span>
  GdkCursor <span style="color: #339933;">*</span>fleur<span style="color: #339933;">;</span>
&nbsp;
  canvas <span style="color: #339933;">=</span> goo_canvas_item_get_canvas <span style="color: #009900;">&#40;</span>item<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>button<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">:</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>state <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span> GDK_SHIFT_MASK<span style="color: #009900;">&#41;</span>
        <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">else</span>
        <span style="color: #009900;">&#123;</span>
          drag_x <span style="color: #339933;">=</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>x<span style="color: #339933;">;</span>
          drag_y <span style="color: #339933;">=</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>y<span style="color: #339933;">;</span>
&nbsp;
          fleur <span style="color: #339933;">=</span> gdk_cursor_new <span style="color: #009900;">&#40;</span>GDK_FLEUR<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         goo_canvas_pointer_grab <span style="color: #009900;">&#40;</span>canvas<span style="color: #339933;">,</span> item<span style="color: #339933;">,</span>
                                  GDK_POINTER_MOTION_MASK <span style="color: #339933;">|</span> GDK_BUTTON_RELEASE_MASK<span style="color: #339933;">,</span>
                                  fleur<span style="color: #339933;">,</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         gdk_cursor_unref <span style="color: #009900;">&#40;</span>fleur<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         dragging <span style="color: #339933;">=</span> TRUE<span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">:</span>
       goo_canvas_item_lower <span style="color: #009900;">&#40;</span>item<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">3</span><span style="color: #339933;">:</span>
       goo_canvas_item_raise <span style="color: #009900;">&#40;</span>item<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
       <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> TRUE<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">static</span> gboolean
on_button_release <span style="color: #009900;">&#40;</span>GooCanvasItem <span style="color: #339933;">*</span>item<span style="color: #339933;">,</span>
                   GooCanvasItem <span style="color: #339933;">*</span>target<span style="color: #339933;">,</span>
                   GdkEventButton <span style="color: #339933;">*</span>event<span style="color: #339933;">,</span>
                   gpointer data<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GooCanvas <span style="color: #339933;">*</span>canvas<span style="color: #339933;">;</span>
&nbsp;
  canvas <span style="color: #339933;">=</span> goo_canvas_item_get_canvas <span style="color: #009900;">&#40;</span>item<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  goo_canvas_pointer_ungrab <span style="color: #009900;">&#40;</span>canvas<span style="color: #339933;">,</span> item<span style="color: #339933;">,</span> event<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>time<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  dragging <span style="color: #339933;">=</span> FALSE<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> TRUE<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span>
main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  ...
&nbsp;
  <span style="color: #202020;">icon_pixbuf</span> <span style="color: #339933;">=</span> gdk_pixbuf_new_from_file <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;icon.png&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>err<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  icon_item <span style="color: #339933;">=</span> goo_canvas_image_new <span style="color: #009900;">&#40;</span>root<span style="color: #339933;">,</span> icon_pixbuf<span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">16</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">16</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  goo_canvas_item_set_simple_transform <span style="color: #009900;">&#40;</span>icon_item<span style="color: #339933;">,</span> <span style="color: #0000dd;">400</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">400</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  goo_canvas_item_animate <span style="color: #009900;">&#40;</span>icon2_item<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> FALSE<span style="color: #339933;">,</span> <span style="color: #0000dd;">400</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">40</span><span style="color: #339933;">,</span>
GOO_CANVAS_ANIMATE_BOUNCE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  g_signal_connect <span style="color: #009900;">&#40;</span>icon_item<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;motion_notify_event&quot;</span><span style="color: #339933;">,</span> G_CALLBACK <span style="color: #009900;">&#40;</span>on_motion_notify<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  g_signal_connect <span style="color: #009900;">&#40;</span>icon_item<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;button_press_event&quot;</span><span style="color: #339933;">,</span> G_CALLBACK <span style="color: #009900;">&#40;</span>on_button_press<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  g_signal_connect <span style="color: #009900;">&#40;</span>icon_item<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;button_release_event&quot;</span><span style="color: #339933;">,</span> G_CALLBACK
<span style="color: #009900;">&#40;</span>on_button_release<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  ...
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>이벤트 효과를 주기 위해서는 주의 해야할 점이 있습니다. 에니메이션 함수의 옵션중 Item 의 크기를 변경하는 옵션이 존재하는데 이 경우 크기가 점점 변하면서 이 Item 의 크기만 변하지 않고 cairo_surface까지 함께 크기가 변합니다. 따라서  위와 같이 이미지 위젯 생성시 (0,0) 위치를 기준이 실제 Item의 중간이 되도록 지정해 주지 않으면 크기가 변경되면서 Item의 위치도 함께 변경이 됩니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2009/01/07/mouse-event-handling-and-animation-effects-in-goocanvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
		<item>
		<title>GooCanvas 라이브러리를 이용하여 배경 이미지 그리기</title>
		<link>http://bebop.emstone.com/2009/01/06/draw-background-image-with-goocanvas-library/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=draw-background-image-with-goocanvas-library</link>
		<comments>http://bebop.emstone.com/2009/01/06/draw-background-image-with-goocanvas-library/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 01:46:22 +0000</pubDate>
		<dc:creator>lethean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[GooCanvas]]></category>
		<category><![CDATA[GTK+]]></category>

		<guid isPermaLink="false">http://bebop.emstone.com/?p=381</guid>
		<description><![CDATA[가장 처음으로 png 파일로 부터 배경이미지를 표시하는 작업을 진행합니다. 테스트 코드 컴파일을 위해서는 라이브러리 설치가 필요합니다. 이 문서에서는 Ubuntu 배포판을 기준으로 설명하도록 하겠습니다. libgoocanvas-common libgoocanvas-dev libgoocanvas3 위 패키지를 설치하고  간단히 라이브러리 path를 이용하여 컴파일 하면 됩니다. &#8220;pkg-config &#8211;cflags &#8211;libs goocanvas&#8221; &#8230; <a href="http://bebop.emstone.com/2009/01/06/draw-background-image-with-goocanvas-library/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>가장 처음으로 png 파일로 부터 배경이미지를 표시하는 작업을 진행합니다.</p>
<p>테스트 코드 컴파일을 위해서는 라이브러리 설치가 필요합니다. 이 문서에서는 Ubuntu 배포판을 기준으로 설명하도록 하겠습니다.</p>
<ul>
<li>libgoocanvas-common</li>
<li>libgoocanvas-dev</li>
<li>libgoocanvas3</li>
</ul>
<p>위 패키지를 설치하고  간단히 라이브러리 path를 이용하여 컴파일 하면 됩니다.</p>
<p>&#8220;pkg-config &#8211;cflags &#8211;libs goocanvas&#8221; 이용하면 의존하는 헤더파일과 라이브러리링크 위치를 얻을 수 있습니다.</p>
<pre>-I/usr/include/goocanvas-1.0 -I/usr/include/gtk-2.0 -I/usr/include/cairo
-I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/freetype2 -I/usr/include/libpng12  -lgoocanvas -lgtk-x11-2.0
-lgdk-x11-2.0 -latk-1.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0
-lgio-2.0 -lcairo -lpango-1.0 -lfreetype -lz -lfontconfig -lgobject-2.0
-lgmodule-2.0 -lglib-2.0</pre>
<p>아래 테스트 코드는 png 파일을 이용하여 배경을 그리고 위에 간단한 텍스트를 표시하는 기능을 수행합니다.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &amp;lt;goocanvas.h&amp;gt;</span>
<span style="color: #339933;">#include &amp;lt;gtk/gtk.h&amp;gt;</span>
<span style="color: #339933;">#include &amp;lt;stdio.h&amp;gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>argv<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GtkWidget <span style="color: #339933;">*</span>window<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>canvas<span style="color: #339933;">;</span>
  GooCanvasItem <span style="color: #339933;">*</span>root<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>image_item<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>text_item<span style="color: #339933;">;</span>
  GdkPixbuf <span style="color: #339933;">*</span>pixbuf<span style="color: #339933;">;</span>
  GError <span style="color: #339933;">*</span>err<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Initialize GTK+. */</span>
  gtk_set_locale <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_init <span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>argc<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>argv<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Create the window and widgets. */</span>
  window <span style="color: #339933;">=</span> gtk_window_new <span style="color: #009900;">&#40;</span>GTK_WINDOW_TOPLEVEL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_window_set_default_size <span style="color: #009900;">&#40;</span>GTK_WINDOW <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">640</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_widget_show <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  canvas <span style="color: #339933;">=</span> goo_canvas_new <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_widget_set_size_request <span style="color: #009900;">&#40;</span>canvas<span style="color: #339933;">,</span> <span style="color: #0000dd;">640</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  goo_canvas_set_bounds <span style="color: #009900;">&#40;</span>GOO_CANVAS <span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1000</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_widget_show <span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gtk_container_add <span style="color: #009900;">&#40;</span>GTK_CONTAINER <span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> canvas<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  root <span style="color: #339933;">=</span> goo_canvas_get_root_item <span style="color: #009900;">&#40;</span>GOO_CANVAS <span style="color: #009900;">&#40;</span>canvas<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Add a few simple items. */</span>
  err <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
  pixbuf <span style="color: #339933;">=</span> gdk_pixbuf_new_from_file <span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;bg.png&quot;</span><span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;</span>err<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>pixbuf <span style="color: #339933;">||</span> err<span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      fprintf <span style="color: #009900;">&#40;</span>stderr<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> err<span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      g_error_free <span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  image_item <span style="color: #339933;">=</span> goo_canvas_image_new <span style="color: #009900;">&#40;</span>root<span style="color: #339933;">,</span> pixbuf<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  text_item <span style="color: #339933;">=</span> goo_canvas_text_new <span style="color: #009900;">&#40;</span>root<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Hello World&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">300</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">300</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>
    GTK_ANCHOR_CENTER<span style="color: #339933;">,</span>
    <span style="color: #ff0000;">&quot;font&quot;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Sans 24&quot;</span><span style="color: #339933;">,</span>
    NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/* Pass control to the GTK+ main event loop. */</span>
  gtk_main <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<div id="attachment_382" class="wp-caption aligncenter" style="width: 660px"><img class="size-full wp-image-382" src="http://bebop.emstone.com/wp-content/uploads/2009/01/goocanvas-bg.png" alt="배경 이미지 표시 화면" width="650" height="509" /><p class="wp-caption-text">배경 이미지 표시 화면</p></div>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2009/01/06/draw-background-image-with-goocanvas-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
		<item>
		<title>GooCanvas 라이브러리 소개</title>
		<link>http://bebop.emstone.com/2009/01/05/goocanvas-introduction/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=goocanvas-introduction</link>
		<comments>http://bebop.emstone.com/2009/01/05/goocanvas-introduction/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 07:09:29 +0000</pubDate>
		<dc:creator>lethean</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[GooCanvas]]></category>
		<category><![CDATA[GTK+]]></category>

		<guid isPermaLink="false">http://bebop.emstone.com/?p=370</guid>
		<description><![CDATA[GooCanvas는 Gtk+ 기반의 2D Draw 기능을 수행하는 위젯기반 라이브러리입니다. 내부적으로 Cairo 라이브러리를 이용하고 있으며 기본 위젯인 GooCanvas 는 GtkContainer 를 상속받아 작성되어 있습니다. 모델/뷰 개념을 라이브러리에서 지원하고 있어 실제 화면에 보여지는 부분의 갱신이 필요할 경우 미리 생성해 놓은 모델을 바로 &#8230; <a href="http://bebop.emstone.com/2009/01/05/goocanvas-introduction/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>GooCanvas는 Gtk+ 기반의 2D Draw 기능을 수행하는 위젯기반 라이브러리입니다.</p>
<p>내부적으로 Cairo 라이브러리를 이용하고 있으며 기본 위젯인 GooCanvas 는 GtkContainer 를 상속받아 작성되어 있습니다. 모델/뷰 개념을 라이브러리에서 지원하고 있어 실제 화면에 보여지는 부분의 갱신이 필요할 경우 미리 생성해 놓은 모델을 바로 drawing 하도록 하여 새로운 이미지로의 변경이 용이할 것으로 보입니다.</p>
<p>각 이미지 primitive를 item 으로 지칭하며, 이 item 들은 GObject에서 상속된 GooCanvasItemSimple 객체로 부터 파생됩니다. 각 item 들은 해당 속성은 가지고 있지만, 기본 이벤트는 가지고 있지 않습니다. 이후 작업에서 GObject 의 이벤트를 이용하여 필요시 이벤트를 등록 사용하게 됩니다.</p>
<p>이 라이브러리의 특징을 살펴보면 다음의 기능및 특징을 가지고 있습니다.</p>
<ul>
<li>모델/뷰 개념 지원</li>
<li>기본 항목으로 rect/ellipse/polyline/text/image/grid/group</li>
<li>다각형/호 등을 지원하기 위한 path 를 지원</li>
<li>GtkTable Widget 과 같은 layout table 지원</li>
<li>Gtk+ Widget 내포</li>
<li>동일 위치의 화면에 보이는 item 순서 조절</li>
<li>모든 항목에 대한 변형(Transformation)이 가능 &#8211; cairo_matrix 를 이용</li>
<li>이벤트 핸들링 지원</li>
<li>Scrolling/Zooming 지원</li>
<li>캔버스의 크기가 변경되더라고 정적 item 은 크기를 조정</li>
<li>특정 크기 이하에서는 아이템이 보이지 않도록 조정 가능</li>
<li>간단한 에니메이션 효과</li>
<li>여러 단위(Units) 지원 &#8211; pixels/points/inches/millimeters</li>
</ul>
<p>이 라이브러리에 대한 자세한 내용은 <a title="http://live.gnome.org/GooCanvas" href="http://live.gnome.org/GooCanvas">http://live.gnome.org/GooCanvas</a> 에서 확인 할 수 있습니다.</p>
]]></content:encoded>
			<wfw:commentRss>http://bebop.emstone.com/2009/01/05/goocanvas-introduction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<creativeCommons:license>http://creativecommons.org/licenses/by-nc-nd/2.0/kr/</creativeCommons:license>
	</item>
	</channel>
</rss>

