- don\'t longer use EvasCanvas in EvasObject private data; it\'s not needed and makes problems in some situations

- rewrote ecore_paint example to use new signal callback design

SVN revision: 38134
This commit is contained in:
Andreas Volz 2008-12-13 23:27:07 +00:00
parent 9c8eb8c04b
commit d338e3c09a
15 changed files with 84 additions and 83 deletions

View File

@ -14,38 +14,40 @@ using namespace std;
#define DOTSIZE 2
static int callback( void* data, int type, void *event )
{
cout << "CALLBACK RECEIVED: type = " << type << ", pevent = " << event << "pdata = " << data << endl;
return 0;
}
class PaintArea : public EvasRectangle
{
public:
PaintArea( EvasCanvas* evas ) : EvasRectangle( evas ), mouseDown( false )
PaintArea( EvasCanvas* evas ) :
EvasRectangle( evas ),
mouseDown( false ),
mEvas (evas)
{
setLayer( 10 );
setColor( 255, 255, 255, 0 ); // fully transparent, to catch the mouse events
setFocus( true );
signalHandleKeyUp.connect (sigc::mem_fun (this, &PaintArea::handleKeyUp));
signalHandleMouseUp.connect (sigc::mem_fun (this, &PaintArea::handleMouseUp));
signalHandleMouseDown.connect (sigc::mem_fun (this, &PaintArea::handleMouseDown));
signalHandleMouseMove.connect (sigc::mem_fun (this, &PaintArea::handleMouseMove));
}
virtual ~PaintArea() { };
virtual bool handleMouseUp( const EvasMouseUpEvent& e )
virtual void handleMouseUp( const EvasMouseUpEvent& e )
{
cout << "PA::mouseUp" << endl;
mouseDown = false;
}
virtual bool handleMouseDown( const EvasMouseDownEvent& e )
virtual void handleMouseDown( const EvasMouseDownEvent& e )
{
cout << "PA::mouseDown" << endl;
mouseDown = true;
EvasObject* l = new EvasRectangle( e.data->canvas.x, e.data->canvas.y, 2, 2, canvas() );
EvasObject* l = new EvasRectangle( e.data->canvas.x, e.data->canvas.y, 2, 2, mEvas );
int b=200+(int) (55.0*rand()/(RAND_MAX+1.0));
l->setColor( b, b, b, 255 );
l->show();
}
virtual bool handleMouseMove( const EvasMouseMoveEvent& e )
virtual void handleMouseMove( const EvasMouseMoveEvent& e )
{
cout << "PA::mouseMove" << endl;
if ( mouseDown )
@ -53,13 +55,13 @@ public:
int width = 2 + abs( e.data->cur.canvas.x - e.data->prev.canvas.x );
int height = 2 + abs( e.data->cur.canvas.y - e.data->prev.canvas.y );
cout << "width = " << width << ", height = " << height << endl;
EvasObject* l = new EvasRectangle( e.data->cur.canvas.x - width/2, e.data->cur.canvas.y - height/2, width, height, canvas() );
EvasObject* l = new EvasRectangle( e.data->cur.canvas.x - width/2, e.data->cur.canvas.y - height/2, width, height, mEvas );
int b=200+(int) (55.0*rand()/(RAND_MAX+1.0));
l->setColor( b, b, b, 255 );
l->show();
}
}
virtual bool handleKeyUp( const EvasKeyUpEvent& e )
virtual void handleKeyUp( const EvasKeyUpEvent& e )
{
cout << "PA:::keyUp - released '" << e.data->keyname << "'" << endl;
if ( strcmp( e.data->keyname, "Escape" ) == 0 )
@ -87,6 +89,7 @@ public:
}
private:
bool mouseDown;
EvasCanvas* mEvas;
};
int main( int argc, const char **argv )
@ -124,3 +127,4 @@ int main( int argc, const char **argv )
return 0;
}

View File

@ -46,7 +46,7 @@ int main( int argc, const char **argv )
#endif
EtkEmbed* embed = new EtkEmbed( evas );
EvasEtk* evasetk = new EvasEtk( embed, evas, "evasetk" );
EvasEtk* evasetk = new EvasEtk( embed, "evasetk" );
embed->setFocus( true );
evasetk->move( 5, 5 );

View File

@ -22,7 +22,6 @@ const char* PartNotExistingException::what () const throw ()
// EvasEdje
//===============================================================================================
EvasEdje::EvasEdje( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = edje_object_add( canvas->obj() );
init( name ? name : "edje" );
@ -34,7 +33,6 @@ EvasEdje::EvasEdje( EvasCanvas* canvas, const char* name )
}
EvasEdje::EvasEdje( const char* filename, const char* groupname, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = edje_object_add( canvas->obj() );
init( name ? name : groupname );
@ -47,7 +45,6 @@ EvasEdje::EvasEdje( const char* filename, const char* groupname, EvasCanvas* can
}
EvasEdje::EvasEdje( int x, int y, const char* filename, const char* groupname, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = edje_object_add( canvas->obj() );
init( name ? name : groupname );
@ -62,6 +59,11 @@ EvasEdje::EvasEdje( int x, int y, const char* filename, const char* groupname, E
//resize( _size );
}
/*EvasEdje::EvasEdje( Evas_Object* object, EvasCanvas* canvas, const char* name )
{
o = object;
}*/
bool EvasEdje::setFile( const char* filename, const char* groupname )
{
edje_object_file_set( o, filename, groupname );
@ -182,13 +184,19 @@ void EdjePart::swallow( EvasObject* object )
void EdjePart::unswallow( EvasObject* object )
{
//FIXME Move to EvasEdje?
edje_object_part_unswallow( _parent->obj(), object->obj() );
}
EvasObject* EdjePart::swallow()
Evas_Object* EdjePart::swallow()
{
return EvasObject::objectLink( edje_object_part_swallow_get( _parent->obj(), _partname ) );
return edje_object_part_swallow_get( _parent->obj(), _partname );//, _parent->canvas ();
}
const EvasObject* EdjePart::getObject ( const char* name )
{
return EvasObject::objectLink( edje_object_part_object_get( static_cast <const Evas_Object*> (_parent->obj()), name ) );
}
} // end namespace efl

View File

@ -105,7 +105,10 @@ class EdjePart
void swallow( EvasObject* );
void unswallow( EvasObject* );
EvasObject* swallow();
Evas_Object* swallow();
const EvasObject* getObject ( const char* name );
private:
EvasEdje* _parent;
@ -147,7 +150,12 @@ class EvasEdje : public EvasObject
EvasEdje( EvasCanvas* canvas, const char* name = 0 );
EvasEdje( const char* filename, const char* groupname, EvasCanvas* canvas, const char* name = 0 );
EvasEdje( int x, int y, const char* filename, const char* groupname, EvasCanvas* canvas, const char* name = 0 );
/*!
* Connect to existing Evas_Object
*/
//EvasEdje( Evas_Object* object, EvasCanvas* canvas, const char* name = 0 );
~EvasEdje();
/*
@ -192,7 +200,7 @@ class EvasEdje : public EvasObject
EdjePart* operator[]( const char* partname );
/*!
* @param partname Loads a EdjePart into the EvasEdje.
* @param partname Access a EdjePart in the EvasEdje.
* @throw PartNotExistingException
*/
EdjePart* part( const char* partname );

View File

@ -15,7 +15,6 @@ namespace efl {
//===============================================================================================
EvasEmotion::EvasEmotion( const char * module_filename, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = emotion_object_add( canvas->obj() );
init( name ? name : "emotion" );
@ -23,7 +22,7 @@ EvasEmotion::EvasEmotion( const char * module_filename, EvasCanvas* canvas, cons
}
EvasEmotion::EvasEmotion( const char* filename, const char * module_filename,
EvasCanvas* canvas, const char* name ) :EvasObject( canvas )
EvasCanvas* canvas, const char* name )
{
o = emotion_object_add( canvas->obj() );
init( name ? name : filename );
@ -33,7 +32,6 @@ EvasEmotion::EvasEmotion( const char* filename, const char * module_filename,
EvasEmotion::EvasEmotion( int x, int y, const char* filename, const char * module_filename,
EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = emotion_object_add( canvas->obj() );
init( name ? name : filename );
@ -44,7 +42,6 @@ EvasEmotion::EvasEmotion( int x, int y, const char* filename, const char * modul
EvasEmotion::EvasEmotion( int x, int y, int width, int height, const char* filename,
const char * module_filename, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
printf("EvasEmotion::EvasEmotion, begin \n");
o = emotion_object_add( canvas->obj() );
@ -56,7 +53,8 @@ EvasEmotion::EvasEmotion( int x, int y, int width, int height, const char* filen
resize( width, height );
}
void EvasEmotion::engineInit (const char * module_filename) {
void EvasEmotion::engineInit (const char * module_filename)
{
if (!emotion_object_init(o, module_filename))
return;
}

View File

@ -10,8 +10,7 @@ namespace efl {
//===============================================================================================
// EvasEsmart
//===============================================================================================
EvasEsmart::EvasEsmart(EvasCanvas *canvas, const char *type, const char *name )
:EvasObject( canvas )
EvasEsmart::EvasEsmart()
{
printf ("EvasEsmart constructor\n");
}
@ -20,11 +19,11 @@ EvasEsmart::~EvasEsmart()
{
}
Evas_Object *EvasEsmart::newEsmart( const char *name )
Evas_Object *EvasEsmart::newEsmart(EvasCanvas *canvas, const char *name )
{
Evas_Object *evasobj;
evasobj = evas_object_smart_add(canvas()->obj(), getEsmart(name));
evasobj = evas_object_smart_add(canvas->obj(), getEsmart(name));
//evas_object_smart_data_set(evasobj, this);

View File

@ -21,13 +21,11 @@ namespace efl {
class EvasEsmart : public EvasObject
{
public:
EvasEsmart( EvasCanvas *canvas,
const char* type = "unknown",
const char* name = "(null)" );
EvasEsmart();
virtual ~EvasEsmart();
protected:
Evas_Object *newEsmart( const char *name );
Evas_Object *newEsmart( EvasCanvas *canvas, const char *name );
Evas_Smart *getEsmart( const char *name );
// smart object handlers

View File

@ -11,14 +11,12 @@ namespace efl {
//===============================================================================================
EvasEsmartContainer::EvasEsmartContainer( EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_container_new( canvas->obj() );
init( name ? name : "esmart_container" );
}
EvasEsmartContainer::EvasEsmartContainer( Direction dir, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_container_new( canvas->obj() );
init( name ? name : "esmart_container" );
@ -27,7 +25,6 @@ EvasEsmartContainer::EvasEsmartContainer( Direction dir, EvasCanvas* canvas, con
}
EvasEsmartContainer::EvasEsmartContainer( int x, int y, Direction dir, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_container_new( canvas->obj() );
@ -38,7 +35,6 @@ EvasEsmartContainer::EvasEsmartContainer( int x, int y, Direction dir, EvasCanva
}
EvasEsmartContainer::EvasEsmartContainer( int x, int y, int width, int height, Direction dir, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_container_new( canvas->obj() );
init( name ? name : "esmart_container" );

View File

@ -12,25 +12,22 @@ namespace efl {
//===========================================================================//
EvasEsmartGroup::EvasEsmartGroup( EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = newEsmart( name );
o = newEsmart( canvas, name );
init( name ? name : "esmart_group" );
}
EvasEsmartGroup::EvasEsmartGroup( int x, int y, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = newEsmart( name );
o = newEsmart( canvas, name );
init( name ? name : "esmart_group" );
move( x, y );
}
EvasEsmartGroup::EvasEsmartGroup( int x, int y, int width, int height, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = newEsmart( name );
o = newEsmart( canvas, name );
init( name ? name : "esmart_group" );
move( x, y );

View File

@ -11,14 +11,12 @@ namespace efl {
//===========================================================================//
EvasEsmartTextEntry::EvasEsmartTextEntry( EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_text_entry_new( canvas->obj() );
init( name ? name : "esmart_textentry" );
}
EvasEsmartTextEntry::EvasEsmartTextEntry( int x, int y, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_text_entry_new( canvas->obj() );
init( name ? name : "esmart_textentry" );
@ -27,7 +25,6 @@ EvasEsmartTextEntry::EvasEsmartTextEntry( int x, int y, EvasCanvas* canvas, cons
}
EvasEsmartTextEntry::EvasEsmartTextEntry( int x, int y, int width, int height, EvasCanvas* canvas, const char* name )
:EvasEsmart( canvas )
{
o = esmart_text_entry_new( canvas->obj() );
init( name ? name : "esmart_textentry" );

View File

@ -169,8 +169,7 @@ void EtkEmbed::setFocus( bool b )
// EvasEtk
//==========================================================================//
EvasEtk::EvasEtk( EtkEmbed* ewlobj, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
EvasEtk::EvasEtk( EtkEmbed* ewlobj, const char* name )
{
o = etk_embed_object_get( ETK_EMBED(ewlobj->obj()) );

View File

@ -114,7 +114,7 @@ class EtkEmbed : public EtkTopLevelWidget
class EvasEtk : public EvasObject
{
public:
EvasEtk( EtkEmbed* ewlobj, EvasCanvas* canvas, const char* name = 0 );
EvasEtk( EtkEmbed* ewlobj, const char* name = 0 );
~EvasEtk();
};

View File

@ -190,12 +190,17 @@ EvasObject* EvasCanvas::objectAtBottom() const
// EvasObject
//===============================================================================================
EvasObject::EvasObject( EvasCanvas* canvas, const char* name )
EvasObject::EvasObject (Evas_Object *eo)
{
o = eo;
}
/*EvasObject::EvasObject( EvasCanvas* canvas, const char* name )
: _canvas( canvas )
{
AllocTag( this, type );
Dout( dc::notice, "EvasObject::Object " << "created new " << type << " (" << ( name ? name : "null" ) << ")" );
}
}*/
void EvasObject::init (const char *name)
{
@ -406,7 +411,13 @@ bool EvasObject::hasFocus() const
EvasObject* EvasObject::objectLink( Evas_Object* evas_object )
{
return static_cast<EvasObject*>( evas_object_data_get( evas_object, "obj_c++" ) );
void *v = evas_object_data_get( evas_object, "obj_c++" );
return static_cast<EvasObject*>( v );
}
const EvasObject* EvasObject::objectLink( const Evas_Object* evas_object )
{
return static_cast<const EvasObject*>( evas_object_data_get( evas_object, "obj_c++" ) );
}
// PRIVATE
@ -523,14 +534,12 @@ void EvasObject::dispatcher( void *data, Evas *evas, Evas_Object *evas_object, v
//===============================================================================================
EvasLine::EvasLine( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_line_add( canvas->obj() );
init( name ? name : "line" );
}
EvasLine::EvasLine( int x1, int y1, int x2, int y2, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_line_add( canvas->obj() );
init( name ? name : "line" );
@ -553,14 +562,12 @@ void EvasLine::setGeometry( int x, int y, int width, int height )
//===============================================================================================
EvasRectangle::EvasRectangle( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_rectangle_add( canvas->obj() );
init( name ? name : "rectangle" );
}
EvasRectangle::EvasRectangle( int x, int y, int width, int height, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_rectangle_add( canvas->obj() );
init( name ? name : "rectangle" );
@ -569,7 +576,6 @@ EvasRectangle::EvasRectangle( int x, int y, int width, int height, EvasCanvas* c
}
EvasRectangle::EvasRectangle( const Rect& r, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_rectangle_add( canvas->obj() );
init( name ? name : "rectangle" );
@ -587,7 +593,6 @@ EvasRectangle::~EvasRectangle()
//===============================================================================================
EvasPolygon::EvasPolygon( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_polygon_add( canvas->obj() );
init( name ? name : "polygon" );
@ -614,7 +619,6 @@ void EvasPolygon::clearPoints()
//===============================================================================================
EvasText::EvasText( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_text_add( canvas->obj() );
init( name ? name : "text" );
@ -623,7 +627,6 @@ EvasText::EvasText( EvasCanvas* canvas, const char* name )
}
EvasText::EvasText( int x, int y, const char* text, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_text_add( canvas->obj() );
init( name ? name : "text" );;
@ -634,7 +637,6 @@ EvasText::EvasText( int x, int y, const char* text, EvasCanvas* canvas, const ch
}
EvasText::EvasText( const char* font, int size, const char* text, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_text_add( canvas->obj() );
init( name ? name : "text" );
@ -644,7 +646,6 @@ EvasText::EvasText( const char* font, int size, const char* text, EvasCanvas* ca
}
EvasText::EvasText( const char* font, int size, int x, int y, const char* text, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_text_add( canvas->obj() );
init( name ? name : "text" );
@ -654,11 +655,10 @@ EvasText::EvasText( const char* font, int size, int x, int y, const char* text,
setText( text );
}
EvasText::EvasText( EvasText* ao )
:EvasObject( ao->canvas() )
EvasText::EvasText( EvasText* ao, EvasCanvas* canvas )
{
Dout( dc::notice, *this << " EvasText::EvasText copy constructor" );
o = evas_object_text_add( ao->canvas()->obj() );
o = evas_object_text_add( canvas->obj() );
init( "text" );
setGeometry( ao->geometry() );
@ -758,14 +758,12 @@ EvasText::~EvasText()
//===============================================================================================
EvasTextblock::EvasTextblock( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_textblock_add( canvas->obj() );
init( name ? name : "textblock" );
}
EvasTextblock::EvasTextblock( int x, int y, const char* text, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_textblock_add( canvas->obj() );
init( name ? name : "textblock" );
@ -799,7 +797,6 @@ EvasTextblock::~EvasTextblock()
//===============================================================================================
EvasImage::EvasImage( EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_image_add( canvas->obj() );
init( name ? name : "image" );
@ -809,7 +806,6 @@ EvasImage::EvasImage( EvasCanvas* canvas, const char* name )
}
EvasImage::EvasImage( const char* filename, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_image_add( canvas->obj() );
init( name ? name : filename );
@ -820,7 +816,6 @@ EvasImage::EvasImage( const char* filename, EvasCanvas* canvas, const char* name
}
EvasImage::EvasImage( int x, int y, const char* filename, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_image_add( canvas->obj() );
init( name ? name : filename );
@ -834,7 +829,6 @@ EvasImage::EvasImage( int x, int y, const char* filename, EvasCanvas* canvas, co
// attach temporary disabled
#if 0
EvasImage::EvasImage( Evas_Object* object, EvasCanvas* canvas, const char* name )
:EvasObject( canvas, "<attach>", name )
{
o = evas_object_image_add( canvas->obj() );
init( name ? name : type );
@ -943,14 +937,12 @@ void EvasImage::addDataUpdate (int x, int y, int w, int h)
//===============================================================================================
EvasGradient::EvasGradient( EvasCanvas* canvas, const char* name )
: EvasObject( canvas )
{
o = evas_object_gradient_add( canvas->obj() );
init( name ? name : "gradient" );
}
EvasGradient::EvasGradient( int x, int y, int width, int height, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
o = evas_object_gradient_add( canvas->obj() );
init( name ? name : "gradient" );

View File

@ -111,16 +111,22 @@ class EvasObject
protected:
// construction/destruction
EvasObject( EvasCanvas* canvas,
const char* name = "(null)" );
//EvasObject( EvasCanvas* canvas,
// const char* name = "(null)" );
public:
/*!
* Construct from existing Evas_Object
*/
EvasObject (Evas_Object *eo);
EvasObject () {}
virtual ~EvasObject();
bool operator==(const EvasObject& rhs) { return rhs.o == o; };
/* don't use these */
Evas_Object* obj() const { return o; };
EvasCanvas* canvas() const { return _canvas; }; // FIXME: Rename to parent() ?
//EvasCanvas* canvas() const { return _canvas; }; // FIXME: Rename to parent() ?
/* event signals */
sigc::signal <void, const EvasMouseInEvent&> signalHandleMouseIn;
@ -193,17 +199,18 @@ class EvasObject
private:
static EvasObject* objectLink( Evas_Object* evas_object = 0 );
static const EvasObject* objectLink( const Evas_Object* evas_object = 0 );
void registerCallbacks();
static void dispatcher( void *data, Evas *evas, Evas_Object *evas_object, void *event_info);
protected:
Evas_Object* o;
EvasCanvas* _canvas;
//EvasCanvas* _canvas;
void init (const char *name);
private:
EvasObject(); // disable default constructor
//EvasObject(); // disable default constructor
EvasObject( const EvasObject& ); // disable copy constructor
bool operator=(const EvasObject& ); // disable assignment operator
};
@ -252,7 +259,7 @@ class EvasPolygon : public EvasObject
class EvasText : public EvasObject
{
public:
EvasText( EvasText* ao );
EvasText( EvasText* ao, EvasCanvas* canvas );
EvasText( EvasCanvas* canvas, const char* name = 0 );
EvasText( int x, int y, const char* text, EvasCanvas* canvas, const char* name = 0 );
EvasText( const char* font, int size, const char* text, EvasCanvas* canvas, const char* name = 0 );

View File

@ -113,8 +113,6 @@ void EwlEmbed::setFocus( bool b )
//==========================================================================//
EvasEwl::EvasEwl( EwlEmbed* ewlobj, EvasCanvas* canvas, const char* name )
:EvasObject( canvas )
{
#warning not sure whether this belongs here
#if 0 // [audifahrer]