1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-28 05:34:47 +01:00

A better point items layout algorithm

This commit is contained in:
Martin Tůma 2023-03-24 09:18:13 +01:00
parent 65afd802ce
commit 54d6016b1a

View File

@ -136,6 +136,27 @@ static QImage *image(uint type, const QVariant &param)
return 0; return 0;
} }
static TextPointItem *pointItem(const QPoint &pos, const QString *label,
const QFont *fnt, const QImage *img, const QColor *color,
const QColor *hColor, const QList<TextItem*> &textItems)
{
TextPointItem *item = new TextPointItem(pos, label, fnt, img, color,
hColor, 0, ICON_PADDING);
if (item->isValid() && !item->collides(textItems))
return item;
delete item;
if (!img)
return 0;
item = new TextPointItem(pos, 0, 0, img, 0, 0, 0, 0);
if (item->isValid() && !item->collides(textItems))
return item;
delete item;
return 0;
}
QPainterPath RasterTile::painterPath(const Polygon &polygon) const QPainterPath RasterTile::painterPath(const Polygon &polygon) const
{ {
QPainterPath path; QPainterPath path;
@ -317,9 +338,9 @@ void RasterTile::processPoints(QList<TextItem*> &textItems,
continue; continue;
QPoint pos(ll2xy(point->pos()).toPoint()); QPoint pos(ll2xy(point->pos()).toPoint());
TextPointItem *item = new TextPointItem(pos, label, fnt, img, color, TextPointItem *item = pointItem(pos, label, fnt, img, color, hColor,
hColor, 0, ICON_PADDING); textItems);
if (item->isValid() && !item->collides(textItems)) { if (item) {
textItems.append(item); textItems.append(item);
if (rimg) if (rimg)
images.append(rimg); images.append(rimg);
@ -327,11 +348,9 @@ void RasterTile::processPoints(QList<TextItem*> &textItems,
lights.append(new TextPointItem(pos, 0, 0, light(), 0, 0, 0, 0)); lights.append(new TextPointItem(pos, 0, 0, light(), 0, 0, 0, 0));
if (signalsMap.contains(point->pos())) if (signalsMap.contains(point->pos()))
lights.append(new TextPointItem(pos, 0, 0, signal(), 0, 0, 0, 0)); lights.append(new TextPointItem(pos, 0, 0, signal(), 0, 0, 0, 0));
} else { } else
delete item;
delete rimg; delete rimg;
} }
}
} }
void RasterTile::processLines(QList<TextItem*> &textItems) void RasterTile::processLines(QList<TextItem*> &textItems)