Fix drag&drop pixmap rendering
This commit is contained in:
parent
eb0ed082d8
commit
2cd9b06476
@ -296,7 +296,7 @@ void GroupView::mousePressEvent(QMouseEvent *event)
|
|||||||
void GroupView::mouseMoveEvent(QMouseEvent *event)
|
void GroupView::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
QPoint topLeft;
|
QPoint topLeft;
|
||||||
QPoint bottomRight = event->pos();
|
QPoint pos = event->pos() + offset();
|
||||||
|
|
||||||
if (state() == ExpandingState || state() == CollapsingState)
|
if (state() == ExpandingState || state() == CollapsingState)
|
||||||
{
|
{
|
||||||
@ -316,15 +316,13 @@ void GroupView::mouseMoveEvent(QMouseEvent *event)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QPersistentModelIndex index = indexAt(bottomRight);
|
|
||||||
|
|
||||||
if (selectionMode() != SingleSelection)
|
if (selectionMode() != SingleSelection)
|
||||||
{
|
{
|
||||||
topLeft = m_pressedPosition - offset();
|
topLeft = m_pressedPosition - offset();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
topLeft = bottomRight;
|
topLeft = pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_pressedIndex.isValid() && (state() != DragSelectingState) &&
|
if (m_pressedIndex.isValid() && (state() != DragSelectingState) &&
|
||||||
@ -337,17 +335,9 @@ void GroupView::mouseMoveEvent(QMouseEvent *event)
|
|||||||
if ((event->buttons() & Qt::LeftButton) && selectionModel())
|
if ((event->buttons() & Qt::LeftButton) && selectionModel())
|
||||||
{
|
{
|
||||||
setState(DragSelectingState);
|
setState(DragSelectingState);
|
||||||
QItemSelectionModel::SelectionFlags command = selectionCommand(index, event);
|
|
||||||
if (m_ctrlDragSelectionFlag != QItemSelectionModel::NoUpdate &&
|
|
||||||
command.testFlag(QItemSelectionModel::Toggle))
|
|
||||||
{
|
|
||||||
command &= ~QItemSelectionModel::Toggle;
|
|
||||||
command |= m_ctrlDragSelectionFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do the normalize ourselves, since QRect::normalized() is flawed
|
setSelection(QRect(pos, pos), QItemSelectionModel::ClearAndSelect);
|
||||||
QRect selectionRect = QRect(topLeft, bottomRight);
|
QModelIndex index = indexAt(pos);
|
||||||
setSelection(selectionRect, command);
|
|
||||||
|
|
||||||
// set at the end because it might scroll the view
|
// set at the end because it might scroll the view
|
||||||
if (index.isValid() && (index != selectionModel()->currentIndex()) &&
|
if (index.isValid() && (index != selectionModel()->currentIndex()) &&
|
||||||
@ -582,7 +572,7 @@ void GroupView::startDrag(Qt::DropActions supportedActions)
|
|||||||
}
|
}
|
||||||
QRect rect;
|
QRect rect;
|
||||||
QPixmap pixmap = renderToPixmap(indexes, &rect);
|
QPixmap pixmap = renderToPixmap(indexes, &rect);
|
||||||
rect.translate(offset());
|
//rect.translate(offset());
|
||||||
// rect.adjust(horizontalOffset(), verticalOffset(), 0, 0);
|
// rect.adjust(horizontalOffset(), verticalOffset(), 0, 0);
|
||||||
QDrag *drag = new QDrag(this);
|
QDrag *drag = new QDrag(this);
|
||||||
drag->setPixmap(pixmap);
|
drag->setPixmap(pixmap);
|
||||||
@ -699,12 +689,14 @@ void GroupView::setSelection(const QRect &rect,
|
|||||||
for (int i = 0; i < model()->rowCount(); ++i)
|
for (int i = 0; i < model()->rowCount(); ++i)
|
||||||
{
|
{
|
||||||
QModelIndex index = model()->index(i, 0);
|
QModelIndex index = model()->index(i, 0);
|
||||||
if (geometryRect(index).intersects(rect))
|
QRect itemRect = geometryRect(index);
|
||||||
|
if (itemRect.intersects(rect))
|
||||||
{
|
{
|
||||||
selectionModel()->select(index, commands);
|
selectionModel()->select(index, commands);
|
||||||
|
update(itemRect.translated(-offset()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
update();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap GroupView::renderToPixmap(const QModelIndexList &indices, QRect *r) const
|
QPixmap GroupView::renderToPixmap(const QModelIndexList &indices, QRect *r) const
|
||||||
@ -725,6 +717,7 @@ QPixmap GroupView::renderToPixmap(const QModelIndexList &indices, QRect *r) cons
|
|||||||
option.rect = paintPairs.at(j).first.translated(-r->topLeft());
|
option.rect = paintPairs.at(j).first.translated(-r->topLeft());
|
||||||
const QModelIndex ¤t = paintPairs.at(j).second;
|
const QModelIndex ¤t = paintPairs.at(j).second;
|
||||||
itemDelegate()->paint(&painter, option, current);
|
itemDelegate()->paint(&painter, option, current);
|
||||||
|
painter.drawLine(0,0, r->width(), r->height());
|
||||||
}
|
}
|
||||||
return pixmap;
|
return pixmap;
|
||||||
}
|
}
|
||||||
@ -740,13 +733,13 @@ QList<QPair<QRect, QModelIndex>> GroupView::draggablePaintPairs(const QModelInde
|
|||||||
{
|
{
|
||||||
const QModelIndex &index = indices.at(i);
|
const QModelIndex &index = indices.at(i);
|
||||||
const QRect current = geometryRect(index);
|
const QRect current = geometryRect(index);
|
||||||
if (current.intersects(viewportRect))
|
//if (current.intersects(viewportRect))
|
||||||
{
|
//{
|
||||||
ret += qMakePair(current, index);
|
ret += qMakePair(current, index);
|
||||||
rect |= current;
|
rect |= current;
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
rect &= viewportRect;
|
//rect &= viewportRect;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user