void TupLuminancePicker::paintEvent(QPaintEvent *) { int w = width() - 5; QRect r(0, foff, w, height() - 2*foff); int wi = r.width() - 2; int hi = r.height() - 2; if (!k->pix || k->pix->height() != hi || k->pix->width() != wi) { delete k->pix; QImage img(wi, hi, QImage::Format_RGB32); int y; for (y = 0; y < hi; y++) { QColor c; c.setHsv(k->hue, k->sat, y2val(y+coff)); QRgb r = c.rgb(); int x; for (x = 0; x < wi; x++) img.setPixel(x, y, r); } k->pix = new QPixmap(QPixmap::fromImage(img)); } QPainter p(this); p.drawPixmap(1, coff, *k->pix); const QPalette &g = palette(); qDrawShadePanel(&p, r, g, true); p.setPen(g.foreground().color()); p.setBrush(g.foreground()); QPolygon a; int y = val2y(k->value); a.setPoints(3, w, y, w+5, y+5, w+5, y-5); p.eraseRect(w, 0, 5, height()); p.drawPolygon(a); }
void ColorLuminancePicker::paintEvent(QPaintEvent* /*event*/) { int w = width() - 5; QRect r(0, foff, w, height() - 2*foff); int wi = r.width() - 2; int hi = r.height() - 2; if (wi <= 1 || hi <= 1) return; if ((pix_ == 0) || (pix_->height() != hi) || (pix_->width() != wi)) { if (!pix_) delete pix_; QImage img(wi, hi, QImage::Format_RGB32); for (int y = 0 ; y < hi ; ++y) { QColor c; c.setHsv(hue_, sat_, y2val(y+coff)); QRgb r = c.rgb(); for (int x = 0 ; x < wi ; ++x) img.setPixel(x, y, r); } pix_ = new QPixmap(QPixmap::fromImage(img)); } // color bar QPainter p(this); p.drawPixmap(1, coff, *pix_); const QPalette &g = palette(); qDrawShadePanel(&p, r, g, true); p.setPen(g.foreground().color()); p.setBrush(g.foreground()); // arrow QPolygon a; int y = val2y(val_); a.setPoints(3, w, y, w+5, y+5, w+5, y-5); p.eraseRect(w, 0, 5, height()); p.drawPolygon(a); }
void YviColorLuminancePicker::paintEvent(QPaintEvent *) { int w = width() - 5; QRect r(0, foff, w, height() - 2*foff); int wi = r.width() - 2; int hi = r.height() - 2; if (!pix || pix->height() != hi || pix->width() != wi) { delete pix; QImage img(wi, hi, QImage::Format_RGB32); int y; uint *pixel = (uint *) img.scanLine(0); for (y = 0; y < hi; y++) { const uint *end = pixel + wi; while (pixel < end) { QColor c; c.setHsv(hue, sat, y2val(y+coff)); *pixel = c.rgb(); ++pixel; } } pix = new QPixmap(QPixmap::fromImage(img)); } QPainter p(this); p.drawPixmap(1, coff, *pix); const QPalette &g = palette(); qDrawShadePanel(&p, r, g, true); p.setPen(g.foreground().color()); p.setBrush(g.foreground()); QPolygon a; int y = val2y(val); a.setPoints(3, w, y, w+5, y+5, w+5, y-5); p.eraseRect(w, 0, 5, height()); p.drawPolygon(a); }
static gboolean process (GeglOperation *operation, GeglBuffer *input, GeglBuffer *output, const GeglRectangle *result, gint level) { GeglProperties *o = GEGL_PROPERTIES (operation); gint width = MAX(MAX (o->width, o->x0), o->x1); gint height = MAX(MAX (o->height, o->y0), o->y1); { GeglRectangle extent = {0,0,width,height}; output = gegl_buffer_new (&extent, babl_format ("B'aG'aR'aA u8")); } { guchar *buf = g_new0 (guchar, width * height * 4); cairo_t *cr; cairo_surface_t *surface = cairo_image_surface_create_for_data (buf, CAIRO_FORMAT_ARGB32, width, height, width * 4); cr = cairo_create (surface); /* cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_rectangle (cr, 0,0, o->width, o->height); cairo_fill (cr);*/ #define val2y(val) (o->height - (val - o->min) * o->height / (o->max-o->min)) cairo_set_source_rgba (cr, .0, .0, .8, 0.5); cairo_move_to (cr, 0, val2y(0.0)); cairo_line_to (cr, o->width, val2y(0.0)); cairo_set_source_rgba (cr, .8, .8, .0, 0.5); cairo_move_to (cr, 0, val2y(1.0)); cairo_line_to (cr, o->width, val2y(1.0)); cairo_stroke (cr); cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND); { gint x; cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0); for (x=0;x<o->width;x++) { gfloat t = (1.0*x)/o->width; gint sx = ((1.0-t) * o->x0) + (t * o->x1); gint sy = ((1.0-t) * o->y0) + (t * o->y1); cairo_line_to (cr, x, val2y(buffer_sample(input,sx,sy,0))); } cairo_stroke (cr); } { gint x; cairo_set_source_rgba (cr, 0.0, 1.0, 0.0, 1.0); for (x=0;x<o->width;x++) { gfloat t = (1.0*x)/o->width; gint sx = ((1.0-t) * o->x0) + (t * o->x1); gint sy = ((1.0-t) * o->y0) + (t * o->y1); cairo_line_to (cr, x, val2y(buffer_sample(input,sx,sy,1))); } cairo_stroke (cr); } { gint x; cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 1.0); for (x=0;x<o->width;x++) { gfloat t = (1.0*x)/o->width; gint sx = ((1.0-t) * o->x0) + (t * o->x1); gint sy = ((1.0-t) * o->y0) + (t * o->y1); cairo_line_to (cr, x, val2y(buffer_sample(input,sx,sy,2))); } cairo_stroke (cr); } cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.4); cairo_move_to (cr, o->x0, o->y0); cairo_line_to (cr, o->x1, o->y1); cairo_stroke (cr); gegl_buffer_set (output, NULL, 0, babl_format ("B'aG'aR'aA u8"), buf, GEGL_AUTO_ROWSTRIDE); } return TRUE; }