Skip to content

Commit 85f7a56

Browse files
committed
fix #85: Update drag position in beforeRedraw()
1 parent a2db06b commit 85f7a56

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

src/renderedtarget.cpp

+11-5
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,15 @@ void RenderedTarget::beforeRedraw()
180180
m_oldTexture = m_texture;
181181
update();
182182
}
183+
184+
// Update drag position
185+
if (m_spriteModel) {
186+
Sprite *sprite = m_spriteModel->sprite();
187+
Q_ASSERT(sprite);
188+
189+
if (sprite->dragging())
190+
sprite->dragToPosition(m_dragX, m_dragY);
191+
}
183192
}
184193

185194
void RenderedTarget::deinitClone()
@@ -758,12 +767,9 @@ void RenderedTarget::handleSceneMouseMove(qreal x, qreal y)
758767
Q_ASSERT(m_mouseArea);
759768

760769
if (m_mouseArea->draggedSprite() == this) {
761-
Q_ASSERT(m_spriteModel && m_spriteModel->sprite());
762770
Q_ASSERT(m_engine);
763-
Sprite *sprite = m_spriteModel->sprite();
764-
const double dragX = x / m_stageScale - m_engine->stageWidth() / 2.0 - m_dragDeltaX;
765-
const double dragY = -y / m_stageScale + m_engine->stageHeight() / 2.0 - m_dragDeltaY;
766-
sprite->dragToPosition(dragX, dragY);
771+
m_dragX = x / m_stageScale - m_engine->stageWidth() / 2.0 - m_dragDeltaX;
772+
m_dragY = -y / m_stageScale + m_engine->stageHeight() / 2.0 - m_dragDeltaY;
767773
}
768774
}
769775

src/renderedtarget.h

+2
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ class RenderedTarget : public IRenderedTarget
168168
bool m_convexHullDirty = true;
169169
std::vector<QPoint> m_hullPoints;
170170
bool m_clicked = false; // left mouse button only!
171+
double m_dragX = 0;
172+
double m_dragY = 0;
171173
double m_dragDeltaX = 0;
172174
double m_dragDeltaY = 0;
173175
};

test/renderedtarget/renderedtarget_test.cpp

+8-2
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
440440
target.setMouseArea(&mouseArea);
441441

442442
emit mouseArea.mouseMoved(1064, 651);
443+
target.beforeRedraw();
443444
ASSERT_EQ(sprite.x(), 64.08);
444445
ASSERT_EQ(sprite.y(), -6.86);
445446
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
@@ -462,6 +463,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
462463
ASSERT_FALSE(sprite.dragging());
463464

464465
emit mouseArea.mouseMoved(1064, 651);
466+
target.beforeRedraw();
465467
ASSERT_EQ(sprite.x(), 64.08);
466468
ASSERT_EQ(sprite.y(), -6.86);
467469
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
@@ -482,6 +484,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
482484
ASSERT_FALSE(sprite.dragging());
483485

484486
emit mouseArea.mouseMoved(1064, 651);
487+
target.beforeRedraw();
485488
ASSERT_EQ(sprite.x(), 64.08);
486489
ASSERT_EQ(sprite.y(), -6.86);
487490
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
@@ -501,6 +504,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
501504
ASSERT_FALSE(sprite.dragging());
502505

503506
emit mouseArea.mouseMoved(1064, 651);
507+
target.beforeRedraw();
504508
ASSERT_EQ(sprite.x(), 64.08);
505509
ASSERT_EQ(sprite.y(), -6.86);
506510
ASSERT_EQ(mouseArea.draggedSprite(), nullptr);
@@ -525,6 +529,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
525529
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
526530
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
527531
emit mouseArea.mouseMoved(1067.8, 649.06);
532+
target.beforeRedraw();
528533
ASSERT_EQ(std::round(sprite.x() * 100) / 100, 61.22);
529534
ASSERT_EQ(std::round(sprite.y() * 100) / 100, -14.41);
530535
ASSERT_EQ(mouseArea.draggedSprite(), &target);
@@ -533,6 +538,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
533538
EXPECT_CALL(engine, stageWidth()).WillOnce(Return(480));
534539
EXPECT_CALL(engine, stageHeight()).WillOnce(Return(360));
535540
emit mouseArea.mouseMoved(1092.47, 605.46);
541+
target.beforeRedraw();
536542
ASSERT_EQ(std::round(sprite.x() * 100) / 100, 68.26);
537543
ASSERT_EQ(std::round(sprite.y() * 100) / 100, -1.95);
538544
ASSERT_EQ(mouseArea.draggedSprite(), &target);
@@ -548,7 +554,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
548554
anotherSprite.setY(-6.86);
549555
anotherSprite.setDraggable(true);
550556
anotherModel.init(&anotherSprite);
551-
anotherTarget.setSpriteModel(&model);
557+
anotherTarget.setSpriteModel(&anotherModel);
552558
anotherTarget.setStageScale(3.5);
553559
anotherTarget.setMouseArea(&mouseArea);
554560

@@ -562,7 +568,7 @@ TEST_F(RenderedTargetTest, SpriteDragging)
562568
ASSERT_EQ(mouseArea.draggedSprite(), &target);
563569
ASSERT_TRUE(sprite.dragging());
564570
ASSERT_FALSE(anotherSprite.dragging());
565-
EXPECT_CALL(engine, clickTarget(&sprite));
571+
EXPECT_CALL(engine, clickTarget(&anotherSprite));
566572
QCoreApplication::sendEvent(&anotherTarget, &releaseEvent);
567573

568574
// Stop dragging

0 commit comments

Comments
 (0)