void CairoContext::set_source_rgba32(guint32 color) { double red = SP_RGBA32_R_F(color); double gre = SP_RGBA32_G_F(color); double blu = SP_RGBA32_B_F(color); double alp = SP_RGBA32_A_F(color); cairo_set_source_rgba(cobj(), red, gre, blu, alp); }
void ColorPicker::on_clicked() { if (_colorSelector) { SPColor color; color.set( _rgba ); _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(_rgba)); } _colorSelectorDialog.show(); }
void ColorPicker::setRgba32 (guint32 rgba) { if (_in_use) return; _preview.setRgba32 (rgba); _rgba = rgba; if (_colorSelector) { SPColor color; color.set( rgba ); _colorSelector->base->setColorAlpha(color, SP_RGBA32_A_F(rgba)); } }
static void sp_ctrlline_render (SPCanvasItem *item, SPCanvasBuf *buf) { SPCtrlLine *cl = SP_CTRLLINE (item); if (!buf->ct) return; if (cl->s == cl->e) return; sp_canvas_prepare_buffer (buf); guint32 rgba = cl->rgba; cairo_set_source_rgba(buf->ct, SP_RGBA32_B_F(rgba), SP_RGBA32_G_F(rgba), SP_RGBA32_R_F(rgba), SP_RGBA32_A_F(rgba)); cairo_set_line_width(buf->ct, 1); cairo_new_path(buf->ct); Geom::Point s = cl->s * cl->affine; Geom::Point e = cl->e * cl->affine; cairo_move_to (buf->ct, s[Geom::X] - buf->rect.x0, s[Geom::Y] - buf->rect.y0); cairo_line_to (buf->ct, e[Geom::X] - buf->rect.x0, e[Geom::Y] - buf->rect.y0); cairo_stroke(buf->ct); }
void ink_cairo_set_source_rgba32(cairo_t *ct, guint32 rgba) { cairo_set_source_rgba(ct, SP_RGBA32_R_F(rgba), SP_RGBA32_G_F(rgba), SP_RGBA32_B_F(rgba), SP_RGBA32_A_F(rgba)); }
static void sp_gradient_simplify(SPGradientContext *rc, double tolerance) { SPDocument *doc = NULL; GrDrag *drag = rc->_grdrag; GSList *these_stops = NULL; GSList *next_stops = NULL; std::vector<Geom::Point> coords = sp_gradient_context_get_stop_intervals (drag, &these_stops, &next_stops); GSList *todel = NULL; GSList *i = these_stops; GSList *j = next_stops; for (; i != NULL && j != NULL; i = i->next, j = j->next) { SPStop *stop0 = (SPStop *) i->data; SPStop *stop1 = (SPStop *) j->data; gint i1 = g_slist_index(these_stops, stop1); if (i1 != -1) { GSList *next_next = g_slist_nth (next_stops, i1); if (next_next) { SPStop *stop2 = (SPStop *) next_next->data; if (g_slist_find(todel, stop0) || g_slist_find(todel, stop2)) continue; guint32 const c0 = sp_stop_get_rgba32(stop0); guint32 const c2 = sp_stop_get_rgba32(stop2); guint32 const c1r = sp_stop_get_rgba32(stop1); guint32 c1 = average_color (c0, c2, (stop1->offset - stop0->offset) / (stop2->offset - stop0->offset)); double diff = sqr(SP_RGBA32_R_F(c1) - SP_RGBA32_R_F(c1r)) + sqr(SP_RGBA32_G_F(c1) - SP_RGBA32_G_F(c1r)) + sqr(SP_RGBA32_B_F(c1) - SP_RGBA32_B_F(c1r)) + sqr(SP_RGBA32_A_F(c1) - SP_RGBA32_A_F(c1r)); if (diff < tolerance) todel = g_slist_prepend (todel, stop1); } } } for (i = todel; i != NULL; i = i->next) { SPStop *stop = (SPStop*) i->data; doc = SP_OBJECT_DOCUMENT (stop); Inkscape::XML::Node * parent = SP_OBJECT_REPR(stop)->parent(); parent->removeChild(SP_OBJECT_REPR(stop)); } if (g_slist_length(todel) > 0) { sp_document_done (doc, SP_VERB_CONTEXT_GRADIENT, _("Simplify gradient")); drag->local_change = true; drag->updateDraggers(); drag->selectByCoords(coords); } g_slist_free (todel); g_slist_free (these_stops); g_slist_free (next_stops); }
static void sp_ctrlquadr_render (SPCanvasItem *item, SPCanvasBuf *buf) { SPCtrlQuadr *cq = SP_CTRLQUADR (item); if (!buf->ct) return; // RGB / BGR cairo_new_path(buf->ct); Geom::Point min = buf->rect.min(); Geom::Point p1 = (cq->p1 * cq->affine) - min; Geom::Point p2 = (cq->p2 * cq->affine) - min; Geom::Point p3 = (cq->p3 * cq->affine) - min; Geom::Point p4 = (cq->p4 * cq->affine) - min; cairo_move_to(buf->ct, p1[Geom::X], p1[Geom::Y]); cairo_line_to(buf->ct, p2[Geom::X], p2[Geom::Y]); cairo_line_to(buf->ct, p3[Geom::X], p3[Geom::Y]); cairo_line_to(buf->ct, p4[Geom::X], p4[Geom::Y]); cairo_line_to(buf->ct, p1[Geom::X], p1[Geom::Y]); // FIXME: this is supposed to draw inverse but cairo apparently is unable of this trick :( //cairo_set_operator (buf->ct, CAIRO_OPERATOR_XOR); cairo_set_source_rgba(buf->ct, SP_RGBA32_B_F(cq->rgba), SP_RGBA32_G_F(cq->rgba), SP_RGBA32_R_F(cq->rgba), SP_RGBA32_A_F(cq->rgba)); cairo_fill(buf->ct); }