MCPcopy Create free account
hub / github.com/OpenOrienteering/mapper / draw

Method draw

src/tools/draw_rectangle_tool.cpp:429–491  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

427}
428
429void DrawRectangleTool::draw(QPainter* painter, MapWidget* widget)
430{
431 drawPreviewObjects(painter, widget);
432
433 if (editingInProgress())
434 {
435 // Snap line
436 if (snapped_to_line)
437 {
438 // Simple hack to make line extend over the whole screen in most cases
439 const auto scale_factor = 100;
440 MapCoord a = snapped_to_line_b + (snapped_to_line_a - snapped_to_line_b) * scale_factor;
441 MapCoord b = snapped_to_line_b - (snapped_to_line_a - snapped_to_line_b) * scale_factor;
442
443 painter->setPen(selection_color);
444 painter->drawLine(widget->mapToViewport(a), widget->mapToViewport(b));
445 }
446
447 // Helper cross
448 bool use_preview_radius = Settings::getInstance().getSettingCached(Settings::RectangleTool_PreviewLineWidth).toBool();
449 const double preview_radius_min_pixels = 2.5;
450 if (widget->getMapView()->lengthToPixel(preview_point_radius) < preview_radius_min_pixels)
451 use_preview_radius = false;
452
453 auto helper_cross_radius = Settings::getInstance().getRectangleToolHelperCrossRadiusPx();
454 painter->setRenderHint(QPainter::Antialiasing);
455
456 auto perp_vector = forward_vector.perpRight();
457
458 painter->setPen((angles.size() > 1) ? inactive_color : active_color);
459 if (preview_point_radius == 0 || !use_preview_radius)
460 {
461 painter->drawLine(widget->mapToViewport(cur_pos_map) + helper_cross_radius * forward_vector,
462 widget->mapToViewport(cur_pos_map) - helper_cross_radius * forward_vector);
463 }
464 else
465 {
466 painter->drawLine(widget->mapToViewport(cur_pos_map + preview_point_radius * perp_vector / 1000) + helper_cross_radius * forward_vector,
467 widget->mapToViewport(cur_pos_map + preview_point_radius * perp_vector / 1000) - helper_cross_radius * forward_vector);
468 painter->drawLine(widget->mapToViewport(cur_pos_map - preview_point_radius * perp_vector / 1000) + helper_cross_radius * forward_vector,
469 widget->mapToViewport(cur_pos_map - preview_point_radius * perp_vector / 1000) - helper_cross_radius * forward_vector);
470 }
471
472 painter->setPen(active_color);
473 if (preview_point_radius == 0 || !use_preview_radius)
474 {
475 painter->drawLine(widget->mapToViewport(cur_pos_map) + helper_cross_radius * perp_vector,
476 widget->mapToViewport(cur_pos_map) - helper_cross_radius * perp_vector);
477 }
478 else
479 {
480 painter->drawLine(widget->mapToViewport(cur_pos_map + preview_point_radius * forward_vector / 1000) + helper_cross_radius * perp_vector,
481 widget->mapToViewport(cur_pos_map + preview_point_radius * forward_vector / 1000) - helper_cross_radius * perp_vector);
482 painter->drawLine(widget->mapToViewport(cur_pos_map - preview_point_radius * forward_vector / 1000) + helper_cross_radius * perp_vector,
483 widget->mapToViewport(cur_pos_map - preview_point_radius * forward_vector / 1000) - helper_cross_radius * perp_vector);
484 }
485 }
486

Callers

nothing calls this directly

Calls 8

mapToViewportMethod · 0.80
getSettingCachedMethod · 0.80
lengthToPixelMethod · 0.80
getMapViewMethod · 0.80
perpRightMethod · 0.80
setPenMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected