|     20 	this->update(); | 
    21 	this->update(); | 
|     21 } | 
    22 } | 
|     22  | 
    23  | 
|     23 void Canvas::mouseMoveEvent(QMouseEvent* event) | 
    24 void Canvas::mouseMoveEvent(QMouseEvent* event) | 
|     24 { | 
    25 { | 
|     25 #if 0 | 
    26 	const ldraw::Id id = this->pick(event->pos()); | 
|     26 	std::optional<glm::vec3> p = this->cameraToGrid(event->pos()); | 
    27 	this->highlighted = id; | 
|     27 	if (p.has_value()) | 
    28 	this->totalMouseMove += (event->pos() - this->lastMousePosition).manhattanLength(); | 
|         | 
    29 	this->lastMousePosition = event->pos(); | 
|         | 
    30 	this->worldPosition = this->screenToModelCoordinates(this->lastMousePosition); | 
|         | 
    31 	if (this->worldPosition.has_value()) | 
|     28 	{ | 
    32 	{ | 
|     29 		this->newStatusText("Position: (%1, %2, %3)"_q.arg(p->x).arg(p->y).arg(p->z)); | 
    33 		this->worldPosition = glm::round(*this->worldPosition); | 
|         | 
    34 	} | 
|         | 
    35 	if (this->worldPosition.has_value()) | 
|         | 
    36 	{ | 
|         | 
    37 		this->newStatusText("Position: (%1, %2, %3)"_q | 
|         | 
    38 			.arg(this->worldPosition->x) | 
|         | 
    39 			.arg(this->worldPosition->y) | 
|         | 
    40 			.arg(this->worldPosition->z)); | 
|     30 	} | 
    41 	} | 
|     31 	else | 
    42 	else | 
|     32 	{ | 
    43 	{ | 
|     33 		this->newStatusText("Position: <none>"_q); | 
    44 		this->newStatusText("Position: <none>"_q); | 
|     34 	} | 
    45 	} | 
|     35 #else | 
        | 
|     36 	const QPointF originAtCamera = this->modelToScreenCoordinates({1, 1, 1}); | 
        | 
|     37 	this->newStatusText("{1,1,1} is at (%1, %2), cursor at (%3, %4)"_q.arg(originAtCamera.x()).arg(originAtCamera.y()).arg(event->pos().x()).arg(event->pos().y())); | 
        | 
|     38 #endif | 
        | 
|     39 	const ldraw::Id id = this->pick(event->pos()); | 
        | 
|     40 	this->highlighted = id; | 
        | 
|     41 	this->totalMouseMove += (event->pos() - this->lastMousePosition).manhattanLength(); | 
        | 
|     42 	this->lastMousePosition = event->pos(); | 
        | 
|     43 	PartRenderer::mouseMoveEvent(event); | 
    46 	PartRenderer::mouseMoveEvent(event); | 
|     44 } | 
    47 } | 
|     45  | 
    48  | 
|     46 void Canvas::mousePressEvent(QMouseEvent* event) | 
    49 void Canvas::mousePressEvent(QMouseEvent* event) | 
|     47 { | 
    50 { | 
|     66 		emit selectionChanged(this->selection); | 
    69 		emit selectionChanged(this->selection); | 
|     67 		this->update(); | 
    70 		this->update(); | 
|     68 	} | 
    71 	} | 
|     69 	PartRenderer::mouseReleaseEvent(event); | 
    72 	PartRenderer::mouseReleaseEvent(event); | 
|     70 } | 
    73 } | 
|         | 
    74  | 
|         | 
    75 void Canvas::paintGL() | 
|         | 
    76 { | 
|         | 
    77 	PartRenderer::paintGL(); | 
|         | 
    78 	if (this->worldPosition.has_value()) | 
|         | 
    79 	{ | 
|         | 
    80 		QPainter painter{this}; | 
|         | 
    81 		painter.setRenderHint(QPainter::Antialiasing); | 
|         | 
    82 		painter.setPen(Qt::black); | 
|         | 
    83 		painter.setBrush(Qt::green); | 
|         | 
    84 		painter.drawEllipse(this->modelToScreenCoordinates(*this->worldPosition), 10, 10); | 
|         | 
    85 	} | 
|         | 
    86 } |