[cairo] Query regarding Cairo.
Bryce W. Harrington
b.harrington at samsung.com
Sun Jul 7 22:40:46 PDT 2013
Hi Gaurav,
If you use all the cairo_move_to() calls then you end up with a rectangle made up of four discontinuous line segments.
http://www.bryceharrington.org/files/g.pruthi.before.png
Instead just use the first cairo_move_to() and then only cairo_line_to() after that. See:
http://www.bryceharrington.org/files/g.pruthi.c
http://www.bryceharrington.org/files/g.pruthi.after.png
Btw, the final cairo_line_to() call (when i==3) is unnecessary in this case; the cairo_close_path() call will complete the last line of the rect.
http://www.bryceharrington.org/files/g.pruthi.c
I couldn't find the tutorial that this sample code comes from. If you could please point me at it; if it's a cairographics.org tutorial it may need to be improved.
--
Bryce Harrington
Senior Open Source Developer - b.harrington at samsung.com
Open Source Group - Samsung Research America
________________________________
From: Gaurav Pruthi [g.pruthi at samsung.com]
Sent: Thursday, July 04, 2013 1:07 AM
To: Bryce W. Harrington
Subject: Query regarding Cairo.
Hi Bryce,
I found you on cairo mailing list. Just have one query if you have time to look into. I have just started using cairo library... I have seen examples to fill a
polygon which are repetitive calls to move_to() and line_to() routines. When I tried following snippet of code which is mentioned in most of the tutorials, but
it didn't worked.
void drawRectangle(cairo_t* cr)
{
cairo_path_t path;
cairo_path_data_t pathData[4];
pathData[0].point.x = 10 ;
pathData[0].point.y = 20;
pathData[1].point.x = 210;
pathData[1].point.y = 20;
pathData[2].point.x = 210;
pathData[2].point.y = 320;
pathData[3].point.x = 10;
pathData[3].point.y = 320;
//Set path data in path
cairo_move_to(cr, pathData[0].point.x, pathData[0].point.y);
for(int i =0 ; i<= 3; ++i)
{
cairo_move_to(cr, pathData[i].point.x, pathData[i].point.y);
if(i == 3){
cairo_line_to(cr, pathData[0].point.x, pathData[0].point.y);
}
else
cairo_line_to(cr, pathData[i+1].point.x, pathData[i+1].point.y);
}
cairo_close_path(cr);
cairo_set_source_rgb(cr,1.0,0.0,0.0);
cairo_fill_preserve(cr);
cairo_set_source_rgba(cr,0.0,1.0,0.0,0.5);
cairo_set_line_width(cr,10.0);
cairo_stroke(cr);
}
But this one worked where I am moving to the first point and just making line_to() calls is working .. below one:
void drawRectangle(cairo_t* cr)
{
cairo_path_t path;
cairo_path_data_t pathData[4];
pathData[0].point.x = 10 ;
pathData[0].point.y = 20;
pathData[1].point.x = 210;
pathData[1].point.y = 20;
pathData[2].point.x = 210;
pathData[2].point.y = 320;
pathData[3].point.x = 10;
pathData[3].point.y = 320;
cairo_move_to(cr, pathData[0].point.x, pathData[0].point.y);
for(int i =0 ; i< =3 ; ++i)
{
cairo_line_to(cr, pathData[i].point.x, pathData[i].point.y);
}
cairo_close_path(cr);
cairo_set_source_rgb(cr,1.0,0.0,0.0);
cairo_fill_preserve(cr);
cairo_set_source_rgba(cr,0.0,1.0,0.0,0.5);
cairo_set_line_width(cr,10.0);
cairo_stroke(cr);
}
First sample is based on the examples available on internet. Can you pls tell whats the problem with the first one.
Thanks a lot for your time.
Gaurav Pruthi
Display Platform
Samsung R&D India - Delhi Lab
[UrlBlockedError.aspx]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20130708/94b79456/attachment-0001.html>
More information about the cairo
mailing list