~\newline


This example shows how to manipulate a dragable part through the edje\+\_\+object\+\_\+part\+\_\+drag A\+PI.

First, in the edc code, we are declaring a part which will be our movable part, called \char`\"{}knob\char`\"{}. It is a normal rectangle, which contains a block called \char`\"{}dragable\char`\"{}, that will define the area where this rectangle can be moved, and in which axis it can be moved.

This is our part\+:

 
\begin{DoxyCodeInclude}
         part \{
            name: \textcolor{stringliteral}{"example/knob"};
            type: RECT;

            mouse\_events: 1;

            dragable \{
               confine: \textcolor{stringliteral}{"drag\_area"};
               x: 0 0 0;
               y: 1 1 0;
            \}

            description \{
               state: \textcolor{stringliteral}{"default"} 0.0;
               min: 10 10;

               color: 255 0 0 200;

            \}
         \} \textcolor{comment}{// example/knob}

\end{DoxyCodeInclude}


Notice that it defines, through its {\ttfamily \char`\"{}x\+:\char`\"{}} and {\ttfamily "y\+:\textquotesingle{}} properties, that the part will be only moved on the y axis (vertical). Check the edc reference docs for more info about this.

Now, in our example C code, we just do the same as on the other examples, setting some global data on a structure, load the edje file and so\+:

 
\begin{DoxyCodeInclude}
\textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *PARTNAME = \textcolor{stringliteral}{"example/knob"};

\end{DoxyCodeInclude}



\begin{DoxyCodeInclude}

\end{DoxyCodeInclude}


We want to use the drag\+\_\+page and drag\+\_\+step functions, and in order to do so we need to define the step size and page size of our dragable part. They are defined as float values which represent a portion of the entire size of the dragable area\+:


\begin{DoxyCodeInclude}

\end{DoxyCodeInclude}


We are going to use the keyboard to move the {\ttfamily knob} part, through the key down callback {\ttfamily \+\_\+bg\+\_\+key\+\_\+down}, but we also want to know when the user has moved the knob by using the mouse (which is possible, since we defined that this part will receive mouse events). Thus, we set a callback for the signal \char`\"{}drag\char`\"{}, which comes from the dragable part\+:

 
\begin{DoxyCodeInclude}
   \mbox{\hyperlink{group__Evas__Object__Group__Events_ga23be30ac5cdfb780f1ff82e9108ec26b}{evas\_object\_event\_callback\_add}}(bg, 
      \mbox{\hyperlink{Evas__Common_8h_ad64cde0da38a60e7cb7905b3ab216968a336b86bad4f145f84c155e4922335584}{EVAS\_CALLBACK\_KEY\_DOWN}}, \_on\_bg\_key\_down, ee);

\end{DoxyCodeInclude}



\begin{DoxyCodeInclude}
   edje\_object\_signal\_callback\_add(edje\_obj, \textcolor{stringliteral}{"drag"}, PARTNAME, \_on\_knob\_moved, NULL);

\end{DoxyCodeInclude}


Now, let\textquotesingle{}s take a look at our key down callback\+:

 
\begin{DoxyCodeInclude}
\_on\_bg\_key\_down(\textcolor{keywordtype}{void} *data, \mbox{\hyperlink{group__Evas__Canvas_ga5ff87cc4ce6bc43e3b640a6d37f73043}{Evas}} *e \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *o 
      \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{void} *event\_info)
\{
   Ecore\_Evas          *ee;
   \mbox{\hyperlink{struct__Evas__Event__Key__Down}{Evas\_Event\_Key\_Down}} *ev;
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}}         *edje\_obj;

   ee = (Ecore\_Evas *)data;
   ev = (\mbox{\hyperlink{struct__Evas__Event__Key__Down}{Evas\_Event\_Key\_Down}} *)event\_info;
   edje\_obj = \mbox{\hyperlink{group__Ecore__Evas__Group_gae00d4a4feb8aec5de03e464fe21a1d30}{ecore\_evas\_data\_get}}(ee, \textcolor{stringliteral}{"edje\_obj"});

   \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"h"}))
     \{
        printf(commands);
        \textcolor{keywordflow}{return};
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Down"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_gade43e441f4f83b3d88183ebeb0abadfd}{edje\_object\_part\_drag\_step}}(edje\_obj, PARTNAME, 0, 1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Up"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_gade43e441f4f83b3d88183ebeb0abadfd}{edje\_object\_part\_drag\_step}}(edje\_obj, PARTNAME, 0, -1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"m"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga723989052928c090213c79569cb04177}{edje\_object\_part\_drag\_value\_set}}(edje\_obj, PARTNAME, 0.0, 0.5);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Prior"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga6c56be0f2f9d316bf4a4e5d8fdc6b2b7}{edje\_object\_part\_drag\_page}}(edje\_obj, PARTNAME, 0.0, -1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Next"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga6c56be0f2f9d316bf4a4e5d8fdc6b2b7}{edje\_object\_part\_drag\_page}}(edje\_obj, PARTNAME, 0.0, 1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Escape"}))
     \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga95cf8e97dff0716433c2c5474d606a98}{ecore\_main\_loop\_quit}}();
   \textcolor{keywordflow}{else}
     \{
        printf(\textcolor{stringliteral}{"unhandled key: %s\(\backslash\)n"}, ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}});
        printf(commands);
     \}
\}

\end{DoxyCodeInclude}


On this callback we define that the user will use the \char`\"{}up\char`\"{} and \char`\"{}down\char`\"{} arrows to move the dragable part, respectively, -\/1.\+0 and 1.\+0 times the step size. And that the \char`\"{}\+Page Up\char`\"{} (Prior) and \char`\"{}\+Page Down\char`\"{} (Next) keys will move -\/1.\+0 and 1.\+0 times the page size. Both of these will occur on the vertical axis, since we pass 0.\+0 as value to the respective horizontal axis parameters. And our dragable part also only supports being moved in the vertical axis (defined in the edc).

We also define that the \char`\"{}m\char`\"{} key will be used to explicitly position the knob part in the middle of the dragable area.

And here is the callback for the {\ttfamily \char`\"{}drag\char`\"{}} signal that is received from the theme\+:

 
\begin{DoxyCodeInclude}
\_on\_knob\_moved(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *o, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *emission 
      \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})
\{
   \textcolor{keywordtype}{double} val;

   \mbox{\hyperlink{group__Edje__Part__Drag_gacfa53c87deef43bee116cbc86d25b5eb}{edje\_object\_part\_drag\_value\_get}}(o, PARTNAME, NULL, &val);
   printf(\textcolor{stringliteral}{"value changed to: %0.3f\(\backslash\)n"}, val);
\}

\end{DoxyCodeInclude}


The example\textquotesingle{}s window should look like this picture\+:

  
\begin{DoxyImageNoCaption}
  \mbox{\includegraphics[width=\textwidth]{edje-drag-example}}
\end{DoxyImageNoCaption}


The full source code follows\+: 
\begin{DoxyCodeInclude}

\textcolor{preprocessor}{#ifdef HAVE\_CONFIG\_H}
\textcolor{preprocessor}{# include "config.h"}
\textcolor{preprocessor}{#else}
\textcolor{preprocessor}{# define EINA\_UNUSED}
\textcolor{preprocessor}{#endif}

\textcolor{preprocessor}{#ifndef PACKAGE\_DATA\_DIR}
\textcolor{preprocessor}{#define PACKAGE\_DATA\_DIR "."}
\textcolor{preprocessor}{#endif}

\textcolor{preprocessor}{#include <Ecore.h>}
\textcolor{preprocessor}{#include <\mbox{\hyperlink{Ecore__Evas_8h}{Ecore\_Evas.h}}>}
\textcolor{preprocessor}{#include <\mbox{\hyperlink{Edje_8h}{Edje.h}}>}

\textcolor{preprocessor}{#define WIDTH  300}
\textcolor{preprocessor}{#define HEIGHT 300}

\textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} commands[] = \(\backslash\)
  \textcolor{stringliteral}{"commands are:\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tDown - set drag step to 1\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tUp - set drag step to -1\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tm - set drag value to 0.5\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tPrior - set drag page to -1\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tNext - set drag page to -1\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)tEsc - exit\(\backslash\)n"}
  \textcolor{stringliteral}{"\(\backslash\)th - print help\(\backslash\)n"};

\textcolor{keyword}{static} \textcolor{keyword}{const} \textcolor{keywordtype}{char} *PARTNAME = \textcolor{stringliteral}{"example/knob"};

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_on\_destroy(Ecore\_Evas *ee \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})
\{
   \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga95cf8e97dff0716433c2c5474d606a98}{ecore\_main\_loop\_quit}}();
\}

\textcolor{comment}{/* here just to keep our example's window size and background image's}
\textcolor{comment}{ * size in synchrony */}
\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_on\_canvas\_resize(Ecore\_Evas *ee)
\{
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *bg;
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *edje\_obj;
   \textcolor{keywordtype}{int}          w;
   \textcolor{keywordtype}{int}          h;

   bg = \mbox{\hyperlink{group__Ecore__Evas__Group_gae00d4a4feb8aec5de03e464fe21a1d30}{ecore\_evas\_data\_get}}(ee, \textcolor{stringliteral}{"background"});
   edje\_obj = \mbox{\hyperlink{group__Ecore__Evas__Group_gae00d4a4feb8aec5de03e464fe21a1d30}{ecore\_evas\_data\_get}}(ee, \textcolor{stringliteral}{"edje\_obj"});

   \mbox{\hyperlink{group__Ecore__Evas__Group_ga931aadf4603731e73e8a84e4b14f1493}{ecore\_evas\_geometry\_get}}(ee, NULL, NULL, &w, &h);
   evas\_object\_resize(bg, w, h);
   evas\_object\_resize(edje\_obj, w, h);
\}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_on\_bg\_key\_down(\textcolor{keywordtype}{void} *data, \mbox{\hyperlink{group__Evas__Canvas_ga5ff87cc4ce6bc43e3b640a6d37f73043}{Evas}} *e \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *o 
      \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{void} *event\_info)
\{
   Ecore\_Evas          *ee;
   \mbox{\hyperlink{struct__Evas__Event__Key__Down}{Evas\_Event\_Key\_Down}} *ev;
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}}         *edje\_obj;

   ee = (Ecore\_Evas *)data;
   ev = (\mbox{\hyperlink{struct__Evas__Event__Key__Down}{Evas\_Event\_Key\_Down}} *)event\_info;
   edje\_obj = \mbox{\hyperlink{group__Ecore__Evas__Group_gae00d4a4feb8aec5de03e464fe21a1d30}{ecore\_evas\_data\_get}}(ee, \textcolor{stringliteral}{"edje\_obj"});

   \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"h"}))
     \{
        printf(commands);
        \textcolor{keywordflow}{return};
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Down"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_gade43e441f4f83b3d88183ebeb0abadfd}{edje\_object\_part\_drag\_step}}(edje\_obj, PARTNAME, 0, 1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Up"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_gade43e441f4f83b3d88183ebeb0abadfd}{edje\_object\_part\_drag\_step}}(edje\_obj, PARTNAME, 0, -1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"m"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga723989052928c090213c79569cb04177}{edje\_object\_part\_drag\_value\_set}}(edje\_obj, PARTNAME, 0.0, 0.5);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Prior"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga6c56be0f2f9d316bf4a4e5d8fdc6b2b7}{edje\_object\_part\_drag\_page}}(edje\_obj, PARTNAME, 0.0, -1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Next"}))
     \{
        \mbox{\hyperlink{group__Edje__Part__Drag_ga6c56be0f2f9d316bf4a4e5d8fdc6b2b7}{edje\_object\_part\_drag\_page}}(edje\_obj, PARTNAME, 0.0, 1.0);
     \}
   \textcolor{keywordflow}{else} \textcolor{keywordflow}{if} (!strcmp(ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}}, \textcolor{stringliteral}{"Escape"}))
     \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga95cf8e97dff0716433c2c5474d606a98}{ecore\_main\_loop\_quit}}();
   \textcolor{keywordflow}{else}
     \{
        printf(\textcolor{stringliteral}{"unhandled key: %s\(\backslash\)n"}, ev->\mbox{\hyperlink{struct__Evas__Event__Key__Down_a70473bba88a1afaee180a54150513824}{key}});
        printf(commands);
     \}
\}

\textcolor{keyword}{static} \textcolor{keywordtype}{void}
\_on\_knob\_moved(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *o, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *emission 
      \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *source \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})
\{
   \textcolor{keywordtype}{double} val;

   \mbox{\hyperlink{group__Edje__Part__Drag_gacfa53c87deef43bee116cbc86d25b5eb}{edje\_object\_part\_drag\_value\_get}}(o, PARTNAME, NULL, &val);
   printf(\textcolor{stringliteral}{"value changed to: %0.3f\(\backslash\)n"}, val);
\}

\textcolor{keywordtype}{int}
main(\textcolor{keywordtype}{int} argc \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{char} *argv[] \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}})
\{
   \textcolor{keyword}{const} \textcolor{keywordtype}{char}  *edje\_file = PACKAGE\_DATA\_DIR\textcolor{stringliteral}{"/drag.edj"};
   Ecore\_Evas  *ee;
   \mbox{\hyperlink{group__Evas__Canvas_ga5ff87cc4ce6bc43e3b640a6d37f73043}{Evas}}        *evas;
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *bg;
   \mbox{\hyperlink{group__Evas__Object__Group_ga9e19e6dd1f517a0ba437c0114d3e7c97}{Evas\_Object}} *edje\_obj;

   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Ecore__Evas__Group_ga32ddbb6457033ad435a177eb0c4fe235}{ecore\_evas\_init}}())
     \textcolor{keywordflow}{return} EXIT\_FAILURE;

   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Edje__General__Group_ga1c9c6594f38023c29fbfb2d0c8c675db}{edje\_init}}())
     \textcolor{keywordflow}{goto} shutdown\_ecore\_evas;

   \textcolor{comment}{/* this will give you a window with an Evas canvas under the first}
\textcolor{comment}{    * engine available */}
   ee = \mbox{\hyperlink{group__Ecore__Evas__Group_gac7f2cdbcb79635c34317c1183dd04cb0}{ecore\_evas\_new}}(NULL, 0, 0, WIDTH, HEIGHT, NULL);
   \textcolor{keywordflow}{if} (!ee) \textcolor{keywordflow}{goto} shutdown\_edje;

   \mbox{\hyperlink{group__Ecore__Evas__Group_ga3680b5c89157167318192157a5d24ec4}{ecore\_evas\_callback\_destroy\_set}}(ee, \_on\_destroy);
   \mbox{\hyperlink{group__Ecore__Evas__Group_gaac67f679c9027059a34519fbdea360df}{ecore\_evas\_callback\_resize\_set}}(ee, \_on\_canvas\_resize);
   \mbox{\hyperlink{group__Ecore__Evas__Group_ga3b2832e0373bbafae2bb7143618535c1}{ecore\_evas\_title\_set}}(ee, \textcolor{stringliteral}{"Edje Drag Example"});

   evas = \mbox{\hyperlink{group__Ecore__Evas__Group_ga75a7cc694b6069e78df47dab0b0f2d20}{ecore\_evas\_get}}(ee);

   bg = \mbox{\hyperlink{group__Evas__Object__Rectangle_ga4d80fc32ad1cac28428cebd65d746751}{evas\_object\_rectangle\_add}}(evas);
   \mbox{\hyperlink{group__Evas__Object__Group__Basic_gae34bdcfd7f5100151f6ea8ef4a392949}{evas\_object\_color\_set}}(bg, 255, 255, 255, 255);
   evas\_object\_resize(bg, WIDTH, HEIGHT);
   evas\_object\_focus\_set(bg, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});
   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(bg);
   \mbox{\hyperlink{group__Ecore__Evas__Group_gaa86c5abd200a02711aced53d27b9ddb2}{ecore\_evas\_data\_set}}(ee, \textcolor{stringliteral}{"background"}, bg);

   \mbox{\hyperlink{group__Evas__Object__Group__Events_ga23be30ac5cdfb780f1ff82e9108ec26b}{evas\_object\_event\_callback\_add}}(bg, 
      \mbox{\hyperlink{Evas__Common_8h_ad64cde0da38a60e7cb7905b3ab216968a336b86bad4f145f84c155e4922335584}{EVAS\_CALLBACK\_KEY\_DOWN}}, \_on\_bg\_key\_down, ee);

   edje\_obj = edje\_object\_add(evas);

   \textcolor{keywordflow}{if} (!edje\_object\_file\_set(edje\_obj, edje\_file, \textcolor{stringliteral}{"example/group"}))
     printf(\textcolor{stringliteral}{"failed to set file %s.\(\backslash\)n"}, edje\_file);

   evas\_object\_move(edje\_obj, 0, 0);
   evas\_object\_resize(edje\_obj, WIDTH, HEIGHT);
   \mbox{\hyperlink{group__Evas__Object__Group__Basic_ga9cbc13661584e49fb9d9cdab514a1eeb}{evas\_object\_show}}(edje\_obj);
   \mbox{\hyperlink{group__Ecore__Evas__Group_gaa86c5abd200a02711aced53d27b9ddb2}{ecore\_evas\_data\_set}}(ee, \textcolor{stringliteral}{"edje\_obj"}, edje\_obj);

   \mbox{\hyperlink{group__Edje__Part__Drag_ga07de99c93a086d37c8f75d5602970f9c}{edje\_object\_part\_drag\_size\_set}}(edje\_obj, PARTNAME, 1.0, 0.4);

   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Edje__Part__Drag_gade211cda8274317eb23b8717fb45a407}{edje\_object\_part\_drag\_step\_set}}(edje\_obj, PARTNAME, 0.0, 0.1))
     printf(\textcolor{stringliteral}{"error when setting drag step size.\(\backslash\)n"});

   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Edje__Part__Drag_gaa1b81ba64fd8be74c7c6ea02580c7da8}{edje\_object\_part\_drag\_page\_set}}(edje\_obj, PARTNAME, 0.0, 0.3))
     printf(\textcolor{stringliteral}{"error when setting drag page step size.\(\backslash\)n"});

   edje\_object\_signal\_callback\_add(edje\_obj, \textcolor{stringliteral}{"drag"}, PARTNAME, \_on\_knob\_moved, NULL);

   printf(commands);

   \mbox{\hyperlink{group__Ecore__Evas__Group_ga4953047ff97d4f1b0d75a7d513d4f317}{ecore\_evas\_show}}(ee);

   \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gaf103b9f668bb3e4fed12e52c6180132d}{ecore\_main\_loop\_begin}}();

   \mbox{\hyperlink{group__Ecore__Evas__Group_gad3ec61f2aa03df4d3dbfd0d311e0c8dc}{ecore\_evas\_free}}(ee);
   \mbox{\hyperlink{group__Ecore__Evas__Group_gab8fa311077f749190c9b622f672b2214}{ecore\_evas\_shutdown}}();
   \mbox{\hyperlink{group__Edje__General__Group_ga01041f6702f2d81bf10c3e41899805cb}{edje\_shutdown}}();

   \textcolor{keywordflow}{return} EXIT\_SUCCESS;

 shutdown\_edje:
   \mbox{\hyperlink{group__Edje__General__Group_ga01041f6702f2d81bf10c3e41899805cb}{edje\_shutdown}}();
 shutdown\_ecore\_evas:
   \mbox{\hyperlink{group__Ecore__Evas__Group_gab8fa311077f749190c9b622f672b2214}{ecore\_evas\_shutdown}}();

   \textcolor{keywordflow}{return} EXIT\_FAILURE;
\}
\end{DoxyCodeInclude}


To compile use this command\+: \begin{DoxyVerb}* gcc -o edje-drag edje-drag.c -DPACKAGE_BIN_DIR=\"/Where/enlightenment/is/installed/bin\" -DPACKAGE_LIB_DIR=\"/Where/enlightenment/is/installed/lib\"
* -DPACKAGE_DATA_DIR=\"/Where/enlightenment/is/installed/share\"
* `pkg-config --cflags --libs evas ecore ecore-evas edje`
*
* edje_cc drag.edc
* \end{DoxyVerb}
 