Я бы сохранил две координаты в объекте (или там, где это имеет смысл): prevDragCoord, shapeCenter. По щелчку мыши сохраните координаты события в обоих членах. При перетаскивании мыши обновите размер прямоугольника, добавив к нему разницу текущей координаты события за вычетом координаты, хранящейся в объекте. Установите местоположение прямоугольника, установив разницу между элементом shapeCenter и размером прямоугольника, деленным на 2 (например, shapeCenter.x - rect.xLength / 2). Сохраните текущую координату в координатном элементе объекта, чтобы она могла обновляться при любых последующих вызовах вашего обработчика.
Я оставлю реализацию до вас. Может быть, вы можете сделать это только с одной переменной, или, возможно, без переменных, потому что объект события имеет какие-то потрясающие данные, чтобы сделать это. В любом случае, это должно быть общей идеей.