diff --git a/libs/image/kis_image.h b/libs/image/kis_image.h --- a/libs/image/kis_image.h +++ b/libs/image/kis_image.h @@ -334,11 +334,11 @@ QPointF documentToPixel(const QPointF &documentCoord) const; /** - * Convert a document coordinate to an integer pixel coordinate. + * Convert a document coordinate to an integer pixel coordinate rounded down. * * @param documentCoord PostScript Pt coordinate to convert. */ - QPoint documentToIntPixel(const QPointF &documentCoord) const; + QPoint documentToImagePixelFloored(const QPointF &documentCoord) const; /** * Convert a document rectangle to a pixel rectangle. diff --git a/libs/image/kis_image.cc b/libs/image/kis_image.cc --- a/libs/image/kis_image.cc +++ b/libs/image/kis_image.cc @@ -938,10 +938,10 @@ return QPointF(documentCoord.x() * xRes(), documentCoord.y() * yRes()); } -QPoint KisImage::documentToIntPixel(const QPointF &documentCoord) const +QPoint KisImage::documentToImagePixelFloored(const QPointF &documentCoord) const { QPointF pixelCoord = documentToPixel(documentCoord); - return QPoint((int)pixelCoord.x(), (int)pixelCoord.y()); + return QPoint(qFloor(pixelCoord.x()), qFloor(pixelCoord.y())); } QRectF KisImage::documentToPixel(const QRectF &documentRect) const diff --git a/libs/ui/kis_statusbar.cc b/libs/ui/kis_statusbar.cc --- a/libs/ui/kis_statusbar.cc +++ b/libs/ui/kis_statusbar.cc @@ -204,7 +204,7 @@ { if (!m_imageView) return; - QPoint pixelPos = m_imageView->image()->documentToIntPixel(pos); + QPoint pixelPos = m_imageView->image()->documentToImagePixelFloored(pos); pixelPos.setX(qBound(0, pixelPos.x(), m_view->image()->width() - 1)); pixelPos.setY(qBound(0, pixelPos.y(), m_view->image()->height() - 1)); diff --git a/libs/ui/tool/kis_tool.h b/libs/ui/tool/kis_tool.h --- a/libs/ui/tool/kis_tool.h +++ b/libs/ui/tool/kis_tool.h @@ -211,10 +211,10 @@ QPointF convertDocumentToWidget(const QPointF& pt); /// Convert from native (postscript points) to integer image pixel - /// coordinates. This truncates the floating point components and + /// coordinates. This rounds down (not truncate) the pixel coordinates and /// should be used in preference to QPointF::toPoint(), which rounds, /// to ensure the cursor acts on the pixel it is visually over. - QPoint convertToIntPixelCoord(KoPointerEvent *e); + QPoint convertToImagePixelCoordFloored(KoPointerEvent *e); QRectF convertToPt(const QRectF &rect); diff --git a/libs/ui/tool/kis_tool.cc b/libs/ui/tool/kis_tool.cc --- a/libs/ui/tool/kis_tool.cc +++ b/libs/ui/tool/kis_tool.cc @@ -273,12 +273,12 @@ return image()->documentToPixel(pos); } -QPoint KisTool::convertToIntPixelCoord(KoPointerEvent *e) +QPoint KisTool::convertToImagePixelCoordFloored(KoPointerEvent *e) { if (!image()) return e->point.toPoint(); - return image()->documentToIntPixel(e->point); + return image()->documentToImagePixelFloored(e->point); } QPointF KisTool::viewToPixel(const QPointF &viewCoord) const diff --git a/libs/ui/tool/kis_tool_paint.cc b/libs/ui/tool/kis_tool_paint.cc --- a/libs/ui/tool/kis_tool_paint.cc +++ b/libs/ui/tool/kis_tool_paint.cc @@ -369,7 +369,7 @@ KIS_ASSERT_RECOVER_RETURN(isPickingAction(pickingJob.action)); - const QPoint imagePoint = image()->documentToIntPixel(pickingJob.documentPixel); + const QPoint imagePoint = image()->documentToImagePixelFloored(pickingJob.documentPixel); const bool fromCurrentNode = pickingJob.action == PickFgNode || pickingJob.action == PickBgNode; m_pickingResource = colorPreviewResourceId(pickingJob.action); diff --git a/plugins/tools/basictools/kis_tool_colorpicker.cc b/plugins/tools/basictools/kis_tool_colorpicker.cc --- a/plugins/tools/basictools/kis_tool_colorpicker.cc +++ b/plugins/tools/basictools/kis_tool_colorpicker.cc @@ -203,7 +203,7 @@ } } - QPoint pos = convertToIntPixelCoord(event); + QPoint pos = convertToImagePixelCoordFloored(event); // the color picking has to start in the visible part of the layer if (!currentImage()->bounds().contains(pos) && !currentImage()->wrapAroundModePermitted()) { @@ -220,7 +220,7 @@ { CHECK_MODE_SANITY_OR_RETURN(KisTool::PAINT_MODE); - QPoint pos = convertToIntPixelCoord(event); + QPoint pos = convertToImagePixelCoordFloored(event); pickColor(pos); displayPickedColor(); } diff --git a/plugins/tools/basictools/kis_tool_fill.cc b/plugins/tools/basictools/kis_tool_fill.cc --- a/plugins/tools/basictools/kis_tool_fill.cc +++ b/plugins/tools/basictools/kis_tool_fill.cc @@ -110,7 +110,7 @@ setMode(KisTool::PAINT_MODE); - m_startPos = convertToIntPixelCoord(event); + m_startPos = convertToImagePixelCoordFloored(event); } void KisToolFill::endPrimaryAction(KoPointerEvent *event) diff --git a/plugins/tools/selectiontools/kis_tool_select_contiguous.cc b/plugins/tools/selectiontools/kis_tool_select_contiguous.cc --- a/plugins/tools/selectiontools/kis_tool_select_contiguous.cc +++ b/plugins/tools/selectiontools/kis_tool_select_contiguous.cc @@ -93,7 +93,7 @@ QApplication::setOverrideCursor(KisCursor::waitCursor()); - QPoint pos = convertToIntPixelCoord(event); + QPoint pos = convertToImagePixelCoordFloored(event); QRect rc = currentImage()->bounds(); KisFillPainter fillpainter(dev); fillpainter.setHeight(rc.height());