X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmapview.cpp;h=6e1199fa87e61242c8b3a075071fa2de4738c287;hb=ae70f6ff733c4642fe3a9f8b3635a0a0b40cf82a;hp=7a915eda1f554f6ed752b1a5fd3c920178463935;hpb=db4813b4ac40e355403d5d5917fcac0dce2fad32;p=guemap diff --git a/src/mapview.cpp b/src/mapview.cpp index 7a915ed..6e1199f 100644 --- a/src/mapview.cpp +++ b/src/mapview.cpp @@ -424,6 +424,16 @@ void MapView::paintEvent(QPaintEvent * /*event*/) { roomWidth / 4 - 48, roomHeight + 52 } }; + // Offsets used when the label collides with the line... + const QPoint edgLblOffsetEx[] = { + // N, S, E, W + { -48, 0 }, { 48, 0 }, { 0, -76 }, { 0, 76 }, + // NE, NW, SE, SW + { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, + // NNE, NNW, SSE, SSW + { -48, 0 }, { -48, 0 }, { 48, 0 }, { 48, 0 } + }; + const int cantGoSide = 19, cantGoAngleX = gridY / 6, @@ -723,18 +733,46 @@ printf(" clip = %i, %i, %i, %i; docSize = %i, %i\n", clip.left(), clip.right( if (edge->type1 & etDirection) { + QPoint ex = QPoint(0, 0); + double angle = Angle(end - start); + + if (angle < 0) + angle += TAU; + + // Adjust text position if it runs into an edge + if (((edge->end1 == rcNNW || edge->end1 == rcN || edge->end1 == rcNNE) && (angle > THREE_QTR_TAU && angle < TAU)) + || ((edge->end1 == rcSSW || edge->end1 == rcS || edge->end1 == rcSSE) && (angle > QTR_TAU && angle < HALF_TAU)) + || ((edge->end1 == rcE) && (angle > 0 && angle < QTR_TAU)) + || ((edge->end1 == rcW) && (angle > HALF_TAU && angle < THREE_QTR_TAU))) + { + ex = edgLblOffsetEx[edge->end1]; + } + const QPoint & p = room[edge->room1]->pos; -// dc->TextOut(p.x + edgLblXOffset[edge->end1], p.y + edgLblYOffset[edge->end1], &edgeLabel[(edge->type1 & etDirection) - 1], 1); elBuf[0] = edgeLabel[(edge->type1 & etDirection) - 1]; - dc->drawText(p + edgLblOffset[edge->end1], elBuf); + dc->drawText(p + edgLblOffset[edge->end1] + ex, elBuf); } if (edge->type2 & etDirection) { + QPoint ex = QPoint(0, 0); + double angle = Angle(start - end); + + if (angle < 0) + angle += TAU; + + // Adjust text position if it runs into an edge + if (((edge->end2 == rcNNW || edge->end2 == rcN || edge->end2 == rcNNE) && (angle > THREE_QTR_TAU && angle < TAU)) + || ((edge->end2 == rcSSW || edge->end2 == rcS || edge->end2 == rcSSE) && (angle > QTR_TAU && angle < HALF_TAU)) + || ((edge->end2 == rcE) && (angle > 0 && angle < QTR_TAU)) + || ((edge->end2 == rcW) && (angle > HALF_TAU && angle < THREE_QTR_TAU))) + { + ex = edgLblOffsetEx[edge->end2]; + } + const QPoint & p = room[edge->room2]->pos; -// dc->TextOut(p.x + edgLblXOffset[edge->end2], p.y + edgLblYOffset[edge->end2], &edgeLabel[(edge->type2 & etDirection) - 1], 1); elBuf[0] = edgeLabel[(edge->type2 & etDirection) - 1]; - dc->drawText(p + edgLblOffset[edge->end2], elBuf); + dc->drawText(p + edgLblOffset[edge->end2] + ex, elBuf); } edge--;