\hypertarget{group__Evas__Smart__Group}{\section{Smart Functions}
\label{group__Evas__Smart__Group}\index{Smart Functions@{Smart Functions}}
}


Functions that deal with \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} structs, creating definition (classes) of objects that will have customized behavior for methods like evas\+\_\+object\+\_\+move(), evas\+\_\+object\+\_\+resize(), evas\+\_\+object\+\_\+clip\+\_\+set() and others.  


\subsection*{Data Structures}
\begin{DoxyCompactItemize}
\item 
struct \hyperlink{struct__Evas__Smart__Class}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Class}
\begin{DoxyCompactList}\small\item\em A smart object's {\bfseries base} class definition. \end{DoxyCompactList}\item 
struct \hyperlink{struct__Evas__Smart__Interface}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Interface}
\begin{DoxyCompactList}\small\item\em A smart object's {\bfseries base} interface definition. \end{DoxyCompactList}\item 
struct \hyperlink{struct__Evas__Smart__Cb__Description}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description}
\begin{DoxyCompactList}\small\item\em Describes a callback issued by a smart object (\hyperlink{group__Evas__Smart__Object__Group_gaa81bbe0af70df6c90b8fc781c59237bc}{evas\+\_\+object\+\_\+smart\+\_\+callback\+\_\+call()}), as defined in its smart object class. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}~4
\begin{DoxyCompactList}\small\item\em The version you have to put into the version field in the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} struct. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L}~\{N\+U\+L\+L, 0, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}
\begin{DoxyCompactList}\small\item\em Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N}~\{N\+U\+L\+L, \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}
\begin{DoxyCompactList}\small\item\em Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set version. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N}(name)~\{name, \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}
\begin{DoxyCompactList}\small\item\em Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name and version. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T}(name, parent)~\{name, \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, parent, N\+U\+L\+L, N\+U\+L\+L\}
\begin{DoxyCompactList}\small\item\em Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name, version and parent class. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S}(name, parent, callbacks)~\{name, \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, parent, callbacks, N\+U\+L\+L\}
\begin{DoxyCompactList}\small\item\em Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name, version, parent class and callbacks definition. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W}(smart\+\_\+name, prefix, api\+\_\+type, parent\+\_\+type, parent\+\_\+func, cb\+\_\+desc)
\begin{DoxyCompactList}\small\item\em Convenience macro to subclass a given Evas smart class. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_gaa2fb3871db63677c2c76cd082112e238}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W}(smart\+\_\+name,prefix,api\+\_\+type,parent\+\_\+type,parent\+\_\+func,cb\+\_\+desc,ifaces)
\item 
\#define \hyperlink{group__Evas__Smart__Group_ga4aa4b72aafa0391144fb0171aeff2ccd}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C}(o, priv\+\_\+type)
\begin{DoxyCompactList}\small\item\em Convenience macro to allocate smart data only if needed. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{evas\+\_\+smart\+\_\+class\+\_\+inherit}(sc, parent\+\_\+sc)~\hyperlink{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full}(sc, (\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$)parent\+\_\+sc, sizeof($\ast$parent\+\_\+sc))
\begin{DoxyCompactList}\small\item\em Easy to use version of \hyperlink{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full()}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
\hypertarget{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{typedef struct \hyperlink{struct__Evas__Smart__Class}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Class} \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class}}\label{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}

\begin{DoxyCompactList}\small\item\em A smart object's {\bfseries base} class definition. \end{DoxyCompactList}\item 
typedef struct \\*
\hyperlink{struct__Evas__Smart__Interface}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Interface} \hyperlink{group__Evas__Smart__Group_gaef9b6443e1fdb6ffd3acd39981e91fee}{Evas\+\_\+\+Smart\+\_\+\+Interface}
\begin{DoxyCompactList}\small\item\em A smart object's {\bfseries base} interface definition. \end{DoxyCompactList}\item 
\hypertarget{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}{typedef struct \\*
\hyperlink{struct__Evas__Smart__Cb__Description}{\+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description} \hyperlink{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}{Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description}}\label{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}

\begin{DoxyCompactList}\small\item\em A smart object callback description, used to provide introspection. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
void \hyperlink{group__Evas__Smart__Group_gae10922eb9cf7d0654f282ba87dfc3ece}{evas\+\_\+smart\+\_\+free} (\hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s)
\begin{DoxyCompactList}\small\item\em Free an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. \end{DoxyCompactList}\item 
\hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$ \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\+\_\+smart\+\_\+class\+\_\+new} (const \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$sc)
\begin{DoxyCompactList}\small\item\em Creates a new \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} from a given \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} struct. \end{DoxyCompactList}\item 
const \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$ \hyperlink{group__Evas__Smart__Group_gac3424c1ddb24487269d56ab3413756d0}{evas\+\_\+smart\+\_\+class\+\_\+get} (const \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s)
\begin{DoxyCompactList}\small\item\em Get the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} handle of an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. \end{DoxyCompactList}\item 
void $\ast$ \hyperlink{group__Evas__Smart__Group_gadeb340e24859a09577a0b7838fa11829}{evas\+\_\+smart\+\_\+data\+\_\+get} (const \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s)
\begin{DoxyCompactList}\small\item\em Get the data pointer set on an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. \end{DoxyCompactList}\item 
const \hyperlink{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}{Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description} $\ast$$\ast$ \hyperlink{group__Evas__Smart__Group_ga21bfd8ca489ecc08a0c3c9f66764f06d}{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get} (const \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s, unsigned int $\ast$count)
\begin{DoxyCompactList}\small\item\em Get the smart callbacks known by this \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handle's smart class hierarchy. \end{DoxyCompactList}\item 
const \hyperlink{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}{Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description} $\ast$ \hyperlink{group__Evas__Smart__Group_ga96fda01ec73f9ce9302fc73c827b8751}{evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find} (const \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s, const char $\ast$name)
\begin{DoxyCompactList}\small\item\em Find a callback description for the callback named {\itshape name}. \end{DoxyCompactList}\item 
\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full} (\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$sc, const \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$parent\+\_\+sc, unsigned int parent\+\_\+sc\+\_\+size)
\begin{DoxyCompactList}\small\item\em Sets one class to inherit from the other. \end{DoxyCompactList}\item 
int \hyperlink{group__Evas__Smart__Group_ga5f197ec846dac0a3998b084b46ce3d34}{evas\+\_\+smart\+\_\+usage\+\_\+get} (const \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} $\ast$s)
\begin{DoxyCompactList}\small\item\em Get the number of users of the smart instance. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
Functions that deal with \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} structs, creating definition (classes) of objects that will have customized behavior for methods like evas\+\_\+object\+\_\+move(), evas\+\_\+object\+\_\+resize(), evas\+\_\+object\+\_\+clip\+\_\+set() and others. 

These objects will accept the generic methods defined in \hyperlink{group__Evas__Object__Group}{Generic Object Functions} and the extensions defined in \hyperlink{group__Evas__Smart__Object__Group}{Smart Object Functions}. There are a couple of existent smart objects in Evas itself (see \hyperlink{group__Evas__Object__Box}{Box Smart Object}, \hyperlink{group__Evas__Object__Table}{Table Smart Object.} and \hyperlink{group__Evas__Smart__Object__Clipped}{Clipped Smart Object}).

See also some \hyperlink{Example_Evas_Smart_Objects}{examples} of this group of functions. 

\subsection{Macro Definition Documentation}
\hypertarget{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N~4}}\label{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}


The version you have to put into the version field in the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} struct. 

Used to safeguard from binaries with old smart object intefaces running with newer ones. 

Referenced by evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full(), and evas\+\_\+smart\+\_\+class\+\_\+new().

\hypertarget{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L~\{N\+U\+L\+L, 0, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}}}\label{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}


Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure. 

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T} 

\hyperlink{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N~\{N\+U\+L\+L, {\bf E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}}}\label{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}


Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set version. 

Similar to E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L, but will set version field to latest E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L} 

\hyperlink{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T} 

\hyperlink{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N(
\begin{DoxyParamCaption}
\item[{}]{name}
\end{DoxyParamCaption}
)~\{name, {\bf E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L\}}}\label{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}


Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name and version. 

Similar to E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L, but will set version field to latest E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N and name to the specified value.

It will keep a reference to name field as a \char`\"{}const char $\ast$\char`\"{}, that is, name must be available while the structure is used (hint\+: static or global!) and will not be modified.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L} 

\hyperlink{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T} 

\hyperlink{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S} 
\end{DoxySeeAlso}


Referenced by evas\+\_\+object\+\_\+smart\+\_\+clipped\+\_\+class\+\_\+get().

\hypertarget{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T(
\begin{DoxyParamCaption}
\item[{}]{name, }
\item[{}]{parent}
\end{DoxyParamCaption}
)~\{name, {\bf E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, parent, N\+U\+L\+L, N\+U\+L\+L\}}}\label{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}


Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name, version and parent class. 

Similar to E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L, but will set version field to latest E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N, name to the specified value and parent class.

It will keep a reference to name field as a \char`\"{}const char $\ast$\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.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L} 

\hyperlink{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T\+\_\+\+C\+A\+L\+L\+B\+A\+C\+K\+S(
\begin{DoxyParamCaption}
\item[{}]{name, }
\item[{}]{parent, }
\item[{}]{callbacks}
\end{DoxyParamCaption}
)~\{name, {\bf E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N}, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, N\+U\+L\+L, parent, callbacks, N\+U\+L\+L\}}}\label{group__Evas__Smart__Group_ga5ebe1775142621cc3b75a3c57085ec83}


Initializer to zero a whole Evas\+\_\+\+Smart\+\_\+\+Class structure and set name, version, parent class and callbacks definition. 

Similar to E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L, but will set version field to latest E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N, name to the specified value, parent class and callbacks at this level.

It will keep a reference to name field as a \char`\"{}const char $\ast$\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.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_ga223f5d420c1e22275cd6490cd77c85f0}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+U\+L\+L} 

\hyperlink{group__Evas__Smart__Group_gaaa610a135c79167162405b56cffe8562}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_gaff2bbd5bb79e51ad8d31f98106caff77}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N} 

\hyperlink{group__Evas__Smart__Group_ga653b7bf36c2c87bd38d8126e11a4671d}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+I\+N\+I\+T\+\_\+\+N\+A\+M\+E\+\_\+\+V\+E\+R\+S\+I\+O\+N\+\_\+\+P\+A\+R\+E\+N\+T} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W(
\begin{DoxyParamCaption}
\item[{}]{smart\+\_\+name, }
\item[{}]{prefix, }
\item[{}]{api\+\_\+type, }
\item[{}]{parent\+\_\+type, }
\item[{}]{parent\+\_\+func, }
\item[{}]{cb\+\_\+desc}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keyword}{static} \textcolor{keyword}{const} parent\_type * prefix##\_parent\_sc = NULL;                                          \(\backslash\)
  static \textcolor{keywordtype}{void} prefix##\_smart\_set\_user(api\_type * api);                                           \(\backslash\)
  static \textcolor{keywordtype}{void} prefix##\_smart\_set(api\_type * api)                                                 \(\backslash\)
  \{                                                                                              
      \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{     Evas\_Smart\_Class} *sc;                                                            
                 \(\backslash\)
     if (!(sc = (\hyperlink{struct__Evas__Smart__Class}{Evas\_Smart\_Class} *)api))                                                  
            \(\backslash\)
       return;                                                                                   \(\backslash\)
     if (!prefix##\_parent\_sc)                                                                    \(\backslash\)
       prefix##\_parent\_sc = parent\_func();                                                       
      \hyperlink{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{     evas\_smart\_class\_inherit}(sc, prefix##\_parent\_sc);                        
                         \(\backslash\)
     prefix##\_smart\_set\_user(api);                                                               \(\backslash\)
  \}                                                                                              \(\backslash\)
  static \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\_Smart} *prefix##\_smart\_class\_new(\textcolor{keywordtype}{void})                                              
      \(\backslash\)
  \{                                                                                              \(\backslash\)
     static \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\_Smart} *smart = NULL;                                                            
      \(\backslash\)
     static api\_type api;                                                                        \(\backslash\)
     if (!smart)                                                                                 \(\backslash\)
       \{                                                                                         
      \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{          Evas\_Smart\_Class} *sc = (\hyperlink{struct__Evas__Smart__Class}{Evas\_Smart\_Class} *)&api;       
                                      \(\backslash\)
          memset(&api, 0, \textcolor{keyword}{sizeof}(api\_type));                                                     \(\backslash\)
          sc->version = \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{EVAS\_SMART\_CLASS\_VERSION};                                  
                    \(\backslash\)
          sc->name = smart\_name;                                                                 \(\backslash\)
          sc->callbacks = cb\_desc;                                                               \(\backslash\)
          prefix##\_smart\_set(&api);                                                              \(\backslash\)
          smart = \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\_smart\_class\_new}(sc);                                            
                \(\backslash\)
       \}                                                                                         \(\backslash\)
     return smart;                                                                               \(\backslash\)
  \}
\end{DoxyCode}


Convenience macro to subclass a given Evas smart class. 


\begin{DoxyParams}{Parameters}
{\em smart\+\_\+name} & The name used for the smart class. e.\+g\+: {\ttfamily \char`\"{}\+Evas\+\_\+\+Object\+\_\+\+Box\char`\"{}}. \\
\hline
{\em prefix} & Prefix used for all variables and functions defined and referenced by this macro. \\
\hline
{\em api\+\_\+type} & Type of the structure used as A\+P\+I for the smart class. Either \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} or something derived from it. \\
\hline
{\em parent\+\_\+type} & Type of the parent class A\+P\+I. \\
\hline
{\em parent\+\_\+func} & Function that gets the parent class. e.\+g\+: \hyperlink{group__Evas__Object__Box_ga87222ff21012a79caf1e284dcecad350}{evas\+\_\+object\+\_\+box\+\_\+smart\+\_\+class\+\_\+get()}. \\
\hline
{\em cb\+\_\+desc} & Array of callback descriptions for this smart class.\\
\hline
\end{DoxyParams}
This macro saves some typing when writing a smart class derived from another one. In order to work, the user {\bfseries must} provide some functions adhering to the following guidelines\+:
\begin{DoxyItemize}
\item $<$prefix$>$\+\_\+smart\+\_\+set\+\_\+user()\+: the {\bfseries internal} {\ttfamily \+\_\+smart\+\_\+set} function (defined by this macro) will call this one, provided by the user, after inheriting everything from the parent, which should {\bfseries take care of setting the right member functions for the class}, both overrides and extensions, if any.
\item If this new class should be subclassable as well, a {\bfseries public} {\ttfamily \+\_\+smart\+\_\+set()} function is desirable to fill in the class used as parent by the children. It's up to the user to provide this interface, which will most likely call $<$prefix$>$\+\_\+smart\+\_\+set() to get the job done.
\end{DoxyItemize}

After the macro's usage, the following will be defined for use\+:
\begin{DoxyItemize}
\item $<$prefix$>$\+\_\+parent\+\_\+sc\+: A pointer to the {\bfseries parent} smart class. When calling parent functions from overloaded ones, use this global variable.
\item $<$prefix$>$\+\_\+smart\+\_\+class\+\_\+new()\+: this function returns the \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} needed to create smart objects with this class, which should be passed to \hyperlink{group__Evas__Smart__Object__Group_gad80de73a33446f902d4b39141a8d0a05}{evas\+\_\+object\+\_\+smart\+\_\+add()}.
\end{DoxyItemize}

\begin{DoxyWarning}{Warning}
{\ttfamily smart\+\_\+name} has to be a pointer to a globally available string! The smart class created here will just have a pointer set to that, and all object instances will depend on it for smart class name lookup. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{evas-smart-object_8c-example}{evas-\/smart-\/object.\+c}.\end{Desc}
\hypertarget{group__Evas__Smart__Group_gaa2fb3871db63677c2c76cd082112e238}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+I\+F\+A\+C\+E\+\_\+\+N\+E\+W(
\begin{DoxyParamCaption}
\item[{}]{smart\+\_\+name, }
\item[{}]{prefix, }
\item[{}]{api\+\_\+type, }
\item[{}]{parent\+\_\+type, }
\item[{}]{parent\+\_\+func, }
\item[{}]{cb\+\_\+desc, }
\item[{}]{ifaces}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_gaa2fb3871db63677c2c76cd082112e238}
{\bfseries Value\+:}
\begin{DoxyCode}
\textcolor{keyword}{static} \textcolor{keyword}{const} parent\_type * prefix##\_parent\_sc = NULL;    \(\backslash\)
  static \textcolor{keywordtype}{void} prefix##\_smart\_set\_user(api\_type * api);     \(\backslash\)
  static \textcolor{keywordtype}{void} prefix##\_smart\_set(api\_type * api)           \(\backslash\)
  \{                                                        \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{     Evas\_Smart\_Class} *sc;                                 \(\backslash\)
     if (!(sc = (\hyperlink{struct__Evas__Smart__Class}{Evas\_Smart\_Class} *)api))                  \(\backslash\)
       return;                                             \(\backslash\)
     if (!prefix##\_parent\_sc)                              \(\backslash\)
       prefix##\_parent\_sc = parent\_func();                 \hyperlink{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{     evas\_smart\_class\_inherit}(sc, prefix##\_parent\_sc);     \(\backslash\)
     prefix##\_smart\_set\_user(api);                         \(\backslash\)
  \}                                                        \(\backslash\)
  static \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\_Smart} *prefix##\_smart\_class\_new(\textcolor{keywordtype}{void})        \(\backslash\)
  \{                                                        \(\backslash\)
     static \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\_Smart} *smart = NULL;                      \(\backslash\)
     static api\_type api;                                  \(\backslash\)
     if (!smart)                                           \(\backslash\)
       \{                                                   \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{\(\backslash\)}
\hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{          Evas\_Smart\_Class} *sc = (\hyperlink{struct__Evas__Smart__Class}{Evas\_Smart\_Class} *)&api; \(\backslash\)
          memset(&api, 0, \textcolor{keyword}{sizeof}(api\_type));               \(\backslash\)
          sc->version = \hyperlink{group__Evas__Smart__Group_ga1ca1514302a47188c921b232d6ce42db}{EVAS\_SMART\_CLASS\_VERSION};          \(\backslash\)
          sc->name = smart\_name;                           \(\backslash\)
          sc->callbacks = cb\_desc;                         \(\backslash\)
          sc->interfaces = ifaces;                         \(\backslash\)
          prefix##\_smart\_set(&api);                        \(\backslash\)
          smart = \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\_smart\_class\_new}(sc);                \(\backslash\)
       \}                                                   \(\backslash\)
     return smart;                                         \(\backslash\)
  \}
\end{DoxyCode}
\begin{DoxySince}{Since}
1.\+7
\end{DoxySince}
Convenience macro to subclass a given Evas smart class. This is the same as \hyperlink{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W}, but now {\bfseries declaring smart interfaces} besides the smart callbacks.


\begin{DoxyParams}{Parameters}
{\em smart\+\_\+name} & The name used for the smart class. e.\+g\+: {\ttfamily \char`\"{}\+Evas\+\_\+\+Object\+\_\+\+Box\char`\"{}}. \\
\hline
{\em prefix} & Prefix used for all variables and functions defined and referenced by this macro. \\
\hline
{\em api\+\_\+type} & Type of the structure used as A\+P\+I for the smart class. Either \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} or something derived from it. \\
\hline
{\em parent\+\_\+type} & Type of the parent class A\+P\+I. \\
\hline
{\em parent\+\_\+func} & Function that gets the parent class. e.\+g\+: \hyperlink{group__Evas__Object__Box_ga87222ff21012a79caf1e284dcecad350}{evas\+\_\+object\+\_\+box\+\_\+smart\+\_\+class\+\_\+get()}. \\
\hline
{\em cb\+\_\+desc} & Array of smart callback descriptions for this smart class. \\
\hline
{\em ifaces} & Array of Evas smart interafaces for this smart class.\\
\hline
\end{DoxyParams}
This macro saves some typing when writing a smart class derived from another one. In order to work, the user {\bfseries must} provide some functions adhering to the following guidelines\+:
\begin{DoxyItemize}
\item $<$prefix$>$\+\_\+smart\+\_\+set\+\_\+user()\+: the {\bfseries internal} {\ttfamily \+\_\+smart\+\_\+set} function (defined by this macro) will call this one, provided by the user, after inheriting everything from the parent, which should {\bfseries take care of setting the right member functions for the class}, both overrides and extensions, if any.
\item If this new class should be subclassable as well, a {\bfseries public} {\ttfamily \+\_\+smart\+\_\+set()} function is desirable to fill in the class used as parent by the children. It's up to the user to provide this interface, which will most likely call $<$prefix$>$\+\_\+smart\+\_\+set() to get the job done.
\end{DoxyItemize}

After the macro's usage, the following will be defined for use\+:
\begin{DoxyItemize}
\item $<$prefix$>$\+\_\+parent\+\_\+sc\+: A pointer to the {\bfseries parent} smart class. When calling parent functions from overloaded ones, use this global variable.
\item $<$prefix$>$\+\_\+smart\+\_\+class\+\_\+new()\+: this function returns the \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} needed to create smart objects with this class, which should be passed to \hyperlink{group__Evas__Smart__Object__Group_gad80de73a33446f902d4b39141a8d0a05}{evas\+\_\+object\+\_\+smart\+\_\+add()}.
\end{DoxyItemize}

\begin{DoxyWarning}{Warning}
{\ttfamily smart\+\_\+name} has to be a pointer to a globally available string! The smart class created here will just have a pointer set to that, and all object instances will depend on it for smart class name lookup. 
\end{DoxyWarning}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{evas-smart-interface_8c-example}{evas-\/smart-\/interface.\+c}.\end{Desc}
\hypertarget{group__Evas__Smart__Group_ga4aa4b72aafa0391144fb0171aeff2ccd}{\index{Smart Functions@{Smart Functions}!E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C}}
\index{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C@{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C}!Smart Functions@{Smart Functions}}
\subsubsection[{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+D\+A\+T\+A\+\_\+\+A\+L\+L\+O\+C(
\begin{DoxyParamCaption}
\item[{}]{o, }
\item[{}]{priv\+\_\+type}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga4aa4b72aafa0391144fb0171aeff2ccd}
{\bfseries Value\+:}
\begin{DoxyCode}
priv\_type * priv;                                      \(\backslash\)
  priv = \hyperlink{group__Evas__Smart__Object__Group_ga4049c0eb448d6d7e16a47a5acbd09fee}{evas\_object\_smart\_data\_get}(o);                  \(\backslash\)
  if (!priv) \{                                           \(\backslash\)
       priv = (priv\_type *)calloc(1, \textcolor{keyword}{sizeof}(priv\_type)); \(\backslash\)
       if (!priv) return;                                \(\backslash\)
       \hyperlink{group__Evas__Smart__Object__Group_ga2608f1464c467bb583da442fc170b39c}{evas\_object\_smart\_data\_set}(o, priv);              \(\backslash\)
    \}
\end{DoxyCode}


Convenience macro to allocate smart data only if needed. 

When writing a subclassable smart object, the {\ttfamily }.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.

\begin{DoxyNote}{Note}
This is an idiom used when one calls the parent's {\ttfamily }.add() after the specialized code. Naturally, the parent's base smart data has to be contemplated as the specialized one's first member, for things to work.
\end{DoxyNote}

\begin{DoxyParams}{Parameters}
{\em o} & Evas object passed to the {\ttfamily }.add() function \\
\hline
{\em priv\+\_\+type} & The type of the data to allocate \\
\hline
\end{DoxyParams}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{evas-smart-interface_8c-example}{evas-\/smart-\/interface.\+c}, and \hyperlink{evas-smart-object_8c-example}{evas-\/smart-\/object.\+c}.\end{Desc}
\hypertarget{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+class\+\_\+inherit@{evas\+\_\+smart\+\_\+class\+\_\+inherit}}
\index{evas\+\_\+smart\+\_\+class\+\_\+inherit@{evas\+\_\+smart\+\_\+class\+\_\+inherit}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+class\+\_\+inherit}]{\setlength{\rightskip}{0pt plus 5cm}\#define evas\+\_\+smart\+\_\+class\+\_\+inherit(
\begin{DoxyParamCaption}
\item[{}]{sc, }
\item[{}]{parent\+\_\+sc}
\end{DoxyParamCaption}
)~{\bf evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full}(sc, ({\bf Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$)parent\+\_\+sc, sizeof($\ast$parent\+\_\+sc))}}\label{group__Evas__Smart__Group_ga6888875280ccf11f026e09c890650c95}


Easy to use version of \hyperlink{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full()}. 

This version will use sizeof(parent\+\_\+sc), copying everything.


\begin{DoxyParams}{Parameters}
{\em sc} & child class, will have methods copied from {\itshape parent\+\_\+sc} \\
\hline
{\em parent\+\_\+sc} & parent class, will provide contents to be copied. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
1 on success, 0 on failure. 
\end{DoxyReturn}


\subsection{Typedef Documentation}
\hypertarget{group__Evas__Smart__Group_gaef9b6443e1fdb6ffd3acd39981e91fee}{\index{Smart Functions@{Smart Functions}!Evas\+\_\+\+Smart\+\_\+\+Interface@{Evas\+\_\+\+Smart\+\_\+\+Interface}}
\index{Evas\+\_\+\+Smart\+\_\+\+Interface@{Evas\+\_\+\+Smart\+\_\+\+Interface}!Smart Functions@{Smart Functions}}
\subsubsection[{Evas\+\_\+\+Smart\+\_\+\+Interface}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Evas\+\_\+\+Smart\+\_\+\+Interface}}}\label{group__Evas__Smart__Group_gaef9b6443e1fdb6ffd3acd39981e91fee}


A smart object's {\bfseries base} interface definition. 

An Evas interface is exactly like the O\+O-\/concept\+: an 'contract' or A\+P\+I a given object is declared to support. A smart object may have more than one interface, thus extending the behavior it gets from sub-\/classing.

\begin{DoxySince}{Since}
1.\+7 
\end{DoxySince}


\subsection{Function Documentation}
\hypertarget{group__Evas__Smart__Group_gae10922eb9cf7d0654f282ba87dfc3ece}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+free@{evas\+\_\+smart\+\_\+free}}
\index{evas\+\_\+smart\+\_\+free@{evas\+\_\+smart\+\_\+free}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+free}]{\setlength{\rightskip}{0pt plus 5cm}void evas\+\_\+smart\+\_\+free (
\begin{DoxyParamCaption}
\item[{{\bf Evas\+\_\+\+Smart} $\ast$}]{s}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_gae10922eb9cf7d0654f282ba87dfc3ece}


Free an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. 


\begin{DoxyParams}{Parameters}
{\em s} & the \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct to free\\
\hline
\end{DoxyParams}
\begin{DoxyWarning}{Warning}
If this smart handle was created using \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\+\_\+smart\+\_\+class\+\_\+new()}, the associated \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} will not be freed.
\end{DoxyWarning}
\begin{DoxyNote}{Note}
If you're using the \hyperlink{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W} schema to create your smart object, note that an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handle will be shared amongst all instances of the given smart class, through a static variable. Evas will internally count references on \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handles and free them when they are not referenced anymore. Thus, this function is of no use for Evas users, most probably. 
\end{DoxyNote}
\hypertarget{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+class\+\_\+new@{evas\+\_\+smart\+\_\+class\+\_\+new}}
\index{evas\+\_\+smart\+\_\+class\+\_\+new@{evas\+\_\+smart\+\_\+class\+\_\+new}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+class\+\_\+new}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Evas\+\_\+\+Smart}$\ast$ evas\+\_\+smart\+\_\+class\+\_\+new (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$}]{sc}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}


Creates a new \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} from a given \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} struct. 


\begin{DoxyParams}{Parameters}
{\em sc} & the smart class definition \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
a new \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} pointer
\end{DoxyReturn}
\hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handles are necessary to create new {\bfseries instances} of smart objects belonging to the class described by {\ttfamily sc}. That handle will contain, besides the smart class interface definition, all its smart callbacks infrastructure set, too.

\begin{DoxyNote}{Note}
If you are willing to subclass a given smart class to construct yours, consider using the \hyperlink{group__Evas__Smart__Group_ga58dc94af6f064b39b2bf0155908fbe52}{E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+S\+U\+B\+C\+L\+A\+S\+S\+\_\+\+N\+E\+W} macro, which will make use of this function automatically for you. 
\end{DoxyNote}


References E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N.

\hypertarget{group__Evas__Smart__Group_gac3424c1ddb24487269d56ab3413756d0}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+class\+\_\+get@{evas\+\_\+smart\+\_\+class\+\_\+get}}
\index{evas\+\_\+smart\+\_\+class\+\_\+get@{evas\+\_\+smart\+\_\+class\+\_\+get}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+class\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf Evas\+\_\+\+Smart\+\_\+\+Class}$\ast$ evas\+\_\+smart\+\_\+class\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart} $\ast$}]{s}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_gac3424c1ddb24487269d56ab3413756d0}


Get the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} handle of an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. 


\begin{DoxyParams}{Parameters}
{\em s} & a valid \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} pointer \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} in it 
\end{DoxyReturn}
\hypertarget{group__Evas__Smart__Group_gadeb340e24859a09577a0b7838fa11829}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+data\+\_\+get@{evas\+\_\+smart\+\_\+data\+\_\+get}}
\index{evas\+\_\+smart\+\_\+data\+\_\+get@{evas\+\_\+smart\+\_\+data\+\_\+get}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+data\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}void$\ast$ evas\+\_\+smart\+\_\+data\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart} $\ast$}]{s}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_gadeb340e24859a09577a0b7838fa11829}


Get the data pointer set on an \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} struct. 


\begin{DoxyParams}{Parameters}
{\em s} & a valid \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handle\\
\hline
\end{DoxyParams}
This data pointer is set as the data field in the \hyperlink{group__Evas__Smart__Group_gaea15f67e901bf5380cdb67dc1bb43391}{Evas\+\_\+\+Smart\+\_\+\+Class} passed in to \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\+\_\+smart\+\_\+class\+\_\+new()}. \hypertarget{group__Evas__Smart__Group_ga21bfd8ca489ecc08a0c3c9f66764f06d}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get@{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get}}
\index{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get@{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description}$\ast$$\ast$ evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart} $\ast$}]{s, }
\item[{unsigned int $\ast$}]{count}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga21bfd8ca489ecc08a0c3c9f66764f06d}


Get the smart callbacks known by this \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handle's smart class hierarchy. 


\begin{DoxyParams}[1]{Parameters}
 & {\em s} & A valid \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} handle. \\
\hline
\mbox{\tt out}  & {\em count} & Returns the number of elements in the returned array. \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The array with callback descriptions known by this smart class, with its size returned in {\itshape count} parameter. It should not be modified in any way. If no callbacks are known, {\ttfamily N\+U\+L\+L} is returned. The array is sorted by event names and elements refer to the original values given to \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\+\_\+smart\+\_\+class\+\_\+new()}'s \hyperlink{struct__Evas__Smart__Class_af7074494030024c3d0e502bca7b19067}{Evas\+\_\+\+Smart\+\_\+\+Class\+::callbacks} (pointer to them).
\end{DoxyReturn}
This is likely different from \hyperlink{group__Evas__Smart__Object__Group_ga2fd47b3487660fad7aed172359b38555}{evas\+\_\+object\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get()} as it will contain the callbacks of {\bfseries all} this class hierarchy sorted, while the direct smart class member refers only to that specific class and should not include parent's.

If no callbacks are known, this function returns {\ttfamily N\+U\+L\+L}.

The array elements and thus their contents will be {\bfseries references} to original values given to \hyperlink{group__Evas__Smart__Group_ga52391e412ef2905ad25c348724f33e26}{evas\+\_\+smart\+\_\+class\+\_\+new()} as \hyperlink{struct__Evas__Smart__Class_af7074494030024c3d0e502bca7b19067}{Evas\+\_\+\+Smart\+\_\+\+Class\+::callbacks}.

The array is sorted by \hyperlink{struct__Evas__Smart__Cb__Description_ab377859f4cfcf1c2dd3c149a76b70b53}{Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description\+::name}. The last array element is a {\ttfamily N\+U\+L\+L} pointer and is not accounted for in {\itshape count}. Loop iterations can check any of these size indicators.

\begin{DoxyNote}{Note}
objects may provide per-\/instance callbacks, use \hyperlink{group__Evas__Smart__Object__Group_ga2fd47b3487660fad7aed172359b38555}{evas\+\_\+object\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get()} to get those as well. 
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Object__Group_ga2fd47b3487660fad7aed172359b38555}{evas\+\_\+object\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get()} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_ga96fda01ec73f9ce9302fc73c827b8751}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find@{evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find}}
\index{evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find@{evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find}]{\setlength{\rightskip}{0pt plus 5cm}const {\bf Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description}$\ast$ evas\+\_\+smart\+\_\+callback\+\_\+description\+\_\+find (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart} $\ast$}]{s, }
\item[{const char $\ast$}]{name}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga96fda01ec73f9ce9302fc73c827b8751}


Find a callback description for the callback named {\itshape name}. 


\begin{DoxyParams}{Parameters}
{\em s} & The \hyperlink{Evas__Common_8h_a7cdfd1afece1cad64c413eb9a778ddbb}{Evas\+\_\+\+Smart} where to search for class registered smart event callbacks. \\
\hline
{\em name} & Name of the desired callback, which must {\bfseries not} be {\ttfamily N\+U\+L\+L}. The search has a special case for {\itshape name} being the same pointer as registered with \hyperlink{group__Evas__Smart__Group_ga0ad0e7d482d7660e756e275d355e3634}{Evas\+\_\+\+Smart\+\_\+\+Cb\+\_\+\+Description}. One can use it to avoid excessive use of strcmp(). \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A reference to the description if found, or {\ttfamily N\+U\+L\+L}, otherwise
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Evas__Smart__Group_ga21bfd8ca489ecc08a0c3c9f66764f06d}{evas\+\_\+smart\+\_\+callbacks\+\_\+descriptions\+\_\+get()} 
\end{DoxySeeAlso}
\hypertarget{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full@{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full}}
\index{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full@{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full}]{\setlength{\rightskip}{0pt plus 5cm}{\bf Eina\+\_\+\+Bool} evas\+\_\+smart\+\_\+class\+\_\+inherit\+\_\+full (
\begin{DoxyParamCaption}
\item[{{\bf Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$}]{sc, }
\item[{const {\bf Evas\+\_\+\+Smart\+\_\+\+Class} $\ast$}]{parent\+\_\+sc, }
\item[{unsigned int}]{parent\+\_\+sc\+\_\+size}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_gae095bab508ff7a68b435047f43bb1ad9}


Sets one class to inherit from the other. 

Copy all function pointers, set {\ttfamily parent} to {\itshape parent\+\_\+sc} and copy everything after sizeof(\+Evas\+\_\+\+Smart\+\_\+\+Class) present in {\itshape parent\+\_\+sc}, using {\itshape parent\+\_\+sc\+\_\+size} as reference.

This is recommended instead of a single memcpy() since it will take care to not modify {\itshape sc} name, version, callbacks and possible other members.


\begin{DoxyParams}{Parameters}
{\em sc} & child class. \\
\hline
{\em parent\+\_\+sc} & parent class, will provide attributes. \\
\hline
{\em parent\+\_\+sc\+\_\+size} & size of parent\+\_\+sc structure, child should be at least this size. Everything after {\ttfamily Evas\+\_\+\+Smart\+\_\+\+Class} size is copied using regular memcpy(). \\
\hline
\end{DoxyParams}


References E\+I\+N\+A\+\_\+\+F\+A\+L\+S\+E, E\+I\+N\+A\+\_\+\+T\+R\+U\+E, E\+V\+A\+S\+\_\+\+S\+M\+A\+R\+T\+\_\+\+C\+L\+A\+S\+S\+\_\+\+V\+E\+R\+S\+I\+O\+N, and \+\_\+\+Evas\+\_\+\+Smart\+\_\+\+Class\+::parent.

\hypertarget{group__Evas__Smart__Group_ga5f197ec846dac0a3998b084b46ce3d34}{\index{Smart Functions@{Smart Functions}!evas\+\_\+smart\+\_\+usage\+\_\+get@{evas\+\_\+smart\+\_\+usage\+\_\+get}}
\index{evas\+\_\+smart\+\_\+usage\+\_\+get@{evas\+\_\+smart\+\_\+usage\+\_\+get}!Smart Functions@{Smart Functions}}
\subsubsection[{evas\+\_\+smart\+\_\+usage\+\_\+get}]{\setlength{\rightskip}{0pt plus 5cm}int evas\+\_\+smart\+\_\+usage\+\_\+get (
\begin{DoxyParamCaption}
\item[{const {\bf Evas\+\_\+\+Smart} $\ast$}]{s}
\end{DoxyParamCaption}
)}}\label{group__Evas__Smart__Group_ga5f197ec846dac0a3998b084b46ce3d34}


Get the number of users of the smart instance. 


\begin{DoxyParams}{Parameters}
{\em s} & The Evas\+\_\+\+Smart to get the usage count of \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
The number of uses of the smart instance
\end{DoxyReturn}
This function tells you how many more uses of the smart instance are in existence. This should be used before freeing/clearing any of the Evas\+\_\+\+Smart\+\_\+\+Class that was used to create the smart instance. The smart instance will refer to data in the Evas\+\_\+\+Smart\+\_\+\+Class used to create it and thus you cannot remove the original data until all users of it are gone. When the usage count goes to 0, you can \hyperlink{group__Evas__Smart__Group_gae10922eb9cf7d0654f282ba87dfc3ece}{evas\+\_\+smart\+\_\+free()} the smart instance {\ttfamily s} and remove from memory any of the Evas\+\_\+\+Smart\+\_\+\+Class that was used to create the smart instance, if you desire. Removing it from memory without doing this will cause problems (crashes, undefined behavior etc. etc.), so either never remove the original Evas\+\_\+\+Smart\+\_\+\+Class data from memory (have it be a constant structure and data), or use this A\+P\+I call and be very careful. 