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)));
_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit