void QQuickContext2DTexture::canvasChanged(const QSize& canvasSize, const QSize& tileSize, const QRect& canvasWindow, const QRect& dirtyRect, bool smooth, bool antialiasing) { QSize ts = tileSize; if (ts.width() > canvasSize.width()) ts.setWidth(canvasSize.width()); if (ts.height() > canvasSize.height()) ts.setHeight(canvasSize.height()); setCanvasSize(canvasSize); setTileSize(ts); setCanvasWindow(canvasWindow); if (canvasSize == canvasWindow.size()) { m_tiledCanvas = false; } else { m_tiledCanvas = true; } if (dirtyRect.isValid()) setDirtyRect(dirtyRect); setSmooth(smooth); setAntialiasing(antialiasing); }
bool DrawFreehandTool::mouseMoveEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget) { Q_UNUSED(widget); bool mouse_down = containsDrawingButtons(event->buttons()); if (!mouse_down) { if (!editingInProgress()) { setPreviewPointsPosition(map_coord); setDirtyRect(); } } else { if (!editingInProgress()) return false; dragging = true; cur_pos = event->pos(); cur_pos_map = map_coord; updatePath(); } return true; }
void DrawCircleTool::updateCircle() { MapCoordF first_pos_map; if (start_from_center) first_pos_map = circle_start_pos_map + (circle_start_pos_map - opposite_pos_map); else first_pos_map = circle_start_pos_map; float radius = 0.5f * first_pos_map.distanceTo(opposite_pos_map); float kappa = BEZIER_KAPPA; float m_kappa = 1 - BEZIER_KAPPA; MapCoordF across = opposite_pos_map - first_pos_map; across.setLength(radius); MapCoordF right = across.perpRight(); float right_radius = radius; if (second_point_set && dragging) { if (right.length() < 1e-8) right_radius = 0; else { MapCoordF to_cursor = cur_pos_map - first_pos_map; right_radius = MapCoordF::dotProduct(to_cursor, right) / right.length(); } } right.setLength(right_radius); preview_path->clearCoordinates(); preview_path->addCoordinate(MapCoord(first_pos_map, MapCoord::CurveStart)); preview_path->addCoordinate(MapCoord(first_pos_map + kappa * right)); preview_path->addCoordinate(MapCoord(first_pos_map + right + m_kappa * across)); preview_path->addCoordinate(MapCoord(first_pos_map + right + across, MapCoord::CurveStart)); preview_path->addCoordinate(MapCoord(first_pos_map + right + (1 + kappa) * across)); preview_path->addCoordinate(MapCoord(first_pos_map + kappa * right + 2 * across)); preview_path->addCoordinate(MapCoord(first_pos_map + 2 * across, MapCoord::CurveStart)); preview_path->addCoordinate(MapCoord(first_pos_map - kappa * right + 2 * across)); preview_path->addCoordinate(MapCoord(first_pos_map - right + (1 + kappa) * across)); preview_path->addCoordinate(MapCoord(first_pos_map - right + across, MapCoord::CurveStart)); preview_path->addCoordinate(MapCoord(first_pos_map - right + m_kappa * across)); preview_path->addCoordinate(MapCoord(first_pos_map - kappa * right)); preview_path->parts().front().setClosed(true, false); updatePreviewPath(); setDirtyRect(); }
bool DrawCircleTool::mouseMoveEvent(QMouseEvent* event, MapCoordF map_coord, MapWidget* widget) { Q_UNUSED(widget); bool mouse_down = containsDrawingButtons(event->buttons()); if (!mouse_down) { if (!editingInProgress()) { setPreviewPointsPosition(map_coord); setDirtyRect(); } else { cur_pos = event->pos(); cur_pos_map = map_coord; if (!second_point_set) opposite_pos_map = map_coord; updateCircle(); } } else { if (!editingInProgress()) return false; if ((event->pos() - click_pos).manhattanLength() >= Settings::getInstance().getStartDragDistancePx()) { if (!dragging) { dragging = true; updateStatusText(); } } if (dragging) { cur_pos = event->pos(); cur_pos_map = map_coord; if (!second_point_set) opposite_pos_map = cur_pos_map; updateCircle(); } } return true; }
void DrawFreehandTool::updatePath() { float length_threshold_sq = 0.06f*0.06f; // minimum point distance in mm if (!dragging) { preview_path->clearCoordinates(); preview_path->addCoordinate(MapCoord(cur_pos_map)); } else { if (last_pos_map.distanceSquaredTo(cur_pos_map) < length_threshold_sq) return; preview_path->addCoordinate(MapCoord(cur_pos_map)); } last_pos_map = cur_pos_map; updatePreviewPath(); setDirtyRect(); }
void DirtyRects::setDirtyLine(int x1, int y1, int x2, int y2) { int min_x,min_y, max_x, max_y; if (x1<=x2) { min_x=x1; max_x=x2; } else { min_x=x2; max_x=x1; } if (y1<=y2) { min_y=y1; max_y=y2; } else { min_y=y2; max_y=y1; } setDirtyRect(min_x,min_y,max_x-min_x+1,max_y-min_y+1); }