QRectF CanvasMode_EditWeldPoint::getUpdateRect() { PageItem *item; uint selectedItemCount = m_weldToList.count(); if (selectedItemCount == 0) return QRectF(); double vminx = std::numeric_limits<double>::max(); double vminy = std::numeric_limits<double>::max(); double vmaxx = -std::numeric_limits<double>::max(); double vmaxy = -std::numeric_limits<double>::max(); for (uint gc = 0; gc < selectedItemCount; ++gc) { item = m_weldToList.at(gc); if (item->rotation() != 0) { QRectF itRect(item->getVisualBoundingRect()); vminx = qMin(vminx, itRect.x()); vminy = qMin(vminy, itRect.y()); vmaxx = qMax(vmaxx, itRect.right()); vmaxy = qMax(vmaxy, itRect.bottom()); } else { vminx = qMin(vminx, item->visualXPos()); vminy = qMin(vminy, item->visualYPos()); vmaxx = qMax(vmaxx, item->visualXPos() + item->visualWidth()); vmaxy = qMax(vmaxy, item->visualYPos() + item->visualHeight()); } } return QRectF(vminx, vminy, vmaxx - vminx, vmaxy - vminy).adjusted(-20, -20, 40, 40); }
void Selection::setGroupRect() { PageItem *currItem; uint selectedItemCount = count(); if (selectedItemCount == 0) { groupX = groupY = groupW = groupH = 0; visualGX = visualGY = visualGW = visualGH = 0; return; } double minx = std::numeric_limits<double>::max(); double miny = std::numeric_limits<double>::max(); double maxx = -std::numeric_limits<double>::max(); double maxy = -std::numeric_limits<double>::max(); double vminx = std::numeric_limits<double>::max(); double vminy = std::numeric_limits<double>::max(); double vmaxx = -std::numeric_limits<double>::max(); double vmaxy = -std::numeric_limits<double>::max(); for (uint gc = 0; gc < selectedItemCount; ++gc) { currItem = itemAt(gc); if (currItem->rotation() != 0) { FPointArray pb(4); pb.setPoint(0, FPoint(currItem->xPos(), currItem->yPos())); pb.setPoint(1, FPoint(currItem->width(), 0.0, currItem->xPos(), currItem->yPos(), currItem->rotation(), 1.0, 1.0)); pb.setPoint(2, FPoint(currItem->width(), currItem->height(), currItem->xPos(), currItem->yPos(), currItem->rotation(), 1.0, 1.0)); pb.setPoint(3, FPoint(0.0, currItem->height(), currItem->xPos(), currItem->yPos(), currItem->rotation(), 1.0, 1.0)); for (uint pc = 0; pc < 4; ++pc) { minx = qMin(minx, pb.point(pc).x()); miny = qMin(miny, pb.point(pc).y()); maxx = qMax(maxx, pb.point(pc).x()); maxy = qMax(maxy, pb.point(pc).y()); } // Same for visual // pb.setPoint(0, FPoint(currItem->visualXPos(), currItem->visualYPos())); // pb.setPoint(1, FPoint(currItem->visualWidth(), 0.0, currItem->visualXPos(), currItem->visualYPos(), currItem->rotation(), 1.0, 1.0)); // pb.setPoint(2, FPoint(currItem->visualWidth(), currItem->visualHeight(), currItem->visualXPos(), currItem->visualYPos(), currItem->rotation(), 1.0, 1.0)); // pb.setPoint(3, FPoint(0.0, currItem->visualHeight(), currItem->visualXPos(), currItem->visualYPos(), currItem->rotation(), 1.0, 1.0)); QRectF itRect(currItem->getVisualBoundingRect()); // for (uint pc = 0; pc < 4; ++pc) { vminx = qMin(vminx, itRect.x()); vminy = qMin(vminy, itRect.y()); vmaxx = qMax(vmaxx, itRect.right()); vmaxy = qMax(vmaxy, itRect.bottom()); } } else { minx = qMin(minx, currItem->xPos()); miny = qMin(miny, currItem->yPos()); maxx = qMax(maxx, currItem->xPos() + currItem->width()); maxy = qMax(maxy, currItem->yPos() + currItem->height()); vminx = qMin(vminx, currItem->visualXPos()); vminy = qMin(vminy, currItem->visualYPos()); vmaxx = qMax(vmaxx, currItem->visualXPos() + currItem->visualWidth()); vmaxy = qMax(vmaxy, currItem->visualYPos() + currItem->visualHeight()); } } groupX = minx; groupY = miny; groupW = maxx - minx; groupH = maxy - miny; visualGX = vminx; visualGY = vminy; visualGW = vmaxx - vminx; visualGH = vmaxy - vminy; }