class move_handler : public handler { 
    public:
      
      move_handler( canvas* cv ) : c(cv) { dragging = 0; }
      
      void press( event& e ) {     // if overlapping start dragging
      	  x = e.x(); y = e.y();     
      	  id = c->overlapping(x, y);
      	  if (id) dragging = 1;
      }
      
      void motion( event& e ) {                  // if dragging move
        if (dragging) {                
      	id.move( e.x() - x, e.y() - y );
      	x = e.x(); y = e.y();
      	}
      }
      
      void release( event&  ) { dragging = 0; }     // stop dragging
      
    protected:
      canvas* c; int dragging; item id; int x,y;
    };
  

slide: Moving items on a canvas