SFML community forums
General => SFML projects => Topic started by: Kingdom of Fish on May 23, 2010, 11:19:27 pm
-
I've written a really basic class for drawing stuff with Cairo and then using it as a normal sprite in SFML and I call the project CairoShape (http://sfml-dev.org/wiki/en/sources/cairoshape). I think it would be possible to actually use it in a practical application but my main intention is to create placeholder graphics when I'm playing with SFML.
The Shape class in SFML has its positive sides but I don't feel like I have the freedom sometimes.
If you find it in anyway useful please improve on it.
-
Could you tell us a little bit more about CairoShape? What is it conceived for? What are the differences between it and sf::Shape? Which features does it provide?
It would be nice to learn more about your project, at the moment I have no idea. And a description in words is much better than one in code... ;)
-
I guess he's using the Cairo 2D graphics library to draw shapes into an image buffer, thus providing it to SFML.
I like the idea, as it moves a bit forward in the vectorized graphics direction. However, an "SVG load plug-in" would be still great. Simple reason: SVG is rather popular and a lot of editing tools exist.
-
Could you tell us a little bit more about CairoShape? What is it conceived for? What are the differences between it and sf::Shape? Which features does it provide?
It would be nice to learn more about your project, at the moment I have no idea. And a description in words is much better than one in code... ;)
It works similar to a sprite but instead of supplying it with an image you give it a function like this one:
void CairoShape::DefaultDrawFunc(cairo_t *cr, float Width, float Height)
{
cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 1.0);
cairo_rectangle(cr, 0, 0, 1.0, 0.33);
cairo_fill(cr);
cairo_set_source_rgba(cr, 0.0, 1.0, 0.0, 1.0);
cairo_rectangle(cr, 0, 0.33, 1.0, 0.66);
cairo_fill(cr);
cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 1.0);
cairo_rectangle(cr, 0, 0.66, 1.0, 1.0);
cairo_fill(cr);
// This cairo_set_source_rgba call is just to have a different color on each redraw of the image.
cairo_set_source_rgba(cr, (rand()%255)/255.0,(rand()%255)/255.0,(rand()%255)/255.0,0.75);
cairo_rectangle(cr, 0.1, 0.1, 0.8, 0.8);
cairo_set_line_width(cr, 0.05);
cairo_stroke(cr);
}
Then the CairoShape class will handle redrawing on resize mainly. It would probably be most convinient when you wish to draw gradients, lots of alpha or svg. As far as features go it doesn't have much, all my work so far has gone into handeling resizing properly, but I plan on making a sf::Shape-like interface and most likely a svg-loader of some sort, but that is just sub-classing.
The reason I've made this class at all is because I felt I needed it when I started working on a physics-simulator project and I knew that I wouldn't want to create alot of resources in GIMP or similar.
So far it has got some bugs, mainly dealing with scale when doing things that aren't square.
-
So it enables loading SVG? What are the exact dependencies?
However, sounds good so far.
-
So it enables loading SVG? What are the exact dependencies?
However, sounds good so far.
I haven't really looked into it yet but i suspect that it would require some extra libraries to load svgs but cairo is a step on the way. The dependencies so far is just cairo, later maybe librsvg or something similar.
-
I see, thanks. Would be nice if you keep this thread up-to-date. :)
-
I see, thanks. Would be nice if you keep this thread up-to-date. :)
Yeah, I will try, I'm currently rewritting it so that the cairo drawing is done with a image class instead :)
-
A brand new version, it should be clearer how to use and it is less code. The main difference is that there is now automatic resizing now. http://sfml-dev.org/wiki/en/sources/cairoshape