Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 18b54cd0250a7489168a038c67771391 > files > 94

evas-devel-1.0.1-1.fc16.i686.rpm

<html>
<head>
    <title>Evas: Smart Functions</title>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    <meta name="author" content="Andres Blanc" >
    
    <link rel="icon" href="img/favicon.png" type="image/x-icon">
    <link rel="shortcut icon" href="img/favicon.png" type="image/x-icon">
    <link rel="icon" href="img/favicon.png" type="image/ico">
    <link rel="shortcut icon" href="img/favicon.png" type="image/ico">

    <link rel="stylesheet" type="text/css" media="screen" href="e.css">
    <link rel="stylesheet" type="text/css" media="screen" href="edoxy.css">
</head>

<body>

<div id="container">

<div id="header">
<div class="layout">
    
    <h1><span>Enlightenment</span></h1>
    <h2><span>Beauty at your fingertips</span></h2>

    <div class="menu-container">
        <div class="menu">
            <ul>
	        <li class="current"><a href="http://web.enlightenment.org/p.php?p=docs">Docs</a></li>
                <li><a href="http://trac.enlightenment.org/e">Tracker</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=contact">Contact</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=contribute">Contribute</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=support">Support</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=download">Download</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=about">About</a></li>
                <li><a href="http://www.enlightenment.org/p.php?p=news">News</a></li>
                <li><a href="http://www.enlightenment.org/">Home</a></li>
            </ul>
        </div>
    </div>

    <div class="doxytitle">
        Evas Documentation <small>at Thu Jul 14 2011</small>
    </div>

    <div class="menu-container">
        <div class="submenu">
            <ul class="current">
                <li><a href="todo.html">Todo</a></li>
                <li><a href="files.html">Files</a></li>
                <li><a href="annotated.html">Data Structures</a></li>
                <li><a href="globals.html">Globals</a></li>
                <li><a href="modules.html">Modules</a></li>
                <li><a href="pages.html">Related Pages</a></li>
	        <li class="current"><a href="index.html">Main Page</a></li>
            </ul>
        </div>
    </div>


    <div class="clear"></div>
</div>
</div>

<div id="content">
<div class="layout">
<!-- Generated by Doxygen 1.7.4 -->
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Defines</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Smart Functions</div>  </div>
</div>
<div class="contents">

<p>Functions that deal with Evas_Smart's, creating definition (classes) of objects that will have customized behavior for methods like <a class="el" href="group__Evas__Object__Group__Basic.html#ga78fa8858c51707f1a557b720014b71cc" title="Moves the given evas object to the given location.">evas_object_move()</a>, <a class="el" href="group__Evas__Object__Group__Basic.html#ga34df8b33704deafd2a25f40e3c09d149" title="Changes the size of the given evas object.">evas_object_resize()</a>, <a class="el" href="group__Evas__Object__Group__Basic.html#ga19eabaaeec1ea375366e201f533f3d56" title="Clip one object to another.">evas_object_clip_set()</a> and others.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__Evas__Smart__Class.html">_Evas_Smart_Class</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">a smart object class  <a href="struct__Evas__Smart__Class.html#details">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="struct__Evas__Smart__Cb__Description.html">_Evas_Smart_Cb_Description</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Describes a callback used by a smart class <a class="el" href="group__Evas__Smart__Object__Group.html#ga17bbe660f5bf9d8997913b08882f6f9e" title="Call any smart callbacks on obj for event.">evas_object_smart_callback_call()</a>, particularly useful to explain to user and its code (ie: introspection) what the parameter <code>event_info</code> will contain.  <a href="struct__Evas__Smart__Cb__Description.html#details">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga1ca1514302a47188c921b232d6ce42db"></a><!-- doxytag: member="Evas_Smart_Group::EVAS_SMART_CLASS_VERSION" ref="ga1ca1514302a47188c921b232d6ce42db" args="" -->
#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga1ca1514302a47188c921b232d6ce42db">EVAS_SMART_CLASS_VERSION</a>&#160;&#160;&#160;4</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">The version you have to put into the version field in the smart class struct. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga223f5d420c1e22275cd6490cd77c85f0">EVAS_SMART_CLASS_INIT_NULL</a>&#160;&#160;&#160;{NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializer to zero a whole Evas_Smart_Class structure.  <a href="#ga223f5d420c1e22275cd6490cd77c85f0"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#gaaa610a135c79167162405b56cffe8562">EVAS_SMART_CLASS_INIT_VERSION</a>&#160;&#160;&#160;{NULL, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializer to zero a whole Evas_Smart_Class structure and set version.  <a href="#gaaa610a135c79167162405b56cffe8562"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#gaff2bbd5bb79e51ad8d31f98106caff77">EVAS_SMART_CLASS_INIT_NAME_VERSION</a>(name)&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializer to zero a whole Evas_Smart_Class structure and set name and version.  <a href="#gaff2bbd5bb79e51ad8d31f98106caff77"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga653b7bf36c2c87bd38d8126e11a4671d">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</a>(name, parent)&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, NULL, NULL}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class.  <a href="#ga653b7bf36c2c87bd38d8126e11a4671d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga5ebe1775142621cc3b75a3c57085ec83">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</a>(name, parent, callbacks)&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, callbacks, NULL}</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callbacks definition.  <a href="#ga5ebe1775142621cc3b75a3c57085ec83"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga58dc94af6f064b39b2bf0155908fbe52">EVAS_SMART_SUBCLASS_NEW</a>(smart_name, prefix, api_type, parent_type, parent_func, cb_desc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience macro to subclass a Smart Class.  <a href="#ga58dc94af6f064b39b2bf0155908fbe52"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga4aa4b72aafa0391144fb0171aeff2ccd">EVAS_SMART_DATA_ALLOC</a>(o, priv_type)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience macro to allocate smart data only if needed.  <a href="#ga4aa4b72aafa0391144fb0171aeff2ccd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga6888875280ccf11f026e09c890650c95">evas_smart_class_inherit</a>(sc, parent_sc)&#160;&#160;&#160;evas_smart_class_inherit_full(sc, parent_sc, sizeof(*parent_sc))</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Easy to use version of <a class="el" href="group__Evas__Smart__Group.html#ga21f5af32f724500c3380906d166fc49f" title="Sets one class to inherit from the other.">evas_smart_class_inherit_full()</a>.  <a href="#ga6888875280ccf11f026e09c890650c95"></a><br/></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="gaea15f67e901bf5380cdb67dc1bb43391"></a><!-- doxytag: member="Evas_Smart_Group::Evas_Smart_Class" ref="gaea15f67e901bf5380cdb67dc1bb43391" args="" -->
typedef struct <a class="el" href="struct__Evas__Smart__Class.html">_Evas_Smart_Class</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#gaea15f67e901bf5380cdb67dc1bb43391">Evas_Smart_Class</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">A smart object base class. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ga0ad0e7d482d7660e756e275d355e3634"></a><!-- doxytag: member="Evas_Smart_Group::Evas_Smart_Cb_Description" ref="ga0ad0e7d482d7660e756e275d355e3634" args="" -->
typedef struct <br class="typebreak"/>
<a class="el" href="struct__Evas__Smart__Cb__Description.html">_Evas_Smart_Cb_Description</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga0ad0e7d482d7660e756e275d355e3634">Evas_Smart_Cb_Description</a></td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">A smart object callback description, used to provide introspection. <br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga3501ae449533ae15eee9cbf65811cad2">evas_smart_free</a> (<a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *s)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Free an Evas_Smart.  <a href="#ga3501ae449533ae15eee9cbf65811cad2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga25a97a07a32a460c8c2d55916481dd1a">evas_smart_class_new</a> (const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *sc)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an Evas_Smart from an Evas_Smart_Class.  <a href="#ga25a97a07a32a460c8c2d55916481dd1a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#gac41799a0e334d515fa8e07313b88c611">evas_smart_class_get</a> (const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *s)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Evas_Smart_Class of an Evas_Smart.  <a href="#gac41799a0e334d515fa8e07313b88c611"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#gaa88f3f98a71031573b8dfc4bfeac2f64">evas_smart_data_get</a> (const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *s)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the data pointer set on an Evas_Smart.  <a href="#gaa88f3f98a71031573b8dfc4bfeac2f64"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI const <br class="typebreak"/>
<a class="el" href="struct__Evas__Smart__Cb__Description.html">Evas_Smart_Cb_Description</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga67ca7d389fd32a2dc4d7d6e29430d900">evas_smart_callbacks_descriptions_get</a> (const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *s, unsigned int *count)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the callbacks known by this Evas_Smart.  <a href="#ga67ca7d389fd32a2dc4d7d6e29430d900"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI const <br class="typebreak"/>
<a class="el" href="struct__Evas__Smart__Cb__Description.html">Evas_Smart_Cb_Description</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga5532335a315b4c84ab914afbbe771363">evas_smart_callback_description_find</a> (const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *s, const char *name)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Find callback description for callback called <em>name</em>.  <a href="#ga5532335a315b4c84ab914afbbe771363"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">EAPI Eina_Bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__Evas__Smart__Group.html#ga21f5af32f724500c3380906d166fc49f">evas_smart_class_inherit_full</a> (<a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *sc, const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *parent_sc, unsigned int parent_sc_size)</td></tr>
<tr><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets one class to inherit from the other.  <a href="#ga21f5af32f724500c3380906d166fc49f"></a><br/></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>Functions that deal with Evas_Smart's, creating definition (classes) of objects that will have customized behavior for methods like <a class="el" href="group__Evas__Object__Group__Basic.html#ga78fa8858c51707f1a557b720014b71cc" title="Moves the given evas object to the given location.">evas_object_move()</a>, <a class="el" href="group__Evas__Object__Group__Basic.html#ga34df8b33704deafd2a25f40e3c09d149" title="Changes the size of the given evas object.">evas_object_resize()</a>, <a class="el" href="group__Evas__Object__Group__Basic.html#ga19eabaaeec1ea375366e201f533f3d56" title="Clip one object to another.">evas_object_clip_set()</a> and others. </p>
<p>These objects will accept the generic methods defined in <a class="el" href="group__Evas__Object__Group.html">Generic Object Functions</a> and the extensions defined in <a class="el" href="group__Evas__Smart__Object__Group.html">Smart Object Functions</a>. There are couple of existent smart objects in Evas itself, see <a class="el" href="group__Evas__Object__Box.html">Box (Sequence) Smart Object.</a>, <a class="el" href="group__Evas__Object__Table.html">Table Smart Object.</a> and <a class="el" href="group__Evas__Smart__Object__Clipped.html">Clipped Smart Object</a>. </p>
<hr/><h2>Define Documentation</h2>
<a class="anchor" id="ga6888875280ccf11f026e09c890650c95"></a><!-- doxytag: member="Evas.h::evas_smart_class_inherit" ref="ga6888875280ccf11f026e09c890650c95" args="(sc, parent_sc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define evas_smart_class_inherit</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">sc, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">parent_sc&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;evas_smart_class_inherit_full(sc, parent_sc, sizeof(*parent_sc))</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Easy to use version of <a class="el" href="group__Evas__Smart__Group.html#ga21f5af32f724500c3380906d166fc49f" title="Sets one class to inherit from the other.">evas_smart_class_inherit_full()</a>. </p>
<p>This version will use sizeof(parent_sc), copying everything.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">sc</td><td>child class, will have methods copied from <em>parent_sc</em> </td></tr>
    <tr><td class="paramname">parent_sc</td><td>parent class, will provide contents to be copied. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 on success, 0 on failure. </dd></dl>

</div>
</div>
<a class="anchor" id="gaff2bbd5bb79e51ad8d31f98106caff77"></a><!-- doxytag: member="Evas.h::EVAS_SMART_CLASS_INIT_NAME_VERSION" ref="gaff2bbd5bb79e51ad8d31f98106caff77" args="(name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_CLASS_INIT_NAME_VERSION</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">name</td><td>)</td>
          <td>&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initializer to zero a whole Evas_Smart_Class structure and set name and version. </p>
<p>Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to latest EVAS_SMART_CLASS_VERSION and name to the specified value.</p>
<p>It will keep a reference to name field as a "const char *", that is, name must be available while the structure is used (hint: static or global!) and will not be modified.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Group.html#ga223f5d420c1e22275cd6490cd77c85f0" title="Initializer to zero a whole Evas_Smart_Class structure.">EVAS_SMART_CLASS_INIT_NULL</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaaa610a135c79167162405b56cffe8562" title="Initializer to zero a whole Evas_Smart_Class structure and set version.">EVAS_SMART_CLASS_INIT_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga653b7bf36c2c87bd38d8126e11a4671d" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga5ebe1775142621cc3b75a3c57085ec83" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callba...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</a> </dd></dl>

<p>Referenced by <a class="el" href="group__Evas__Smart__Object__Clipped.html#ga83e064112f527be0c2156c425562a57c">evas_object_smart_clipped_class_get()</a>.</p>

</div>
</div>
<a class="anchor" id="ga653b7bf36c2c87bd38d8126e11a4671d"></a><!-- doxytag: member="Evas.h::EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT" ref="ga653b7bf36c2c87bd38d8126e11a4671d" args="(name, parent)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">parent&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, NULL, NULL}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class. </p>
<p>Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to latest EVAS_SMART_CLASS_VERSION, name to the specified value and parent class.</p>
<p>It will keep a reference to name field as a "const char *", that is, name must be available while the structure is used (hint: static or global!) and will not be modified. Similarly, parent reference will be kept.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Group.html#ga223f5d420c1e22275cd6490cd77c85f0" title="Initializer to zero a whole Evas_Smart_Class structure.">EVAS_SMART_CLASS_INIT_NULL</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaaa610a135c79167162405b56cffe8562" title="Initializer to zero a whole Evas_Smart_Class structure and set version.">EVAS_SMART_CLASS_INIT_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaff2bbd5bb79e51ad8d31f98106caff77" title="Initializer to zero a whole Evas_Smart_Class structure and set name and version.">EVAS_SMART_CLASS_INIT_NAME_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga5ebe1775142621cc3b75a3c57085ec83" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callba...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga5ebe1775142621cc3b75a3c57085ec83"></a><!-- doxytag: member="Evas.h::EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS" ref="ga5ebe1775142621cc3b75a3c57085ec83" args="(name, parent, callbacks)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">parent, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">callbacks&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td>&#160;&#160;&#160;{name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, callbacks, NULL}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callbacks definition. </p>
<p>Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to latest EVAS_SMART_CLASS_VERSION, name to the specified value, parent class and callbacks at this level.</p>
<p>It will keep a reference to name field as a "const char *", that is, name must be available while the structure is used (hint: static or global!) and will not be modified. Similarly, parent and callbacks reference will be kept.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Group.html#ga223f5d420c1e22275cd6490cd77c85f0" title="Initializer to zero a whole Evas_Smart_Class structure.">EVAS_SMART_CLASS_INIT_NULL</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaaa610a135c79167162405b56cffe8562" title="Initializer to zero a whole Evas_Smart_Class structure and set version.">EVAS_SMART_CLASS_INIT_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaff2bbd5bb79e51ad8d31f98106caff77" title="Initializer to zero a whole Evas_Smart_Class structure and set name and version.">EVAS_SMART_CLASS_INIT_NAME_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga653b7bf36c2c87bd38d8126e11a4671d" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga223f5d420c1e22275cd6490cd77c85f0"></a><!-- doxytag: member="Evas.h::EVAS_SMART_CLASS_INIT_NULL" ref="ga223f5d420c1e22275cd6490cd77c85f0" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_CLASS_INIT_NULL&#160;&#160;&#160;{NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initializer to zero a whole Evas_Smart_Class structure. </p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Group.html#gaaa610a135c79167162405b56cffe8562" title="Initializer to zero a whole Evas_Smart_Class structure and set version.">EVAS_SMART_CLASS_INIT_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaff2bbd5bb79e51ad8d31f98106caff77" title="Initializer to zero a whole Evas_Smart_Class structure and set name and version.">EVAS_SMART_CLASS_INIT_NAME_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga653b7bf36c2c87bd38d8126e11a4671d" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga5ebe1775142621cc3b75a3c57085ec83" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callba...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</a> </dd></dl>

</div>
</div>
<a class="anchor" id="gaaa610a135c79167162405b56cffe8562"></a><!-- doxytag: member="Evas.h::EVAS_SMART_CLASS_INIT_VERSION" ref="gaaa610a135c79167162405b56cffe8562" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_CLASS_INIT_VERSION&#160;&#160;&#160;{NULL, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Initializer to zero a whole Evas_Smart_Class structure and set version. </p>
<p>Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to latest EVAS_SMART_CLASS_VERSION.</p>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Group.html#ga223f5d420c1e22275cd6490cd77c85f0" title="Initializer to zero a whole Evas_Smart_Class structure.">EVAS_SMART_CLASS_INIT_NULL</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#gaff2bbd5bb79e51ad8d31f98106caff77" title="Initializer to zero a whole Evas_Smart_Class structure and set name and version.">EVAS_SMART_CLASS_INIT_NAME_VERSION</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga653b7bf36c2c87bd38d8126e11a4671d" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version and parent class...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT</a> </dd>
<dd>
<a class="el" href="group__Evas__Smart__Group.html#ga5ebe1775142621cc3b75a3c57085ec83" title="Initializer to zero a whole Evas_Smart_Class structure and set name, version, parent class and callba...">EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga4aa4b72aafa0391144fb0171aeff2ccd"></a><!-- doxytag: member="Evas.h::EVAS_SMART_DATA_ALLOC" ref="ga4aa4b72aafa0391144fb0171aeff2ccd" args="(o, priv_type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_DATA_ALLOC</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">o, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">priv_type&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment">priv_type *priv; \
   priv = <a class="code" href="group__Evas__Smart__Object__Group.html#gad77ac4b3dcb2929ff7d02e76a26e272a" title="Retrieve user data stored on a smart object.">evas_object_smart_data_get</a>(o); \
   <span class="keywordflow">if</span> (!priv) { \
      priv = (priv_type *)calloc(1, <span class="keyword">sizeof</span>(priv_type)); \
      <span class="keywordflow">if</span> (!priv) <span class="keywordflow">return</span>; \
      <a class="code" href="group__Evas__Smart__Object__Group.html#gae40928b2993cc169e606820ae21dbb6e" title="Store a pointer to user data for a smart object.">evas_object_smart_data_set</a>(o, priv); \
   }
</pre></div>
<p>Convenience macro to allocate smart data only if needed. </p>
<p>When writing a subclassable smart object, the .add function will need to check if the smart private data was already allocated by some child object or not. This macro makes it easier to do it.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">o</td><td>Evas object passed to the .add function </td></tr>
    <tr><td class="paramname">priv_type</td><td>The type of the data to allocate </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="ga58dc94af6f064b39b2bf0155908fbe52"></a><!-- doxytag: member="Evas.h::EVAS_SMART_SUBCLASS_NEW" ref="ga58dc94af6f064b39b2bf0155908fbe52" args="(smart_name, prefix, api_type, parent_type, parent_func, cb_desc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define EVAS_SMART_SUBCLASS_NEW</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">smart_name, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">prefix, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">api_type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">parent_type, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">parent_func, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">cb_desc&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">static</span> <span class="keyword">const</span> parent_type * prefix##_parent_sc = NULL;                   \
  <span class="keyword">static</span> <span class="keywordtype">void</span> prefix##_smart_set_user(api_type *api);                   \
  <span class="keyword">static</span> <span class="keywordtype">void</span> prefix##_smart_set(api_type *api)                         \
  {                                                                     \
     <a class="code" href="struct__Evas__Smart__Class.html" title="a smart object class">Evas_Smart_Class</a> *sc;                                              \
     <span class="keywordflow">if</span> (!(sc = (<a class="code" href="struct__Evas__Smart__Class.html" title="a smart object class">Evas_Smart_Class</a> *)api))                               \
       <span class="keywordflow">return</span>;                                                          \
     <span class="keywordflow">if</span> (!prefix##_parent_sc)                                           \
       prefix##_parent_sc = parent_func();                              \
     <a class="code" href="group__Evas__Smart__Group.html#ga6888875280ccf11f026e09c890650c95" title="Easy to use version of evas_smart_class_inherit_full().">evas_smart_class_inherit</a>(sc, (<span class="keyword">const</span> <a class="code" href="struct__Evas__Smart__Class.html" title="a smart object class">Evas_Smart_Class</a> *)prefix##_parent_sc); \
     prefix##_smart_set_user(api);                                      \
  }                                                                     \
  <span class="keyword">static</span> <a class="code" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb" title="An Evas Smart Object handle.">Evas_Smart</a> * prefix##_smart_class_new(<span class="keywordtype">void</span>)                    \
  {                                                                     \
     <span class="keyword">static</span> <a class="code" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb" title="An Evas Smart Object handle.">Evas_Smart</a> *smart = NULL;                                   \
     <span class="keyword">static</span> api_type api;                                               \
     <span class="keywordflow">if</span> (!smart)                                                        \
       {                                                                \
          <a class="code" href="struct__Evas__Smart__Class.html" title="a smart object class">Evas_Smart_Class</a> *sc = (<a class="code" href="struct__Evas__Smart__Class.html" title="a smart object class">Evas_Smart_Class</a> *)&amp;api;              \
          memset(&amp;api, 0, <span class="keyword">sizeof</span>(api_type));                            \
          sc-&gt;version = <a class="code" href="group__Evas__Smart__Group.html#ga1ca1514302a47188c921b232d6ce42db" title="The version you have to put into the version field in the smart class struct.">EVAS_SMART_CLASS_VERSION</a>;                       \
          sc-&gt;<a class="code" href="struct__Evas__Smart__Class.html#a34b0476dfa714dff39812ed72636005f" title="the string name of the class">name</a> = smart_name;                                        \
          sc-&gt;<a class="code" href="struct__Evas__Smart__Class.html#af7074494030024c3d0e502bca7b19067" title="callbacks at this level, NULL terminated">callbacks</a> = cb_desc;                                      \
          prefix##_smart_set(&amp;api);                                     \
          smart = <a class="code" href="group__Evas__Smart__Group.html#ga25a97a07a32a460c8c2d55916481dd1a" title="Creates an Evas_Smart from an Evas_Smart_Class.">evas_smart_class_new</a>(sc);                             \
       }                                                                \
     <span class="keywordflow">return</span> smart;                                                      \
  }
</pre></div>
<p>Convenience macro to subclass a Smart Class. </p>
<p>This macro saves some typing when writing a Smart Class derived from another one. In order to work, the user needs to provide some functions adhering to the following guidelines.</p>
<ul>
<li>&lt;prefix&gt;_smart_set_user(): the internal _smart_set function will call this one provided by the user after inheriting everything from the parent, which should take care of setting the right member functions for the class.</li>
<li>&lt;prefix&gt;_parent_sc: pointer to the smart class of the parent. When calling parent functions from overloaded ones, use this global variable.</li>
<li>&lt;prefix&gt;_smart_class_new(): this function returns the Evas_Smart needed to create smart objects with this class, should be called by the public _add() function.</li>
<li>If this new class should be subclassable as well, a public _smart_set() function is desirable to fill the class used as parent by the children. It's up to the user to provide this interface, which will most likely call &lt;prefix&gt;_smart_set() to get the job done.</li>
</ul>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">smart_name</td><td>The name used for the Smart Class. e.g: "Evas_Object_Box". </td></tr>
    <tr><td class="paramname">prefix</td><td>Prefix used for all variables and functions defined. </td></tr>
    <tr><td class="paramname">api_type</td><td>Type of the structure used as API for the Smart Class. Either Evas_Smart_Class or something derived from it. </td></tr>
    <tr><td class="paramname">parent_type</td><td>Type of the parent class API. </td></tr>
    <tr><td class="paramname">parent_func</td><td>Function that gets the parent class. e.g: <a class="el" href="group__Evas__Object__Box.html#ga58da2c7328e5c8a01a8817f934d083ff" title="Get Box Smart Class for inheritance purposes.">evas_object_box_smart_class_get()</a>. </td></tr>
    <tr><td class="paramname">cb_desc</td><td>Array of callback descriptions for this Smart Class. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga5532335a315b4c84ab914afbbe771363"></a><!-- doxytag: member="evas_smart.c::evas_smart_callback_description_find" ref="ga5532335a315b4c84ab914afbbe771363" args="(const Evas_Smart *s, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI const <a class="el" href="struct__Evas__Smart__Cb__Description.html">Evas_Smart_Cb_Description</a>* evas_smart_callback_description_find </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td>
          <td class="paramname"><em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Find callback description for callback called <em>name</em>. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>the Evas_Smart. </td></tr>
    <tr><td class="paramname">name</td><td>name of desired callback, must <b>not</b> be <code>NULL</code>. The search have a special case for <em>name</em> being the same pointer as registered with Evas_Smart_Cb_Description, one can use it to avoid excessive use of strcmp(). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>reference to description if found, <code>NULL</code> if not found. </dd></dl>

</div>
</div>
<a class="anchor" id="ga67ca7d389fd32a2dc4d7d6e29430d900"></a><!-- doxytag: member="evas_smart.c::evas_smart_callbacks_descriptions_get" ref="ga67ca7d389fd32a2dc4d7d6e29430d900" args="(const Evas_Smart *s, unsigned int *count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI const <a class="el" href="struct__Evas__Smart__Cb__Description.html">Evas_Smart_Cb_Description</a>** evas_smart_callbacks_descriptions_get </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td>
          <td class="paramname"><em>s</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int *&#160;</td>
          <td class="paramname"><em>count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the callbacks known by this Evas_Smart. </p>
<p>This is likely different from <a class="el" href="struct__Evas__Smart__Class.html#af7074494030024c3d0e502bca7b19067" title="callbacks at this level, NULL terminated">Evas_Smart_Class::callbacks</a> as it will contain the callbacks of all class hierarchy sorted, while the direct smart class member refers only to that specific class and should not include parent's.</p>
<p>If no callbacks are known, this function returns <code>NULL</code>.</p>
<p>The array elements and thus their contents will be reference to original values given to evas_smart_new() as <a class="el" href="struct__Evas__Smart__Class.html#af7074494030024c3d0e502bca7b19067" title="callbacks at this level, NULL terminated">Evas_Smart_Class::callbacks</a>.</p>
<p>The array is sorted by name. The last array element is the <code>NULL</code> pointer and is not counted in <em>count</em>. Loop iterations can check any of these cases.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>the Evas_Smart. </td></tr>
    <tr><td class="paramname">count</td><td>returns the number of elements in returned array. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the array with callback descriptions known by this class, its size is returned in <em>count</em> parameter. It should not be modified anyhow. If no callbacks are known, <code>NULL</code> is returned. The array is sorted by name and elements refer to the original value given to evas_smart_new().</dd></dl>
<dl class="note"><dt><b>Note:</b></dt><dd>objects may provide per-instance callbacks, use <a class="el" href="group__Evas__Smart__Object__Group.html#gaf58d78bc21229defb9eafd541063391d" title="Get the callbacks descriptions known by this smart object.">evas_object_smart_callbacks_descriptions_get()</a> to get those as well. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__Evas__Smart__Object__Group.html#gaf58d78bc21229defb9eafd541063391d" title="Get the callbacks descriptions known by this smart object.">evas_object_smart_callbacks_descriptions_get()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="gac41799a0e334d515fa8e07313b88c611"></a><!-- doxytag: member="evas_smart.c::evas_smart_class_get" ref="gac41799a0e334d515fa8e07313b88c611" args="(const Evas_Smart *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a>* evas_smart_class_get </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the Evas_Smart_Class of an Evas_Smart. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>the Evas_Smart </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the Evas_Smart_Class </dd></dl>

</div>
</div>
<a class="anchor" id="ga21f5af32f724500c3380906d166fc49f"></a><!-- doxytag: member="evas_smart.c::evas_smart_class_inherit_full" ref="ga21f5af32f724500c3380906d166fc49f" args="(Evas_Smart_Class *sc, const Evas_Smart_Class *parent_sc, unsigned int parent_sc_size)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI Eina_Bool evas_smart_class_inherit_full </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *&#160;</td>
          <td class="paramname"><em>sc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *&#160;</td>
          <td class="paramname"><em>parent_sc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>parent_sc_size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Sets one class to inherit from the other. </p>
<p>Copy all function pointers, set <code>parent</code> to <em>parent_sc</em> and copy everything after sizeof(Evas_Smart_Class) present in <em>parent_sc</em>, using <em>parent_sc_size</em> as reference.</p>
<p>This is recommended instead of a single memcpy() since it will take care to not modify <em>sc</em> name, version, callbacks and possible other members.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">sc</td><td>child class. </td></tr>
    <tr><td class="paramname">parent_sc</td><td>parent class, will provide attributes. </td></tr>
    <tr><td class="paramname">parent_sc_size</td><td>size of parent_sc structure, child should be at least this size. Everything after <code>Evas_Smart_Class</code> size is copied using regular memcpy(). </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="group__Evas__Smart__Group.html#ga1ca1514302a47188c921b232d6ce42db">EVAS_SMART_CLASS_VERSION</a>, and <a class="el" href="struct__Evas__Smart__Class.html#a4b009bf8125551b4bec8bc114756fc3e">_Evas_Smart_Class::parent</a>.</p>

</div>
</div>
<a class="anchor" id="ga25a97a07a32a460c8c2d55916481dd1a"></a><!-- doxytag: member="evas_smart.c::evas_smart_class_new" ref="ga25a97a07a32a460c8c2d55916481dd1a" args="(const Evas_Smart_Class *sc)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a>* evas_smart_class_new </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="struct__Evas__Smart__Class.html">Evas_Smart_Class</a> *&#160;</td>
          <td class="paramname"><em>sc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Creates an Evas_Smart from an Evas_Smart_Class. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">sc</td><td>the smart class definition </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>an Evas_Smart </dd></dl>

<p>References <a class="el" href="group__Evas__Smart__Group.html#ga1ca1514302a47188c921b232d6ce42db">EVAS_SMART_CLASS_VERSION</a>.</p>

</div>
</div>
<a class="anchor" id="gaa88f3f98a71031573b8dfc4bfeac2f64"></a><!-- doxytag: member="evas_smart.c::evas_smart_data_get" ref="gaa88f3f98a71031573b8dfc4bfeac2f64" args="(const Evas_Smart *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI void* evas_smart_data_get </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the data pointer set on an Evas_Smart. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>Evas_Smart</td></tr>
  </table>
  </dd>
</dl>
<p>This data pointer is set either as the final parameter to evas_smart_new or as the data field in the Evas_Smart_Class passed in to evas_smart_class_new </p>

</div>
</div>
<a class="anchor" id="ga3501ae449533ae15eee9cbf65811cad2"></a><!-- doxytag: member="evas_smart.c::evas_smart_free" ref="ga3501ae449533ae15eee9cbf65811cad2" args="(Evas_Smart *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">EAPI void evas_smart_free </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="Evas_8h.html#a7cdfd1afece1cad64c413eb9a778ddbb">Evas_Smart</a> *&#160;</td>
          <td class="paramname"><em>s</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Free an Evas_Smart. </p>
<p>If this smart was created using <a class="el" href="group__Evas__Smart__Group.html#ga25a97a07a32a460c8c2d55916481dd1a" title="Creates an Evas_Smart from an Evas_Smart_Class.">evas_smart_class_new()</a>, the associated Evas_Smart_Class will not be freed.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">s</td><td>the Evas_Smart to free </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
</div>
 
 <div id="push"></div>
 </div> <!-- #content -->
  </div> <!-- .layout -->
 
 </div> <!-- #container -->
 
 
  <div id="footer">
    <table><tr>
      <td class="poweredby"><img src="doxygen.png"></td>
      <td class="copyright">Copyright &copy;2011 Enlightenment</td>
      <td class="generated">Docs generated Thu Jul 14 2011 20:45:33</td>
    </tr></table>
  </div>


</body>
</html>