/** * Creates an anchor object and initializes it. */ SPDrawAnchor *sp_draw_anchor_new(SPDrawContext *dc, SPCurve *curve, gboolean start, Geom::Point delta) { if (SP_IS_LPETOOL_CONTEXT(dc)) { // suppress all kinds of anchors in LPEToolContext return NULL; } SPDesktop *dt = SP_EVENT_CONTEXT_DESKTOP(dc); SPDrawAnchor *a = g_new(SPDrawAnchor, 1); a->dc = dc; a->curve = curve; curve->ref(); a->start = start; a->active = FALSE; a->dp = delta; a->ctrl = sp_canvas_item_new(sp_desktop_controls(dt), SP_TYPE_CTRL, "size", 6.0, "filled", 1, "fill_color", FILL_COLOR_NORMAL, "stroked", 1, "stroke_color", 0x000000ff, NULL); SP_CTRL(a->ctrl)->moveto(delta); return a; }
static SPDrawAnchor * sp_draw_anchor_new (SPDrawContext *dc, SPCurve *curve, gboolean start, gdouble dx, gdouble dy) { SPDrawAnchor *a; g_print ("Creating anchor at %g %g\n", dx, dy); a = g_new (SPDrawAnchor, 1); a->dc = dc; a->curve = curve; a->start = start; a->active = FALSE; a->dp.x = dx; a->dp.y = dy; sp_desktop_d2w_xy_point (SP_EVENT_CONTEXT_DESKTOP (dc), &a->wp, dx, dy); a->ctrl = sp_canvas_item_new (SP_DT_CONTROLS (SP_EVENT_CONTEXT_DESKTOP (dc)), SP_TYPE_CTRL, "size", 4.0, "filled", 0, "fill_color", 0xff00007f, "stroked", 1, "stroke_color", 0x000000ff, NULL); sp_ctrl_moveto (SP_CTRL (a->ctrl), dx, dy); return a; }
/** * Move knot to new position, without emitting a MOVED signal. */ void sp_knot_moveto(SPKnot *knot, Geom::Point const &p) { g_return_if_fail(knot != NULL); g_return_if_fail(SP_IS_KNOT(knot)); knot->pos = p; if (knot->item) { SP_CTRL(knot->item)->moveto (p); } }
void create_canvas_point(Geom::Point const &pos, double size, guint32 rgba) { SPDesktop *desktop = inkscape_active_desktop(); SPCanvasItem * canvas_pt = sp_canvas_item_new(sp_desktop_controls(desktop), SP_TYPE_CTRL, "size", size, "filled", 1, "fill_color", rgba, "stroked", 1, "stroke_color", 0x000000ff, NULL); SP_CTRL(canvas_pt)->moveto(pos); }
static void spdc_pen_set_ctrl (SPPenContext *pc, NRPointF *p, guint state) { SPDrawContext *dc; dc = SP_DRAW_CONTEXT (pc); sp_canvas_item_show (pc->c1); sp_canvas_item_show (pc->cl1); if (dc->npoints == 2) { dc->p[1] = *p; sp_canvas_item_hide (pc->c0); sp_canvas_item_hide (pc->cl0); sp_ctrl_moveto (SP_CTRL (pc->c1), dc->p[1].x, dc->p[1].y); sp_ctrlline_set_coords (SP_CTRLLINE (pc->cl1), dc->p[0].x, dc->p[0].y, dc->p[1].x, dc->p[1].y); } else if (dc->npoints == 5) { dc->p[4] = *p; sp_canvas_item_show (pc->c0); sp_canvas_item_show (pc->cl0); if (((pc->mode == SP_PEN_CONTEXT_MODE_CLICK) && (state & GDK_CONTROL_MASK)) || ((pc->mode == SP_PEN_CONTEXT_MODE_DRAG) && !(state & GDK_MOD1_MASK))) { gdouble dx, dy; dx = p->x - dc->p[3].x; dy = p->y - dc->p[3].y; dc->p[2].x = dc->p[3].x - dx; dc->p[2].y = dc->p[3].y - dy; sp_curve_reset (dc->red_curve); sp_curve_moveto (dc->red_curve, dc->p[0].x, dc->p[0].y); sp_curve_curveto (dc->red_curve, dc->p[1].x, dc->p[1].y, dc->p[2].x, dc->p[2].y, dc->p[3].x, dc->p[3].y); sp_canvas_bpath_set_bpath (SP_CANVAS_BPATH (dc->red_bpath), dc->red_curve); } sp_ctrl_moveto (SP_CTRL (pc->c0), dc->p[2].x, dc->p[2].y); sp_ctrlline_set_coords (SP_CTRLLINE (pc->cl0), dc->p[3].x, dc->p[3].y, dc->p[2].x, dc->p[2].y); sp_ctrl_moveto (SP_CTRL (pc->c1), dc->p[4].x, dc->p[4].y); sp_ctrlline_set_coords (SP_CTRLLINE (pc->cl1), dc->p[3].x, dc->p[3].y, dc->p[4].x, dc->p[4].y); } else { g_warning ("Something bad happened - npoints is %d", dc->npoints); } }
static gboolean sp_sel_trans_handle_request (SPKnot * knot, NRPointF *position, guint state, gboolean * data) { SPDesktop * desktop; SPSelTrans * seltrans; SPSelTransHandle * handle; NRPointF point; if (!SP_KNOT_IS_GRABBED (knot)) return TRUE; desktop = knot->desktop; seltrans = &SP_SELECT_CONTEXT (desktop->event_context)->seltrans; handle = (SPSelTransHandle *) data; sp_desktop_set_coordinate_status (desktop, position->x, position->y, 0); sp_view_set_position (SP_VIEW (desktop), position->x, position->y); if (state & GDK_MOD1_MASK) { sp_sel_trans_point_desktop (seltrans, &point); position->x = point.x + (position->x - point.x) / 10; position->y = point.y + (position->y - point.y) / 10; } if (!(state & GDK_SHIFT_MASK) == !(seltrans->state == SP_SELTRANS_STATE_ROTATE)) { seltrans->origin = seltrans->opposit; } else { seltrans->origin = seltrans->center; } if (handle->request (seltrans, handle, position, state)) { sp_knot_set_position (knot, position, state); sp_ctrl_moveto (SP_CTRL (seltrans->grip), position->x, position->y); sp_ctrl_moveto (SP_CTRL (seltrans->norm), seltrans->origin.x, seltrans->origin.y); } return TRUE; }
/** * Move knot to new position. */ void sp_knot_set_position(SPKnot *knot, Geom::Point const &p, guint state) { g_return_if_fail(knot != NULL); g_return_if_fail(SP_IS_KNOT (knot)); knot->pos = p; if (knot->item) { SP_CTRL(knot->item)->moveto (p); } g_signal_emit(knot, knot_signals[MOVED], 0, &p, state); knot->_moved_signal.emit(knot, p, state); }