[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: =?utf-8?q?=5Bknights/2=2E3=5D_src=3A_Keep_better_track_of_dragge?=
From: Miha Čančula <miha.cancula () gmail ! com>
Date: 2011-03-07 17:42:37
Message-ID: 20110307174237.6AC51A60B0 () git ! kde ! org
[Download RAW message or body]
Git commit af8972111106b95c8c47dac072bd9f123f41bb44 by Miha Čančula.
Committed on 07/03/2011 at 18:42.
Pushed by mihac into branch '2.3'.
Keep better track of dragged and selected pieces.
M +15 -20 src/board.cpp
M +5 -3 src/board.h
http://commits.kde.org/knights/af8972111106b95c8c47dac072bd9f123f41bb44
diff --git a/src/board.cpp b/src/board.cpp
index b5dae5d..4bdf4b6 100644
--- a/src/board.cpp
+++ b/src/board.cpp
@@ -77,6 +77,7 @@ Board::Board ( QObject* parent ) : QGraphicsScene ( parent )
m_currentPlayer = White;
updateTheme();
m_paused = false;
+ m_dragActive = false;
}
Board::~Board()
@@ -220,6 +221,7 @@ void Board::mousePressEvent ( QGraphicsSceneMouseEvent* e )
e->ignore();
return;
}
+
Piece* d_piece = pieceAt ( e->scenePos() );
if ( !d_piece || d_piece->color() != m_currentPlayer )
{
@@ -243,6 +245,7 @@ void Board::mousePressEvent ( QGraphicsSceneMouseEvent* e )
}
emit pieceMoved(move);
selectedPiece = 0;
+ delete drag;
}
}
else
@@ -268,22 +271,19 @@ void Board::mousePressEvent ( QGraphicsSceneMouseEvent* e )
addMarker ( t_move.to(), LegalMove );
}
}
+ draggedPiece = d_piece;
drag = new QDrag ( e->widget() );
- QString posText = QString::number ( t_pos.first ) + QLatin1Char ( '_' ) + \
QString::number ( t_pos.second );
- QMimeData* data = new QMimeData;
- data->setText ( posText );
- m_draggedItem = d_piece;
+ drag->setMimeData ( new QMimeData() );
m_draggedPos = e->scenePos();
- m_dragStartPos = m_draggedPos;
- drag->setMimeData ( data );
}
}
void Board::mouseMoveEvent ( QGraphicsSceneMouseEvent* e )
{
QPoint delta = e->screenPos() - dragStartPoint;
- if ( (delta.manhattanLength() >= QApplication::startDragDistance()) && drag )
+ if ( drag && !m_dragActive && (delta.manhattanLength() >= \
QApplication::startDragDistance()) ) {
+ m_dragActive = true;
drag->exec();
}
}
@@ -293,20 +293,15 @@ void Board::dropEvent ( QGraphicsSceneDragDropEvent* e )
qDeleteAll ( markers );
markers.clear();
- if ( e->mimeData()->hasText() )
+ if ( draggedPiece )
{
- QStringList list = e->mimeData()->text().split ( QLatin1Char ( '_' ) );
- if ( list.size() < 2 )
- {
- e->ignore();
- return;
- }
- Pos from ( list.first().toInt(), list.last().toInt() );
+ m_dragActive = false;
+ Pos from = draggedPiece->boardPos();
Pos to = mapFromScene ( e->scenePos() );
Move move ( from, to );
if ( !Manager::self()->rules()->legalMoves ( from ).contains ( move ) )
{
- centerOnPos ( m_draggedItem );
+ centerOnPos ( draggedPiece );
}
else
{
@@ -317,8 +312,8 @@ void Board::dropEvent ( QGraphicsSceneDragDropEvent* e )
}
emit pieceMoved(move);
}
- m_draggedItem->setZValue ( pieceZValue );
- m_draggedItem = 0;
+ draggedPiece->setZValue ( pieceZValue );
+ draggedPiece = 0;
}
}
@@ -329,7 +324,7 @@ void Board::dragEnterEvent ( QGraphicsSceneDragDropEvent* e )
void Board::dragMoveEvent ( QGraphicsSceneDragDropEvent* e )
{
- if ( !m_draggedItem )
+ if ( !draggedPiece )
{
e->ignore();
return;
@@ -338,7 +333,7 @@ void Board::dragMoveEvent ( QGraphicsSceneDragDropEvent* e )
qreal x = e->scenePos().x() - m_draggedPos.x();
qreal y = e->scenePos().y() - m_draggedPos.y();
- m_draggedItem->moveBy ( x, y );
+ draggedPiece->moveBy ( x, y );
m_draggedPos = e->scenePos();
}
diff --git a/src/board.h b/src/board.h
index 46007a2..f3a5218 100644
--- a/src/board.h
+++ b/src/board.h
@@ -88,13 +88,17 @@ namespace Knights
void removeFrame();
void centerAndResize ( Item* item, QSize size, bool animated = true );
PieceType getPromotedType();
+
QPointer<QDrag> drag;
+ bool m_dragActive;
+ Piece* draggedPiece;
+ Piece* selectedPiece;
+ QPoint dragStartPoint;
bool m_paused;
int m_tileSize;
QRectF m_boardRect;
bool m_animated;
- Piece* m_draggedItem;
QPointF m_draggedPos;
QPointF m_dragStartPos;
Color m_currentPlayer;
@@ -102,8 +106,6 @@ namespace Knights
Colors m_playerColors;
QMap<Pos, Item*> markers;
bool m_drawFrame;
- Piece* selectedPiece;
- QPoint dragStartPoint;
protected:
virtual void mousePressEvent ( QGraphicsSceneMouseEvent* e );
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic