X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fabstractgroupitem.cpp;h=ba40dd719cacc4995089387688dc0f860ab5f86f;hb=a1759d64170bae9420c23e6e830af6b6f7a85faa;hp=ff66ac007b57f56af46c9fe835d6d18e0dc53b76;hpb=91ea03539f103ae33036c70b2a054c763e61f0e0;p=kdenlive diff --git a/src/abstractgroupitem.cpp b/src/abstractgroupitem.cpp index ff66ac00..ba40dd71 100644 --- a/src/abstractgroupitem.cpp +++ b/src/abstractgroupitem.cpp @@ -92,21 +92,26 @@ CustomTrackScene* AbstractGroupItem::projectScene() return NULL; } -QPainterPath AbstractGroupItem::clipGroupShape(QPointF offset) const +QPainterPath AbstractGroupItem::clipGroupSpacerShape(const QPointF &offset) const +{ + return spacerGroupShape(AVWIDGET, offset); +} + +QPainterPath AbstractGroupItem::clipGroupShape(const QPointF &offset) const { return groupShape(AVWIDGET, offset); } -QPainterPath AbstractGroupItem::transitionGroupShape(QPointF offset) const +QPainterPath AbstractGroupItem::transitionGroupShape(const QPointF &offset) const { return groupShape(TRANSITIONWIDGET, offset); } -QPainterPath AbstractGroupItem::groupShape(GRAPHICSRECTITEM type, QPointF offset) const +QPainterPath AbstractGroupItem::groupShape(GRAPHICSRECTITEM type, const QPointF &offset) const { QPainterPath path; QList children = childItems(); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { if (children.at(i)->type() == (int)type) { QRectF r(children.at(i)->sceneBoundingRect()); r.translate(offset); @@ -125,6 +130,31 @@ QPainterPath AbstractGroupItem::groupShape(GRAPHICSRECTITEM type, QPointF offset return path; } +QPainterPath AbstractGroupItem::spacerGroupShape(GRAPHICSRECTITEM type, const QPointF &offset) const +{ + QPainterPath path; + QList children = childItems(); + for (int i = 0; i < children.count(); ++i) { + if (children.at(i)->type() == (int)type) { + QRectF r(children.at(i)->sceneBoundingRect()); + r.translate(offset); + r.setRight(scene()->width()); + path.addRect(r); + } else if (children.at(i)->type() == GROUPWIDGET) { + QList subchildren = children.at(i)->childItems(); + for (int j = 0; j < subchildren.count(); j++) { + if (subchildren.at(j)->type() == (int)type) { + QRectF r(subchildren.at(j)->sceneBoundingRect()); + r.translate(offset); + r.setRight(scene()->width()); + path.addRect(r); + } + } + } + } + return path; +} + void AbstractGroupItem::addItem(QGraphicsItem * item) { addToGroup(item); @@ -182,7 +212,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant int xpos = projectScene()->getSnapPointForPos((int)(start.x() + newPos.x() - pos().x()), KdenliveSettings::snaptopoints()); xpos = qMax(xpos, 0); - //kDebug()<<"GRP XPOS:"< groupTracks; QList children = childItems(); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { int currentTrack = 0; if (children.at(i)->type() == AVWIDGET || children.at(i)->type() == TRANSITIONWIDGET) { currentTrack = static_cast (children.at(i))->track(); @@ -237,7 +267,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant // Check no clip in the group goes outside of existing tracks int maximumTrack = projectScene()->tracksCount() - 1; int groupHeight = 0; - for (int i = 0; i < groupTracks.count(); i++) { + for (int i = 0; i < groupTracks.count(); ++i) { int offset = groupTracks.at(i) - topTrack; if (offset > groupHeight) groupHeight = offset; } @@ -246,7 +276,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant proposedTrack = qMax(proposedTrack, 0); int groupOffset = proposedTrack - topTrack; if (!lockedTracks.isEmpty()) { - for (int i = 0; i < groupTracks.count(); i++) { + for (int i = 0; i < groupTracks.count(); ++i) { if (lockedTracks.contains(QString::number(groupTracks.at(i) + groupOffset))) { return pos(); } @@ -266,7 +296,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant shape = clipGroupShape(newPos - pos()); collidingItems = scene()->items(shape, Qt::IntersectsItemShape); collidingItems.removeAll(this); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { if (children.at(i)->type() == GROUPWIDGET) { QList subchildren = children.at(i)->childItems(); for (int j = 0; j < subchildren.count(); j++) { @@ -279,7 +309,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant if (!collidingItems.isEmpty()) { bool forwardMove = xpos > start.x(); int offset = 0; - for (int i = 0; i < collidingItems.count(); i++) { + for (int i = 0; i < collidingItems.count(); ++i) { QGraphicsItem *collision = collidingItems.at(i); if (collision->type() == AVWIDGET) { // Collision @@ -312,7 +342,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant // If there is still a collision after our position adjust, restore original pos collidingItems = scene()->items(clipGroupShape(newPos - pos()), Qt::IntersectsItemShape); collidingItems.removeAll(this); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { if (children.at(i)->type() == GROUPWIDGET) { QList subchildren = children.at(i)->childItems(); for (int j = 0; j < subchildren.count(); j++) { @@ -321,7 +351,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant } collidingItems.removeAll(children.at(i)); } - for (int i = 0; i < collidingItems.count(); i++) + for (int i = 0; i < collidingItems.count(); ++i) if (collidingItems.at(i)->type() == AVWIDGET) return pos(); } } @@ -330,7 +360,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant shape = transitionGroupShape(newPos - pos()); collidingItems = scene()->items(shape, Qt::IntersectsItemShape); collidingItems.removeAll(this); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { if (children.at(i)->type() == GROUPWIDGET) { QList subchildren = children.at(i)->childItems(); for (int j = 0; j < subchildren.count(); j++) { @@ -344,7 +374,7 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant else { bool forwardMove = xpos > start.x(); int offset = 0; - for (int i = 0; i < collidingItems.count(); i++) { + for (int i = 0; i < collidingItems.count(); ++i) { QGraphicsItem *collision = collidingItems.at(i); if (collision->type() == TRANSITIONWIDGET) { // Collision @@ -376,10 +406,10 @@ QVariant AbstractGroupItem::itemChange(GraphicsItemChange change, const QVariant } // If there is still a collision after our position adjust, restore original pos collidingItems = scene()->items(transitionGroupShape(newPos - pos()), Qt::IntersectsItemShape); - for (int i = 0; i < children.count(); i++) { + for (int i = 0; i < children.count(); ++i) { collidingItems.removeAll(children.at(i)); } - for (int i = 0; i < collidingItems.count(); i++) + for (int i = 0; i < collidingItems.count(); ++i) if (collidingItems.at(i)->type() == TRANSITIONWIDGET) return pos(); } } @@ -400,7 +430,7 @@ void AbstractGroupItem::dropEvent(QGraphicsSceneDragDropEvent * event) QPointF dropPos = event->scenePos(); QList selection = scene()->items(dropPos); AbstractClipItem *dropChild = NULL; - for (int i = 0; i < selection.count(); i++) { + for (int i = 0; i < selection.count(); ++i) { if (selection.at(i)->type() == AVWIDGET) { dropChild = (AbstractClipItem *) selection.at(i); break; @@ -524,3 +554,5 @@ GenTime AbstractGroupItem::duration() } return end - start; } + +#include "abstractgroupitem.moc"