void CutTool::draw(QPainter* painter, MapWidget* widget) { Map* map = this->map(); map->drawSelection(painter, true, widget, nullptr); for (const auto object: map->selectedObjects()) { auto hover_point = MapCoordVector::size_type { (hover_object == object) ? this->hover_point : std::numeric_limits<MapCoordVector::size_type>::max() }; pointHandles().draw(painter, widget, object, hover_point); } if (preview_path) { const MapView* map_view = widget->getMapView(); painter->save(); painter->translate(widget->width() / 2.0 + map_view->panOffset().x(), widget->height() / 2.0 + map_view->panOffset().y()); painter->setWorldTransform(map_view->worldTransform(), true); RenderConfig config = { *map, map_view->calculateViewedRect(widget->viewportToView(widget->rect())), map_view->calculateFinalZoomFactor(), RenderConfig::Tool, 0.5 }; renderables->draw(painter, config); painter->restore(); } if (path_tool) path_tool->draw(painter, widget); }
void EditPointTool::drawImpl(QPainter* painter, MapWidget* widget) { auto num_selected_objects = map()->selectedObjects().size(); if (num_selected_objects > 0) { drawSelectionOrPreviewObjects(painter, widget, text_editor != nullptr); if (!text_editor) { Object* object = *map()->selectedObjectsBegin(); if (num_selected_objects == 1 && object->getType() == Object::Text && !object->asText()->hasSingleAnchor()) { drawBoundingPath(painter, widget, object->asText()->controlPoints(), hover_state.testFlag(OverFrame) ? active_color : selection_color); } else if (selection_extent.isValid()) { auto active = hover_state.testFlag(OverFrame) && !hover_state.testFlag(OverObjectNode); drawBoundingBox(painter, widget, selection_extent, active ? active_color : selection_color); } if (num_selected_objects <= max_objects_for_handle_display) { for (const auto object: map()->selectedObjects()) { auto active = hover_state.testFlag(OverObjectNode) && hover_object == object; auto hover_point = active ? this->hover_point : no_point; pointHandles().draw(painter, widget, object, hover_point, true, PointHandles::NormalHandleState); } } } } // Text editor if (text_editor) { painter->save(); widget->applyMapTransform(painter); text_editor->draw(painter, widget); painter->restore(); } // Box selection if (isDragging() && box_selection) drawSelectionBox(painter, widget, click_pos_map, cur_pos_map); }