void Floater::moveBy(double dx, double dy) { if (!isEnabled()) return; QCanvasItemList l = collisions(false); for (QCanvasItemList::Iterator it = l.begin(); it != l.end(); ++it) { CanvasItem *item = dynamic_cast<CanvasItem *>(*it); if (!noUpdateZ && item && item->canBeMovedByOthers()) item->updateZ(this); if ((*it)->z() >= z()) { if (item && item->canBeMovedByOthers() && collidesWith(*it)) { if ((*it)->rtti() == Rtti_Ball) { //((Ball *)(*it))->setState(Rolling); (*it)->moveBy(dx, dy); if (game && game->hasFocus() && !game->isEditing() && game->curBall() == (Ball *)(*it)) game->ballMoved(); } else if ((*it)->rtti() != Rtti_Putter) (*it)->moveBy(dx, dy); } } } point->dontMove(); point->move(x() + width(), y() + height()); // this call must come after we have tested for collisions, otherwise we skip them when saving! // that's a bad thing QCanvasRectangle::moveBy(dx, dy); // because we don't do Bridge::moveBy(); topWall->move(x(), y()); botWall->move(x(), y() - 1); leftWall->move(x(), y()); rightWall->move(x(), y()); if (game && game->isEditing()) game->updateHighlighter(); }