From b83d91790f0fe57a88373f7a6f7cd8dd037342be Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 15 May 2024 13:31:37 -0400 Subject: Draw a straight line when the ellipse would be invisible --- src/subway_map.cpp | 71 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 39 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/subway_map.cpp b/src/subway_map.cpp index 460532c..6070fd5 100644 --- a/src/subway_map.cpp +++ b/src/subway_map.cpp @@ -135,47 +135,54 @@ void SubwayMap::OnPaint(wxPaintEvent &event) { int halfwidth = right - left; int halfheight = bottom - top; - int ellipse_x; - int ellipse_y; - double start; - double end; + if (halfwidth < 4 || halfheight < 4) { + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 4)); + dc.DrawLine(item1_x, item1_y, item2_x, item2_y); + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxCYAN, 2)); + dc.DrawLine(item1_x, item1_y, item2_x, item2_y); + } else { + int ellipse_x; + int ellipse_y; + double start; + double end; - if (item1_x > item2_x) { - ellipse_y = top; + if (item1_x > item2_x) { + ellipse_y = top; - if (item1_y > item2_y) { - ellipse_x = left - halfwidth; + if (item1_y > item2_y) { + ellipse_x = left - halfwidth; - start = 0; - end = 90; - } else { - ellipse_x = left; + start = 0; + end = 90; + } else { + ellipse_x = left; - start = 90; - end = 180; - } - } else { - ellipse_y = top - halfheight; + start = 90; + end = 180; + } + } else { + ellipse_y = top - halfheight; - if (item1_y > item2_y) { - ellipse_x = left - halfwidth; + if (item1_y > item2_y) { + ellipse_x = left - halfwidth; - start = 270; - end = 360; - } else { - ellipse_x = left; + start = 270; + end = 360; + } else { + ellipse_x = left; - start = 180; - end = 270; + start = 180; + end = 270; + } } - } - dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 4)); - dc.DrawEllipticArc(ellipse_x, ellipse_y, halfwidth * 2, halfheight * 2, - start, end); - dc.SetPen(*wxThePenList->FindOrCreatePen(*wxCYAN, 2)); - dc.DrawEllipticArc(ellipse_x, ellipse_y, halfwidth * 2, halfheight * 2, - start, end); + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxBLACK, 4)); + dc.DrawEllipticArc(ellipse_x, ellipse_y, halfwidth * 2, halfheight * 2, + start, end); + dc.SetPen(*wxThePenList->FindOrCreatePen(*wxCYAN, 2)); + dc.DrawEllipticArc(ellipse_x, ellipse_y, halfwidth * 2, halfheight * 2, + start, end); + } } } -- cgit 1.4.1