virtual void move_func() {
					vec x = state.x();
					vec n = perturbation.x();
					vec xnew;
					move_func(x, control, n, dt_or_dx, x, XNEW_x, XNEW_pert);
					state.x() = xnew;
				}
Exemple #2
0
void _gevastwin_move_xxx(GtkgEvasObj * object, double x, double y)
{
	GtkgEvasTwin *ev;
	gpointer d;

	d = gtk_object_get_data(GTK_OBJECT(object), GEVASTWIN_BACKWARD_LOOKUP_KEY);
	if (d) {
		ev = GTK_GEVASTWIN(d);

/*         printf("gevastwin_move_xxx(top) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                ev->mainobj, ev->auxobj, object ); */
        
		if (ev->mainobj == object) {
            printf("gevastwin_move_xxx(MO) extra object. main:%p aux:%p obj:%p\n", 
                   ev->mainobj, ev->auxobj, object ); 
			ev->main_obj_move(object, x, y);
			_gevastwin_sync_obj(ev, ev->auxobj);
		}
		else if (ev->auxobj == object) {
            printf("gevastwin_move_xxx(AO) extra object. main:%p aux:%p obj:%p\n", 
                   ev->mainobj, ev->auxobj, object ); 
			ev->aux_obj_move(object, x, y);
			_gevastwin_sync_obj(ev, ev->mainobj);
		}
        else
        {
/*             printf("gevastwin_move_xxx() extra object. main:%lp aux:%lp obj:%lp\n", */
/*                    ev->mainobj, ev->auxobj, object ); */
            
			Evas_Coord ox = 0, oy = 0, oh = 0, ow = 0;
            gevasobj_get_geometry( object, &ox, &oy, &ow, &oh);
            Evas_Coord main_x = 0, main_y = 0, main_w = 0, main_h = 0;
            gevasobj_get_geometry(ev->mainobj, &main_x, &main_y, &main_w, &main_h);

/*             printf("gevastwin_move_xxx(2) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                    ev->mainobj, ev->auxobj, object ); */
            
            Evas_Coord dx = ox - x;
            Evas_Coord dy = oy - y;

/*             printf("gevastwin_move_xxx(2.0) extra object. main:%lp aux:%lp obj:%lp dx:%ld dy:%ld\n", */
/*                    ev->mainobj, ev->auxobj, object, dx, dy ); */

/*             gevasobj_move( ev->mainobj, main_x - dx, main_y - dy ); */
            
            
            ev->main_obj_move(ev->mainobj, main_x - dx, main_y - dy );
/*             printf("gevastwin_move_xxx(2.1) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                    ev->mainobj, ev->auxobj, object ); */
            
			ev->aux_obj_move (ev->auxobj,  main_x - dx , main_y + main_h + 5 - dy );

/*             printf("gevastwin_move_xxx(3) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                    ev->mainobj, ev->auxobj, object ); */
            
            Eina_List* li = gevas_obj_collection_to_list( ev->extra_objects );
            for( ; li; li = li->next)
                if(li->data)
                {
                    GtkgEvasObj* gobj = (GtkgEvasObj*)li->data;

/*                     printf("gevastwin_move_xxx(5.t) extra object. main:%lp aux:%lp obj:%lp gobj:%lp\n", */
/*                            ev->mainobj, ev->auxobj, object, gobj ); */
                    
//                    if( gobj != object )
                    {
                        gpointer d;
                        d = gtk_object_get_data(GTK_OBJECT(gobj),
                                                GEVASTWIN_EXTRA_OBJ_MOVE_FUNC_KEY );

/*                         printf("gevastwin_move_xxx(5.a) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                                ev->mainobj, ev->auxobj, object ); */
                        
                        void (*move_func) (GtkgEvasObj * object, double x, double y)
                            = d;
                        
                        gevasobj_get_geometry( gobj, &ox, &oy, &ow, &oh);
                        move_func( gobj, ox - dx, oy - dy );

/*                         printf("gevastwin_move_xxx(5.b) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                                ev->mainobj, ev->auxobj, object ); */
                        
                    }
                }
			gevasobj_queue_redraw(ev->mainobj);
			gevasobj_queue_redraw(ev->auxobj);
        }
#if 0
        else if( ev->sprite )
        {
            /* The moved part of a sprite */
            if( gevas_obj_collection_contains( ev->sprite->col, GTK_GEVASOBJ(object) ))
            {
                if( GTK_GEVASOBJ(ev->sprite)->original_move )
                    GTK_GEVASOBJ(ev->sprite)->original_move( ev->sprite, x, y );
                else
                    GTK_GEVASOBJ(ev->sprite)->move( ev->sprite, x, y );
                _gevastwin_sync_obj(ev, ev->auxobj);
            }
        }
#endif
/*         printf("gevastwin_move_xxx(bottom) extra object. main:%lp aux:%lp obj:%lp\n", */
/*                ev->mainobj, ev->auxobj, object ); */
    }