void TaskPointRenderer::DrawOrdered(const OrderedTaskPoint &tp, Layer layer) { switch (layer) { case LAYER_OZ_SHADE: if (tp.BoundingBoxOverlaps(bb_screen)) // draw shaded part of observation zone DrawOZBackground(canvas, tp); break; case LAYER_LEG: if (index > 0) DrawTaskLine(last_point, tp.GetLocationRemaining()); last_point = tp.GetLocationRemaining(); break; case LAYER_OZ_OUTLINE: if (tp.BoundingBoxOverlaps(bb_screen)) DrawOZForeground(tp); break; case LAYER_SYMBOLS: return; } }
void TaskPointRenderer::DrawOrdered(const OrderedTaskPoint &tp, Layer layer) { int offset = index - active_index; if (offset == 0 && task_finished && tp.GetType() == TaskPointType::FINISH) /* if the task is finished, pretend the active_index is past the current index; we need this because XCSoar never moves active_index to one after the finish point, because that would point to an invalid task point index */ offset = -1; switch (layer) { case LAYER_OZ_SHADE: if (tp.BoundingBoxOverlaps(bb_screen)) // draw shaded part of observation zone DrawOZBackground(canvas, tp, offset); break; case LAYER_LEG: if (index > 0) DrawTaskLine(last_point, tp.GetLocationRemaining()); last_point = tp.GetLocationRemaining(); break; case LAYER_OZ_OUTLINE: if (tp.BoundingBoxOverlaps(bb_screen)) { if (mode_optional_start && offset == 0) /* render optional starts as deactivated */ offset = -1; DrawOZForeground(tp, offset); } break; case LAYER_SYMBOLS: return; } }