Changes

1,286 bytes added ,  13:33, 11 November 2011
Line 175: Line 175:  
GTK-3 does not support gtk Drawable objects, so the first step is to get your activity running under Cairo.
 
GTK-3 does not support gtk Drawable objects, so the first step is to get your activity running under Cairo.
    +
<pre>
 
  # From activity.Activity, you inherit a canvas. Get its window.
 
  # From activity.Activity, you inherit a canvas. Get its window.
 
  win = self.canvas.get_window()
 
  win = self.canvas.get_window()
Line 199: Line 200:  
  cr.fill()
 
  cr.fill()
   −
  # To invalidate a region to forse a refresh, use:
+
  # To invalidate a region to force a refresh, use:
 
  self.canvas.queue_draw_area(x, y, w, h)
 
  self.canvas.queue_draw_area(x, y, w, h)
 +
</pre>
 +
 +
Pango is a bit different when used with Cairo:
 +
 +
<pre>
 +
# Again, from the xlib_surface...
 +
cr = cairo.Context(xlib_surface)
 +
 +
# Create a PangoCairo context
 +
cr = pangocairo.CairoContext(cr)
 +
 +
# The pango layout is created from the Cairo context
 +
pl = cr.create_layout()
 +
 +
# You still use pango to set up font descriptions.
 +
fd = pango.FontDescription('Sans')
 +
fd.set_size(12 * pango.SCALE)
    +
# Tell your pango layout about your font description
 +
pl.set_font_description(fd)
   −
   
+
  # Write text to your pango layout
 +
pl.set_text('Hello world')
 +
 
 +
# Position it within the Cairo context
 +
cr.save()
 +
cr.translate(x, y)
 +
cr.rotate(pi / 3)  # You can rotate text and images in Cairo
 +
cr.set_source_rgb(1, 0, 0)
 +
 
 +
# Finally, draw the text
 +
cr.update_layout(pl)
 +
cr.show_layout(pl)
 +
cr.restore()
 +
</pre>
 +
 
 +
To draw a bitmap...
 +
 
 +
<pre>
 +
# Again, from the xlib_surface...
 +
cr = cairo.Context(xlib_surface)
 +
 
 +
# Create a gtk context
 +
cr = gtk.gdk.CairoContext(cr)
 +
cr.set_source_pixbuf(pixbuf, x, y)
 +
cr.rectangle(x, y, w, h)
 +
cr.fill()
 +
</pre>
 +
 
 +
To read a pixel...
 +
 
 +
<pre>
 +
# Map the xlib surface onto a pixmap
 +
pixmap = gtk.gdk.Pixmap(None, w, h, 24)
 +
cr = pixmap.cairo_create()
 +
cr.set_source_surface(xlib_surface, 0, 0)
 +
cr.paint()
 +
 
 +
# Read the pixel
 +
pixel = pixmap.get_image(x, y, 1, 1).get_pixel(0, 0)
 +
return(int((pixel & 0xFF0000) >> 16),  # red
 +
        int((pixel & 0x00FF00) >> 8),  # green
 +
        int((pixel & 0x0000FF) >> 0), 0)  # blue
 +
</pre>
   −
:* Example: abacus-cairo
+
===Going from Cairo in GTK-2 to Cairo in GTK-3===
:* Example: abacus-gtk3
  −
* The conversion script (here) leaves a few things to be done by hand:
  −
:* Notes from conversion from abacus-cairo to abacus-gtk3
     −
* Notes from the TurtleArt conversion
+
Not much changes, but...
* Removing Hippo
      
===Taking a screenshot and making a thumbnail===
 
===Taking a screenshot and making a thumbnail===