<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>ClutterZoomAction: Clutter Reference Manual</title> <meta name="generator" content="DocBook XSL Stylesheets V1.78.1"> <link rel="home" href="index.html" title="Clutter Reference Manual"> <link rel="up" href="ch04.html" title="Actions"> <link rel="prev" href="ClutterRotateAction.html" title="ClutterRotateAction"> <link rel="next" href="ClutterTapAction.html" title="ClutterTapAction"> <meta name="generator" content="GTK-Doc V1.24 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> <td width="100%" align="left" class="shortcuts"> <a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> <a href="#ClutterZoomAction.description" class="shortcut">Description</a></span><span id="nav_hierarchy"> <span class="dim">|</span> <a href="#ClutterZoomAction.object-hierarchy" class="shortcut">Object Hierarchy</a></span><span id="nav_properties"> <span class="dim">|</span> <a href="#ClutterZoomAction.properties" class="shortcut">Properties</a></span><span id="nav_signals"> <span class="dim">|</span> <a href="#ClutterZoomAction.signals" class="shortcut">Signals</a></span> </td> <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> <td><a accesskey="u" href="ch04.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> <td><a accesskey="p" href="ClutterRotateAction.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> <td><a accesskey="n" href="ClutterTapAction.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> </tr></table> <div class="refentry"> <a name="ClutterZoomAction"></a><div class="titlepage"></div> <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle"><a name="ClutterZoomAction.top_of_page"></a>ClutterZoomAction</span></h2> <p>ClutterZoomAction — Action enabling zooming on actors</p> </td> <td class="gallery_image" valign="top" align="right"></td> </tr></table></div> <div class="refsect1"> <a name="ClutterZoomAction.functions"></a><h2>Functions</h2> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="functions_return"> <col class="functions_name"> </colgroup> <tbody> <tr> <td class="function_type"> <a class="link" href="ClutterAction.html" title="ClutterAction"><span class="returnvalue">ClutterAction</span></a> * </td> <td class="function_name"> <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-new" title="clutter_zoom_action_new ()">clutter_zoom_action_new</a> <span class="c_punctuation">()</span> </td> </tr> <tr> <td class="function_type"> <span class="returnvalue">void</span> </td> <td class="function_name"> <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-set-zoom-axis" title="clutter_zoom_action_set_zoom_axis ()">clutter_zoom_action_set_zoom_axis</a> <span class="c_punctuation">()</span> </td> </tr> <tr> <td class="function_type"> <a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis"><span class="returnvalue">ClutterZoomAxis</span></a> </td> <td class="function_name"> <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-get-zoom-axis" title="clutter_zoom_action_get_zoom_axis ()">clutter_zoom_action_get_zoom_axis</a> <span class="c_punctuation">()</span> </td> </tr> <tr> <td class="function_type"> <span class="returnvalue">void</span> </td> <td class="function_name"> <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-get-focal-point" title="clutter_zoom_action_get_focal_point ()">clutter_zoom_action_get_focal_point</a> <span class="c_punctuation">()</span> </td> </tr> <tr> <td class="function_type"> <span class="returnvalue">void</span> </td> <td class="function_name"> <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-get-transformed-focal-point" title="clutter_zoom_action_get_transformed_focal_point ()">clutter_zoom_action_get_transformed_focal_point</a> <span class="c_punctuation">()</span> </td> </tr> </tbody> </table></div> </div> <div class="refsect1"> <a name="ClutterZoomAction.properties"></a><h2>Properties</h2> <div class="informaltable"><table border="0"> <colgroup> <col width="150px" class="properties_type"> <col width="300px" class="properties_name"> <col width="200px" class="properties_flags"> </colgroup> <tbody><tr> <td class="property_type"><a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis"><span class="type">ClutterZoomAxis</span></a></td> <td class="property_name"><a class="link" href="ClutterZoomAction.html#ClutterZoomAction--zoom-axis" title="The “zoom-axis” property">zoom-axis</a></td> <td class="property_flags">Read / Write</td> </tr></tbody> </table></div> </div> <div class="refsect1"> <a name="ClutterZoomAction.signals"></a><h2>Signals</h2> <div class="informaltable"><table border="0"> <colgroup> <col width="150px" class="signals_return"> <col width="300px" class="signals_name"> <col width="200px" class="signals_flags"> </colgroup> <tbody><tr> <td class="signal_type"><span class="returnvalue">gboolean</span></td> <td class="signal_name"><a class="link" href="ClutterZoomAction.html#ClutterZoomAction-zoom" title="The “zoom” signal">zoom</a></td> <td class="signal_flags">Run Last</td> </tr></tbody> </table></div> </div> <div class="refsect1"> <a name="ClutterZoomAction.other"></a><h2>Types and Values</h2> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="name"> <col class="description"> </colgroup> <tbody> <tr> <td class="datatype_keyword">struct</td> <td class="function_name"><a class="link" href="ClutterZoomAction.html#ClutterZoomAction-struct" title="struct ClutterZoomAction">ClutterZoomAction</a></td> </tr> <tr> <td class="datatype_keyword">struct</td> <td class="function_name"><a class="link" href="ClutterZoomAction.html#ClutterZoomActionClass" title="struct ClutterZoomActionClass">ClutterZoomActionClass</a></td> </tr> <tr> <td class="datatype_keyword">enum</td> <td class="function_name"><a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis">ClutterZoomAxis</a></td> </tr> </tbody> </table></div> </div> <div class="refsect1"> <a name="ClutterZoomAction.object-hierarchy"></a><h2>Object Hierarchy</h2> <pre class="screen"> GObject <span class="lineart">╰──</span> GInitiallyUnowned <span class="lineart">╰──</span> <a class="link" href="ClutterActorMeta.html" title="ClutterActorMeta">ClutterActorMeta</a> <span class="lineart">╰──</span> <a class="link" href="ClutterAction.html" title="ClutterAction">ClutterAction</a> <span class="lineart">╰──</span> <a class="link" href="ClutterGestureAction.html" title="ClutterGestureAction">ClutterGestureAction</a> <span class="lineart">╰──</span> ClutterZoomAction </pre> </div> <div class="refsect1"> <a name="ClutterZoomAction.description"></a><h2>Description</h2> <p><a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> is a sub-class of <a class="link" href="ClutterGestureAction.html" title="ClutterGestureAction"><span class="type">ClutterGestureAction</span></a> that implements all the necessary logic for zooming actors using a "pinch" gesture between two touch points.</p> <p>The simplest usage of <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> consists in adding it to a <a class="link" href="ClutterActor.html" title="ClutterActor"><span class="type">ClutterActor</span></a> and setting it as reactive; for instance, the following code:</p> <div class="informalexample"> <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td class="listing_lines" align="right"><pre>1 2</pre></td> <td class="listing_code"><pre class="programlisting"><span class="function"><a href="ClutterActor.html#clutter-actor-add-action">clutter_actor_add_action</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">actor</span><span class="symbol">,</span><span class="normal"> </span><span class="function"><a href="ClutterZoomAction.html#clutter-zoom-action-new">clutter_zoom_action_new</a></span><span class="normal"> </span><span class="symbol">());</span> <span class="function"><a href="ClutterActor.html#clutter-actor-set-reactive">clutter_actor_set_reactive</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">actor</span><span class="symbol">,</span><span class="normal"> TRUE</span><span class="symbol">);</span></pre></td> </tr> </tbody> </table> </div> <p></p> <p>will automatically result in the actor to be scale according to the distance between two touch points.</p> </div> <div class="refsect1"> <a name="ClutterZoomAction.functions_details"></a><h2>Functions</h2> <div class="refsect2"> <a name="clutter-zoom-action-new"></a><h3>clutter_zoom_action_new ()</h3> <pre class="programlisting"><a class="link" href="ClutterAction.html" title="ClutterAction"><span class="returnvalue">ClutterAction</span></a> * clutter_zoom_action_new (<em class="parameter"><code><span class="type">void</span></code></em>);</pre> <p>Creates a new <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> instance</p> <div class="refsect3"> <a name="id-1.5.5.9.9.2.5"></a><h4>Returns</h4> <p> the newly created <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a></p> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="clutter-zoom-action-set-zoom-axis"></a><h3>clutter_zoom_action_set_zoom_axis ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> clutter_zoom_action_set_zoom_axis (<em class="parameter"><code><a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> *action</code></em>, <em class="parameter"><code><a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis"><span class="type">ClutterZoomAxis</span></a> axis</code></em>);</pre> <p>Restricts the zooming action to a specific axis</p> <div class="refsect3"> <a name="id-1.5.5.9.9.3.5"></a><h4>Parameters</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="parameters_name"> <col class="parameters_description"> <col width="200px" class="parameters_annotations"> </colgroup> <tbody> <tr> <td class="parameter_name"><p>action</p></td> <td class="parameter_description"><p>a <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a></p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>axis</p></td> <td class="parameter_description"><p>the axis to constraint the zooming to</p></td> <td class="parameter_annotations"> </td> </tr> </tbody> </table></div> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="clutter-zoom-action-get-zoom-axis"></a><h3>clutter_zoom_action_get_zoom_axis ()</h3> <pre class="programlisting"><a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis"><span class="returnvalue">ClutterZoomAxis</span></a> clutter_zoom_action_get_zoom_axis (<em class="parameter"><code><a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> *action</code></em>);</pre> <p>Retrieves the axis constraint set by <a class="link" href="ClutterZoomAction.html#clutter-zoom-action-set-zoom-axis" title="clutter_zoom_action_set_zoom_axis ()"><code class="function">clutter_zoom_action_set_zoom_axis()</code></a></p> <div class="refsect3"> <a name="id-1.5.5.9.9.4.5"></a><h4>Parameters</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="parameters_name"> <col class="parameters_description"> <col width="200px" class="parameters_annotations"> </colgroup> <tbody><tr> <td class="parameter_name"><p>action</p></td> <td class="parameter_description"><p>a <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a></p></td> <td class="parameter_annotations"> </td> </tr></tbody> </table></div> </div> <div class="refsect3"> <a name="id-1.5.5.9.9.4.6"></a><h4>Returns</h4> <p> the axis constraint</p> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="clutter-zoom-action-get-focal-point"></a><h3>clutter_zoom_action_get_focal_point ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> clutter_zoom_action_get_focal_point (<em class="parameter"><code><a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> *action</code></em>, <em class="parameter"><code><a class="link" href="clutter-Base-geometric-types.html#ClutterPoint"><span class="type">ClutterPoint</span></a> *point</code></em>);</pre> <p>Retrieves the focal point of the current zoom</p> <div class="refsect3"> <a name="id-1.5.5.9.9.5.5"></a><h4>Parameters</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="parameters_name"> <col class="parameters_description"> <col width="200px" class="parameters_annotations"> </colgroup> <tbody> <tr> <td class="parameter_name"><p>action</p></td> <td class="parameter_description"><p>a <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a></p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>point</p></td> <td class="parameter_description"><p> a <a class="link" href="clutter-Base-geometric-types.html#ClutterPoint"><span class="type">ClutterPoint</span></a>. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> </tr> </tbody> </table></div> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="clutter-zoom-action-get-transformed-focal-point"></a><h3>clutter_zoom_action_get_transformed_focal_point ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> clutter_zoom_action_get_transformed_focal_point (<em class="parameter"><code><a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> *action</code></em>, <em class="parameter"><code><a class="link" href="clutter-Base-geometric-types.html#ClutterPoint"><span class="type">ClutterPoint</span></a> *point</code></em>);</pre> <p>Retrieves the focal point relative to the actor's coordinates of the current zoom</p> <div class="refsect3"> <a name="id-1.5.5.9.9.6.5"></a><h4>Parameters</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="parameters_name"> <col class="parameters_description"> <col width="200px" class="parameters_annotations"> </colgroup> <tbody> <tr> <td class="parameter_name"><p>action</p></td> <td class="parameter_description"><p>a <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a></p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>point</p></td> <td class="parameter_description"><p> a <a class="link" href="clutter-Base-geometric-types.html#ClutterPoint"><span class="type">ClutterPoint</span></a>. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Parameter for returning results. Default is transfer full."><span class="acronym">out</span></acronym>]</span></td> </tr> </tbody> </table></div> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> </div> <div class="refsect1"> <a name="ClutterZoomAction.other_details"></a><h2>Types and Values</h2> <div class="refsect2"> <a name="ClutterZoomAction-struct"></a><h3>struct ClutterZoomAction</h3> <pre class="programlisting">struct ClutterZoomAction;</pre> <p>The <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> structure contains only private data and should be accessed using the provided API</p> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="ClutterZoomActionClass"></a><h3>struct ClutterZoomActionClass</h3> <pre class="programlisting">struct ClutterZoomActionClass { gboolean (* zoom) (ClutterZoomAction *action, ClutterActor *actor, ClutterPoint *focal_point, gdouble factor); }; </pre> <p>The <a class="link" href="ClutterZoomAction.html#ClutterZoomActionClass" title="struct ClutterZoomActionClass"><span class="type">ClutterZoomActionClass</span></a> structure contains only private data</p> <div class="refsect3"> <a name="id-1.5.5.9.10.3.5"></a><h4>Members</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="300px" class="struct_members_name"> <col class="struct_members_description"> <col width="200px" class="struct_members_annotations"> </colgroup> <tbody><tr> <td class="struct_member_name"><p><em class="structfield"><code><a name="ClutterZoomActionClass.zoom"></a>zoom</code></em> ()</p></td> <td class="struct_member_description"><p>class handler of the <a class="link" href="ClutterZoomAction.html#ClutterZoomAction-zoom" title="The “zoom” signal"><span class="type">“zoom”</span></a> signal</p></td> <td class="struct_member_annotations"> </td> </tr></tbody> </table></div> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> <hr> <div class="refsect2"> <a name="ClutterZoomAxis"></a><h3>enum ClutterZoomAxis</h3> <p>The axis of the constraint that should be applied by the zooming action.</p> <div class="refsect3"> <a name="id-1.5.5.9.10.4.4"></a><h4>Members</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="300px" class="enum_members_name"> <col class="enum_members_description"> <col width="200px" class="enum_members_annotations"> </colgroup> <tbody> <tr> <td class="enum_member_name"><p><a name="CLUTTER-ZOOM-X-AXIS:CAPS"></a>CLUTTER_ZOOM_X_AXIS</p></td> <td class="enum_member_description"> <p>Scale only on the X axis</p> </td> <td class="enum_member_annotations"> </td> </tr> <tr> <td class="enum_member_name"><p><a name="CLUTTER-ZOOM-Y-AXIS:CAPS"></a>CLUTTER_ZOOM_Y_AXIS</p></td> <td class="enum_member_description"> <p>Scale only on the Y axis</p> </td> <td class="enum_member_annotations"> </td> </tr> <tr> <td class="enum_member_name"><p><a name="CLUTTER-ZOOM-BOTH:CAPS"></a>CLUTTER_ZOOM_BOTH</p></td> <td class="enum_member_description"> <p>Scale on both axis</p> </td> <td class="enum_member_annotations"> </td> </tr> </tbody> </table></div> </div> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> </div> <div class="refsect1"> <a name="ClutterZoomAction.property-details"></a><h2>Property Details</h2> <div class="refsect2"> <a name="ClutterZoomAction--zoom-axis"></a><h3>The <code class="literal">“zoom-axis”</code> property</h3> <pre class="programlisting"> “zoom-axis” <a class="link" href="ClutterZoomAction.html#ClutterZoomAxis" title="enum ClutterZoomAxis"><span class="type">ClutterZoomAxis</span></a></pre> <p>Constraints the zooming action to the specified axis</p> <p>Flags: Read / Write</p> <p>Default value: CLUTTER_ZOOM_BOTH</p> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> </div> <div class="refsect1"> <a name="ClutterZoomAction.signal-details"></a><h2>Signal Details</h2> <div class="refsect2"> <a name="ClutterZoomAction-zoom"></a><h3>The <code class="literal">“zoom”</code> signal</h3> <pre class="programlisting"><span class="returnvalue">gboolean</span> user_function (<a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> *action, <a class="link" href="ClutterActor.html" title="ClutterActor"><span class="type">ClutterActor</span></a> *actor, <a class="link" href="clutter-Base-geometric-types.html#ClutterPoint"><span class="type">ClutterPoint</span></a> *focal_point, <span class="type">gdouble</span> factor, <span class="type">gpointer</span> user_data)</pre> <p>The ::zoom signal is emitted for each series of touch events that change the distance and focal point between the touch points.</p> <p>The default handler of the signal will call <a class="link" href="ClutterActor.html#clutter-actor-set-scale" title="clutter_actor_set_scale ()"><code class="function">clutter_actor_set_scale()</code></a> on <em class="parameter"><code>actor</code></em> using the ratio of the first distance between the touch points and the current distance. To override the default behaviour, connect to this signal and return <code class="literal">FALSE</code>.</p> <div class="refsect3"> <a name="id-1.5.5.9.12.2.6"></a><h4>Parameters</h4> <div class="informaltable"><table width="100%" border="0"> <colgroup> <col width="150px" class="parameters_name"> <col class="parameters_description"> <col width="200px" class="parameters_annotations"> </colgroup> <tbody> <tr> <td class="parameter_name"><p>action</p></td> <td class="parameter_description"><p>the <a class="link" href="ClutterZoomAction.html" title="ClutterZoomAction"><span class="type">ClutterZoomAction</span></a> that emitted the signal</p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>actor</p></td> <td class="parameter_description"><p>the <a class="link" href="ClutterActor.html" title="ClutterActor"><span class="type">ClutterActor</span></a> attached to the action</p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>focal_point</p></td> <td class="parameter_description"><p>the focal point of the zoom</p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>factor</p></td> <td class="parameter_description"><p>the initial distance between the 2 touch points</p></td> <td class="parameter_annotations"> </td> </tr> <tr> <td class="parameter_name"><p>user_data</p></td> <td class="parameter_description"><p>user data set when the signal handler was connected.</p></td> <td class="parameter_annotations"> </td> </tr> </tbody> </table></div> </div> <div class="refsect3"> <a name="id-1.5.5.9.12.2.7"></a><h4>Returns</h4> <p> <code class="literal">TRUE</code> if the zoom should continue, and <code class="literal">FALSE</code> if the zoom should be cancelled.</p> </div> <p>Flags: Run Last</p> <p class="since">Since: <a class="link" href="ix13.html#api-index-1.12">1.12</a></p> </div> </div> </div> <div class="footer"> <hr>Generated by GTK-Doc V1.24</div> </body> </html>