r23416 by jghali - Fixes for line items in Canvas::frameHitTest() and Canvas::itemUnderCursor()
scribus-commit
scribus-commit at lists.scribus.net
Tue Dec 10 09:22:31 UTC 2019
Author: jghali
Date: Tue Dec 10 09:22:31 2019
New Revision: 23416
URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23416
Log:
Fixes for line items in Canvas::frameHitTest() and Canvas::itemUnderCursor()
Modified:
trunk/Scribus/scribus/canvas.cpp
Modified: trunk/Scribus/scribus/canvas.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=23416&path=/trunk/Scribus/scribus/canvas.cpp
==============================================================================
--- trunk/Scribus/scribus/canvas.cpp (original)
+++ trunk/Scribus/scribus/canvas.cpp Tue Dec 10 09:22:31 2019
@@ -298,12 +298,14 @@
// be huge, into account.
// ### might be interesting to investigate if it would be painless to just change
// PageItem::getTransform.
- double extraS = (item->visualHeight() - item->height()) / - 2.0;
+ double extraS = - item->visualLineWidth() / 2.0;
// if (item->lineColor() != CommonStrings::None)
// extraS = (item->lineWidth() / -2.0);
if (item->isTextFrame() && (m_doc->appMode == modeEdit) && !item->asTextFrame()->availableRegion().contains(item->getTransform().inverted().map(canvasPoint.toPoint())))
return OUTSIDE;
- Canvas::FrameHandle result = frameHitTest(item->getTransform().inverted().map(canvasPoint), QRectF(extraS, extraS, item->visualWidth(), item->visualHeight()));
+ QRectF visualRect = item->isLine() ? QRectF(0, extraS, item->visualWidth(), item->visualHeight())
+ : QRectF(extraS, extraS, item->visualWidth(), item->visualHeight());
+ Canvas::FrameHandle result = frameHitTest(item->getTransform().inverted().map(canvasPoint), visualRect);
// qDebug() << "frameHitTest for item" << item->ItemNr
// << item->getTransform().inverted().map(canvasPoint)
// << item->getTransform().inverted()
@@ -423,10 +425,22 @@
itemPos.translate(-Mp->xOffset() + m_doc->currentPage()->xOffset(), -Mp->yOffset() + m_doc->currentPage()->yOffset());
}
currItem->getTransform(itemPos);
- QPainterPath currPath(itemPos.map(QPointF(0,0)));
- currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
- currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
- currPath.lineTo(itemPos.map(QPointF(0, currItem->height())));
+ QPainterPath currPath;
+ if (currItem->isLine())
+ {
+ double visualLineWidth = currItem->visualLineWidth();
+ currPath.moveTo(itemPos.map(QPointF(0.0, -visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), -visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(0.0, visualLineWidth / 2.0)));
+ }
+ else
+ {
+ currPath.moveTo(itemPos.map(QPointF(0, 0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
+ currPath.lineTo(itemPos.map(QPointF(0, currItem->height())));
+ }
currPath.closeSubpath();
QPainterPath currClip;
currClip.addPolygon(itemPos.map(QPolygonF(currItem->Clip)));
@@ -467,10 +481,22 @@
if (m_doc->canSelectItemOnLayer(currItem->m_layerID))
{
QTransform itemPos = currItem->getTransform();
- QPainterPath currPath(itemPos.map(QPointF(0,0)));
- currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
- currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
- currPath.lineTo(itemPos.map(QPointF(0, currItem->height())));
+ QPainterPath currPath;
+ if (currItem->isLine())
+ {
+ double visualLineWidth = currItem->visualLineWidth();
+ currPath.moveTo(itemPos.map(QPointF(0.0, -visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), -visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), visualLineWidth / 2.0)));
+ currPath.lineTo(itemPos.map(QPointF(0.0, visualLineWidth / 2.0)));
+ }
+ else
+ {
+ currPath.moveTo(itemPos.map(QPointF(0, 0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), 0)));
+ currPath.lineTo(itemPos.map(QPointF(currItem->width(), currItem->height())));
+ currPath.lineTo(itemPos.map(QPointF(0, currItem->height())));
+ }
currPath.closeSubpath();
QPainterPath currClip;
currClip.addPolygon(itemPos.map(QPolygonF(currItem->Clip)));
More information about the scribus-commit
mailing list