[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