Added chat log on the topic of 2D drawing
This commit is contained in:
		
							
								
								
									
										52
									
								
								graphics-help-from-irc.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								graphics-help-from-irc.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,52 @@ | |||||||
|  | <W00d5t0ck> hello | ||||||
|  | <W00d5t0ck> what is the best way to create still 2D graphics? | ||||||
|  | <desrt> cairo | ||||||
|  | <desrt> it has a fairly nice interface like "go to this point, then to this point, draw a line, draw an arc" and so on | ||||||
|  | <W00d5t0ck> can it handle external images? | ||||||
|  | <desrt> like pngs, etc? | ||||||
|  | <W00d5t0ck> I have svg, as it scales better | ||||||
|  | <W00d5t0ck> but basicly, yes | ||||||
|  | <desrt> you can use librsvg to render svgs to cairo, in vector form | ||||||
|  | <desrt> if you go through a different image loader library (like GdkPixbuf) then you'll end up rasterising it first | ||||||
|  | <W00d5t0ck> the first version is more to my likes | ||||||
|  | <desrt> you might find this helpful: http://cgit.freedesktop.org/~cworth/svg2pdf/tree/svg2pdf.c | ||||||
|  | <desrt> shows how to render an svg to a cairo pdf surface | ||||||
|  | <desrt> but you could just as well use it for other cairo surfaces, including the ones you get out of gtk | ||||||
|  | * nkoep kilépett (Read error: 145 (Connection timed out)) | ||||||
|  | <W00d5t0ck> thank you | ||||||
|  | <desrt> are you making something that you want to end up on the screen eventually? | ||||||
|  | <W00d5t0ck> yes | ||||||
|  | <W00d5t0ck> and possibly to save it to an image file later | ||||||
|  | <desrt> depending on your app, you'll either want to create a cairo image surface and draw to it, then draw the image surface to the screen from your gtk draw() function | ||||||
|  | <desrt> or just draw directly to gtk's cairo context from your draw function | ||||||
|  | <desrt> cairo_surface_write_to_png() will help with that | ||||||
|  | * yoseforb kilépett (Remote closed the connection) | ||||||
|  | <W00d5t0ck> I'll take a look then | ||||||
|  | * yoseforb (~yoseforb@164.138.127.79) csatlakozott ide: #gtk+ | ||||||
|  | <W00d5t0ck> and if I want to get a bit farther? Like I want to add some actions to the svg parts? E.g. tooltips should appear when I hover a specific "sub-image" | ||||||
|  | <desrt> that would be complicated | ||||||
|  | <W00d5t0ck> I was more than sure :) | ||||||
|  | <desrt> particularly if you wanted to do it for named parts of the svg file... | ||||||
|  | <desrt> if you want to do it for a particular hard-coded coordinate you could use a motion notify event and a handler that does a popup when the mouse is over the area you care about | ||||||
|  | <desrt> but i don't think rsvg has any mechanism for saying "the box with xml id 'foo' is at these coordinates" | ||||||
|  | <W00d5t0ck> no, the svg files I load are small icons actually | ||||||
|  | <W00d5t0ck> no named parts | ||||||
|  | <desrt> probably would not be too hard then | ||||||
|  | <W00d5t0ck> they are svg onlf for scalability | ||||||
|  | <desrt> from the Gtk side, you're probably going to want to use a GtkDrawingArea | ||||||
|  | <W00d5t0ck> I've already figured out that, I'm currently digging my nose into Gtk documentation to see how to draw on it | ||||||
|  | <desrt> then do gtk_widget_add_events() on it for GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK | ||||||
|  | <chpe> actually there is an API for that in rsvg, but it's horribly slow | ||||||
|  | <desrt> W00d5t0ck: connect to the "draw" signal on the drawing area | ||||||
|  | <desrt> it will hand you a cairo_t as one of the arguments | ||||||
|  | <desrt> draw on it.... | ||||||
|  | <chpe> well, id -> rect, but not the other way | ||||||
|  | <desrt> chpe: neat.  that's very useful. | ||||||
|  | <desrt> W00d5t0ck: what language are you using? | ||||||
|  | <desrt> if it's anything other than C, you almost certainly want to subclass GtkDrawingArea | ||||||
|  | <W00d5t0ck> I'm only familiar enough with C | ||||||
|  | <desrt> and if it is C, and you know how to subclass, i'd still recommend doing it that way, and overriding the 'draw' function in the subclass | ||||||
|  | <W00d5t0ck> I've done subclassing back in Gtk 2, with C | ||||||
|  | <desrt> it's the same deal still | ||||||
|  | <W00d5t0ck> so I think it won't be a problem | ||||||
|  | <desrt> 'cept gtk2 didn't have 'draw' | ||||||
		Reference in New Issue
	
	Block a user