1 <!-- ##### SECTION ./tmpl/from-drawables.sgml:Title ##### -->
5 <!-- ##### USER_FUNCTION GdkPixbufLastUnref ##### -->
7 A function of this type can be used to override the default
8 operation when a pixbuf loses its last reference, i.e. when
9 gdk_pixbuf_unref() is called on a #GdkPixbuf structure that has a
10 reference count of 1. This function should determine whether to
11 finalize the pixbuf by calling gdk_pixbuf_finalize(), or whether
12 to just resume normal execution. The last unref handler for a
13 #GdkPixbuf can be set using the
14 gdk_pixbuf_set_last_unref_handler() function. By default, pixbufs
15 will be finalized automatically if no last unref handler has been
19 @pixbuf: The pixbuf that is losing its last reference.
20 @data: User closure data.
22 <!-- ##### ARG GnomeCanvasPixbuf:height_pixels ##### -->
28 <!-- ##### SECTION ./tmpl/rendering.sgml:See_Also ##### -->
34 <!-- ##### SECTION ./tmpl/xlib-from-drawables.sgml:Title ##### -->
35 X Drawables to Pixbufs
38 <!-- ##### FUNCTION gdk_pixbuf_render_pixmap_and_mask ##### -->
46 @alpha_threshold: <!--
49 sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
53 <!-- ##### ARG GnomeCanvasPixbuf:width ##### -->
55 Indicates the width the pixbuf will be scaled to. This argument
56 will only be used if the <link
57 linkend="GnomeCanvasPixbuf--width-set">width_set</link> argument
58 is %TRUE. If the <link
59 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>
60 argument is %FALSE, the width will be taken to be in canvas units,
61 and thus will be scaled along with the canvas item's affine
62 transformation. If width_in_pixels is %TRUE, the width will be
63 taken to be in pixels, and will visually remain a constant size
64 even if the item's affine transformation changes.
68 <!-- ##### FUNCTION gdk_pixbuf_render_to_drawable ##### -->
86 <!-- ##### FUNCTION gdk_pixbuf_get_from_drawable ##### -->
103 sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
107 <!-- ##### ARG GnomeCanvasPixbuf:x ##### -->
109 Indicates the horizontal translation offset of the pixbuf item's
110 image. This offset may not actually appear horizontal, since it
111 will be affected by the item's affine transformation. The default
116 <!-- ##### ARG GnomeCanvasPixbuf:y ##### -->
118 Indicates the vertical translation offset of the pixbuf item's
119 image. Works in the same way as the <link
120 linkend="GnomeCanvasPixbuf--x">x</link> argument. The default is
125 <!-- ##### SECTION ./tmpl/xlib-init.sgml:Short_Description ##### -->
126 Initializing the &gdk-pixbuf; Xlib library.
129 <!-- ##### SECTION ./tmpl/xlib-from-drawables.sgml:Long_Description ##### -->
131 The functions in this section allow you to take the image data
132 from an X drawable and dump it into a #GdkPixbuf. This can be
133 used for screenshots and other special effects. Note that these
134 operations can be expensive, since the image data has to be
135 transferred from the X server to the client program and converted.
139 These functions are analogous to those for the Gdk version of
144 <!-- ##### FUNCTION gdk_pixbuf_new_from_art_pixbuf ##### -->
152 <!-- ##### SECTION ./tmpl/xlib-init.sgml:See_Also ##### -->
158 <!-- ##### ARG GnomeCanvasPixbuf:y_in_pixels ##### -->
160 Works in the same way as the <link
161 linkend="GnomeCanvasPixbuf--x-in-pixels">x_in_pixels</link>
162 argument, but controls whether the <link
163 linkend="GnomeCanvasPixbuf--y">y</link> translation offset is
164 scaled or not. The default is %FALSE.
170 sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
175 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:See_Also ##### -->
177 #GnomeCanvas, #GdkPixbuf
181 <!-- ##### ARG GnomeCanvasPixbuf:y_pixels ##### -->
187 <!-- ##### ARG GnomeCanvasPixbuf:pixbuf ##### -->
189 Contains a pointer to a #GdkPixbuf structure that will be used by
190 the pixbuf canvas item as an image source. When a pixbuf is set
191 its reference count is incremented; if the pixbuf item kept a
192 pointer to another #GdkPixbuf structure, the reference count of
193 this structure will be decremented. Also, the GdkPixbuf's
194 reference count will automatically be decremented when the
195 #GnomeCanvasPixbuf item is destroyed. When a pixbuf is queried, a
196 reference count will not be added to the return value; you must do
197 this yourself if you intend to keep the pixbuf structure around.
201 <!-- ##### SECTION ./tmpl/xlib-rgb.sgml:See_Also ##### -->
207 <!-- ##### SECTION ./tmpl/xlib-rendering.sgml:Long_Description ##### -->
209 The &gdk-pixbuf; Xlib library provides several convenience
210 functions to render pixbufs to X drawables. It uses XlibRGB to
211 render the image data.
215 These functions are analogous to those for the Gdk version of
220 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:Short_Description ##### -->
224 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:Short_Description ##### -->
225 Canvas item to display #GdkPixbuf images.
228 <!-- ##### ARG GnomeCanvasPixbuf:x_in_pixels ##### -->
230 If this argument is %TRUE, the pixbuf's translation with respect
231 to its logical origin in item-relative coordinates will be in
232 pixels, that is, the visible offset will not change even if the
233 item's affine transformation changes. If it is %FALSE, the
234 pixbuf's translation will be taken to be in canvas units, and thus
235 will change along with the item's affine transformation. The
240 <!-- ##### SECTION ./tmpl/from-drawables.sgml:Long_Description ##### -->
242 The functions in this section allow you to take the image data
243 from a GDK drawable and dump it into a #GdkPixbuf. This can be
244 used for screenshots and other special effects. Note that these
245 operations can be expensive, since the image data has to be
246 transferred from the X server to the client program and converted.
250 <!-- ##### SECTION ./tmpl/xlib-rgb.sgml:Long_Description ##### -->
252 The XlibRGB set of functions is a port of the GdkRGB library to
253 use plain Xlib and X drawables. You can use these functions to
254 render RGB buffers into drawables very quickly with high-quality
259 <!-- ##### SECTION ./tmpl/xlib-rgb.sgml:Short_Description ##### -->
260 Functions for rendering RGB buffers to X drawables.
263 <!-- ##### MACRO GNOME_CANVAS_PIXBUF ##### -->
265 Casts a #GtkOjbect to a #GnomeCanvasPixbuf.
270 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:See_Also ##### -->
276 <!-- ##### SECTION ./tmpl/xlib-rendering.sgml:Short_Description ##### -->
277 Rendering a pixbuf to an X drawable.
280 <!-- ##### FUNCTION gdk_pixbuf_finalize ##### -->
288 sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
292 <!-- ##### SECTION ./tmpl/rendering.sgml:Short_Description ##### -->
293 Rendering a pixbuf to a GDK drawable.
296 <!-- ##### FUNCTION gdk_pixbuf_set_last_unref_handler ##### -->
305 <!-- ##### ARG GnomeCanvasPixbuf:x_set ##### -->
307 Determines whether the <link
308 linkend="GnomeCanvasPixbuf--x">x</link> argument is used to
309 translate the pixbuf from its logical origin in item-relative
314 <!-- ##### ARG GnomeCanvasPixbuf:width_in_pixels ##### -->
316 If this argument is %TRUE, then the width of the pixbuf will be
317 considered to be in pixels, that is, it will not be visually
318 scaled even if the item's affine transformation changes. If this
319 is %FALSE, then the width of the pixbuf will be considered to be
320 in canvas units, and so will be scaled normally by affine
321 transformations. The default is %FALSE.
325 <!-- ##### SECTION ./tmpl/xlib-init.sgml:Long_Description ##### -->
327 In addition to the normal Gdk-specific functions, the &gdk-pixbuf;
328 package provides a small library that lets Xlib-only applications
329 use #GdkPixbuf structures and render them to X drawables. The
330 functions in this section are used to initialize the &gdk-pixbuf;
331 Xlib library. This library must be initialized near the beginning
332 or the program or before calling any of the other &gdk-pixbuf;
333 Xlib functions; it cannot be initialized automatically since
334 Xlib-only applications do not call gdk_rgb_init() like GNOME
339 <!-- ##### FUNCTION gdk_pixbuf_get_format ##### -->
347 <!-- ##### ARG GnomeCanvasPixbuf:height_in_pixels ##### -->
349 Works in the same way as the <link
350 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>
351 argument. The default is %FALSE.
355 <!-- ##### SECTION ./tmpl/xlib-rendering.sgml:See_Also ##### -->
361 <!-- ##### ARG GnomeCanvasPixbuf:width_set ##### -->
363 Determines whether the <link
364 linkend="GnomeCanvasPixbuf--width">width</link> argument is taken
365 into account when scaling the pixbuf item. If this argument is
366 %FALSE, then the width value of the pixbuf will be used instead.
367 This argument is %FALSE by default.
371 <!-- ##### FUNCTION gdk_pixbuf_render_to_drawable_alpha ##### -->
390 <!-- ##### SECTION ./tmpl/xlib-init.sgml:Title ##### -->
391 &gdk-pixbuf; Xlib initialization
394 <!-- ##### SECTION ./tmpl/xlib-from-drawables.sgml:Short_Description ##### -->
395 Getting parts of an X drawable's image data into a pixbuf.
398 <!-- ##### FUNCTION gdk_pixbuf_new_subpixbuf ##### -->
410 <!-- ##### SECTION ./tmpl/xlib-rgb.sgml:Title ##### -->
414 <!-- ##### ARG GnomeCanvasPixbuf:x_pixels ##### -->
420 <!-- ##### ARG GnomeCanvasPixbuf:height ##### -->
422 Indicates the height the pixbuf will be scaled to. This argument
423 will only be used if the <link
424 linkend="GnomeCanvasPixbuf--height-set">height_set</link> argument
425 is %TRUE. Works in the same way as the <link
426 linkend="GnomeCanvasPixbuf--width">width</link> argument.
430 <!-- ##### SECTION ./tmpl/xlib-from-drawables.sgml:See_Also ##### -->
436 <!-- ##### SECTION ./tmpl/from-drawables.sgml:See_Also ##### -->
442 <!-- ##### STRUCT GdkPixbufAnimationClass ##### -->
448 <!-- ##### SECTION ./tmpl/rendering.sgml:Title ##### -->
452 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:Title ##### -->
456 <!-- ##### MACRO GDK_PIXBUF_LOADER ##### -->
458 Casts a #GtkObject to a #GdkPixbufLoader.
463 <!-- ##### ARG GnomeCanvasPixbuf:y_set ##### -->
465 Determines whether the <link
466 linkend="GnomeCanvasPixbuf--y">y</link> argument is used to
467 translate the pixbuf from its logical origin in item-relative
468 coordinates. Works in the same way as the <link
469 linkend="GnomeCanvasPixbuf--x-set">x_set</link> argument. The
474 <!-- ##### SECTION ./tmpl/rendering.sgml:Long_Description ##### -->
476 The &gdk-pixbuf; library provides several convenience functions to
477 render pixbufs to GDK drawables. It uses the GdkRGB to render the
482 At this point there is not a standard alpha channel extension for
483 the X Window System, so it is not possible to use full opacity
484 information when painting images to arbitrary drawables. The
485 &gdk-pixbuf; convenience functions will threshold the opacity
486 information to create a bi-level clipping mask (black and white),
487 and use that to draw the image onto a drawable.
492 Since these functions use GdkRGB for rendering, you must
493 initialize GdkRGB before using any of them. You can do this by
494 calling gdk_rgb_init() near the beginning of your program.
499 <!-- ##### SECTION ./tmpl/from-drawables.sgml:Short_Description ##### -->
500 Getting parts of a drawable's image data into a pixbuf.
503 <!-- ##### FUNCTION gdk_pixbuf_render_threshold_alpha ##### -->
518 <!-- ##### ARG GnomeCanvasPixbuf:width_pixels ##### -->
524 <!-- ##### STRUCT GdkPixbufClass ##### -->
530 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:Long_Description ##### -->
532 This canvas item displays #GdkPixbuf images. It handles full
533 affine transformations in both GDK and antialiased modes, and also
534 supports the <ulink url="http://www.w3.org">W3C</ulink>'s <ulink
535 url="http://www.w3.org/Graphics/SVG/">SVG</ulink>-like scaling and
536 translation semantics for absolute pixel values.
540 #GdkPixbuf structures may be shared among different pixbuf canvas
541 items; the pixbuf item uses #GdkPixbuf's reference counting
546 <title>Custom Scaling and Translation</title>
549 In addition to the normal affine transformations supported by
550 canvas items, the #GnomeCanvasPixbuf item supports independent
551 object arguments for scaling and translation. This is useful
552 for explicitly setting a size to which the pixbuf's image will
553 be scaled, and for specifying translation offsets that take
554 place in the item's local coordinate system.
558 By default, the pixbuf canvas item will attain the size in units
559 of the #GdkPixbuf it contains. If a #GnomeCanvasPixbuf is
560 configured to use a #GdkPixbuf that has a size of 300 by 200
561 pixels, then the pixbuf item will automatically obtain a size of
562 300 by 200 units in the item's local coordinate system. If the
563 item is transformed with a scaling transformation of (0.5, 2.0),
564 then the final image size will be of 150 by 400 pixels.
568 To set custom width and height values, you must set the <link
569 linkend="GnomeCanvasPixbuf--width-set">width_set</link> or <link
570 linkend="GnomeCanvasPixbuf--height-set">height_set</link>
571 arguments to %TRUE, and then set the <link
572 linkend="GnomeCanvasPixbuf--width">width</link> or <link
573 linkend="GnomeCanvasPixbuf--height">height</link> arguments to
574 the desired values. The former two arguments control whether
575 the latter two are used when computing the final image's size;
576 they are both %FALSE by default so that the pixbuf item will
577 attain a size in units equal to the size in pixels of the
578 #GdkPixbuf that the item contains.
582 The custom translation offsets are controlled by the <link
583 linkend="GnomeCanvasPixbuf--x">x</link> and <link
584 linkend="GnomeCanvasPixbuf--y">y</link> arguments. The logical
585 upper-left vertex of the image will be translated by the
586 specified distance, aligned with the item's local coordinate
592 <title>Absolute Pixel Scaling and Translation</title>
595 The <ulink url="http://www.w3.org/Graphics/SVG/">Scalable Vector
596 Graphics</ulink> specification (SVG) of the <ulink
597 url="http://www.w3.org">World Wide Web Consortium</ulink> also
598 allows images to be translated and scaled by absolute pixel
599 values that are independent of an item's normal affine
604 Normally, the pixbuf item's translation and scaling arguments
605 are interpreted in units, so they will be modified by the item's
606 affine transformation. The <link
607 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>,
609 linkend="GnomeCanvasPixbuf--height-in-pixels">height_in_pixels</link>,
611 linkend="GnomeCanvasPixbuf--x-in-pixels">x_in_pixels</link>, and
613 linkend="GnomeCanvasPixbuf--y-in-pixels">y_in_pixels</link>
614 object arguments can be used to modify this behavior. If one of
615 these arguments is %TRUE, then the corresponding scaling or
616 translation value will not be affected lengthwise by the pixbuf
617 item's affine transformation.
621 For example, consider a pixbuf item whose size is (300, 200).
622 If the item is modified with a scaling transformation of (0.5,
624 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>
625 is set to %TRUE, then the item will appear to be (300, 400)
626 pixels in size. This means that in this case the item's affine
627 transformation only applies to the height value, while the width
628 value is kept in absolute pixels.
632 Likewise, consider a pixbuf item whose (<link
633 linkend="GnomeCanvasPixbuf--x">x</link>, <link
634 linkend="GnomeCanvasPixbuf--y">y</link>) arguments are set to
635 (30, 40). If the item is then modified by the same scaling
636 transformation of (0.5, 2.0) but the <link
637 linkend="GnomeCanvasPixbuf--y-in-pixels">y_in_pixels</link>
638 argument is set to %TRUE, then the image's upper-left corner
639 will appear to be at position (15, 40). In this case, the
640 affine transformation is applied only to the x offset, while the
641 y offset is kept in absolute pixels.
645 In short, these arguments control whether a particular dimension
646 of a pixbuf item is scaled or not in the normal way by the
647 item's affine transformation.
652 <title>Resource Management</title>
655 When you set the #GdkPixbuf structure that a #GnomeCanvasPixbuf
656 item will use by setting the <link
657 linkend="GnomeCanvasPixbuf--pixbuf">pixbuf</link> argument, a
658 reference count will be added to that #GdkPixbuf structure.
659 When the pixbuf item no longer needs the #GdkPixbuf structure,
660 such as when the item is destroyed or when a new pixbuf
661 structure is passed to it, then the old #GdkPixbuf structure
662 will be automatically unreferenced.
666 This means that if an application just needs to load a pixbuf
667 image and set it into a pixbuf canvas item, it can do the
668 following to ‘forget’ about the pixbuf structure:
672 GnomeCanvasItem *item;
674 pixbuf = gdk_pixbuf_new_from_file ("foo.png");
675 g_assert (pixbuf != NULL);
677 item = gnome_canvas_item_new (gnome_canvas_root (my_canvas),
678 gnome_canvas_pixbuf_get_type (),
681 gdk_pixbuf_unref (pixbuf);
686 After this happens, the reference count of the pixbuf structure
687 will be 1: the gdk_pixbuf_new_from_file() function creates it
688 with a reference count of 1, then setting the <link
689 linkend="GnomeCanvasPixbuf--pixbuf">pixbuf</link> argument of
690 the #GnomeCanvasPixbuf item increases it to 2, and then it is
691 decremented to 1 by the call to gdk_pixbuf_unref(). When the
692 canvas item is destroyed, it will automatically unreference the
693 pixbuf structure again, causing its reference count to drop to
694 zero and thus be freed.
699 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:Long_Description ##### -->
705 <!-- ##### SECTION ./tmpl/xlib-rendering.sgml:Title ##### -->
709 <!-- ##### ARG GnomeCanvasPixbuf:height_set ##### -->
711 Determines whether the <link
712 linkend="GnomeCanvasPixbuf--height">height</link> argument is
713 taken into account when scaling the pixbuf item. Works in the
714 same way as the <link
715 linkend="GnomeCanvasPixbuf--width-set">width_set</link> argument.
716 The default is %FALSE.
720 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:Title ##### -->