Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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();
}
Ejemplo n.º 6
0
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);
}