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:pixbuf ##### -->
183 Contains a pointer to a #GdkPixbuf structure that will be used by
184 the pixbuf canvas item as an image source. When a pixbuf is set
185 its reference count is incremented; if the pixbuf item kept a
186 pointer to another #GdkPixbuf structure, the reference count of
187 this structure will be decremented. Also, the GdkPixbuf's
188 reference count will automatically be decremented when the
189 #GnomeCanvasPixbuf item is destroyed. When a pixbuf is queried, a
190 reference count will not be added to the return value; you must do
191 this yourself if you intend to keep the pixbuf structure around.
195 <!-- ##### ARG GnomeCanvasPixbuf:y_pixels ##### -->
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 <!-- ##### SECTION ./tmpl/xlib-rgb.sgml:Title ##### -->
402 <!-- ##### ARG GnomeCanvasPixbuf:x_pixels ##### -->
408 <!-- ##### ARG GnomeCanvasPixbuf:height ##### -->
410 Indicates the height the pixbuf will be scaled to. This argument
411 will only be used if the <link
412 linkend="GnomeCanvasPixbuf--height-set">height_set</link> argument
413 is %TRUE. Works in the same way as the <link
414 linkend="GnomeCanvasPixbuf--width">width</link> argument.
418 <!-- ##### SECTION ./tmpl/from-drawables.sgml:See_Also ##### -->
424 <!-- ##### SECTION ./tmpl/xlib-from-drawables.sgml:See_Also ##### -->
430 <!-- ##### STRUCT GdkPixbufAnimationClass ##### -->
436 <!-- ##### SECTION ./tmpl/rendering.sgml:Title ##### -->
440 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:Title ##### -->
444 <!-- ##### MACRO GDK_PIXBUF_LOADER ##### -->
446 Casts a #GtkObject to a #GdkPixbufLoader.
451 <!-- ##### ARG GnomeCanvasPixbuf:y_set ##### -->
453 Determines whether the <link
454 linkend="GnomeCanvasPixbuf--y">y</link> argument is used to
455 translate the pixbuf from its logical origin in item-relative
456 coordinates. Works in the same way as the <link
457 linkend="GnomeCanvasPixbuf--x-set">x_set</link> argument. The
462 <!-- ##### SECTION ./tmpl/rendering.sgml:Long_Description ##### -->
464 The &gdk-pixbuf; library provides several convenience functions to
465 render pixbufs to GDK drawables. It uses the GdkRGB to render the
470 At this point there is not a standard alpha channel extension for
471 the X Window System, so it is not possible to use full opacity
472 information when painting images to arbitrary drawables. The
473 &gdk-pixbuf; convenience functions will threshold the opacity
474 information to create a bi-level clipping mask (black and white),
475 and use that to draw the image onto a drawable.
480 Since these functions use GdkRGB for rendering, you must
481 initialize GdkRGB before using any of them. You can do this by
482 calling gdk_rgb_init() near the beginning of your program.
487 <!-- ##### SECTION ./tmpl/from-drawables.sgml:Short_Description ##### -->
488 Getting parts of a drawable's image data into a pixbuf.
491 <!-- ##### FUNCTION gdk_pixbuf_render_threshold_alpha ##### -->
506 <!-- ##### ARG GnomeCanvasPixbuf:width_pixels ##### -->
512 <!-- ##### STRUCT GdkPixbufClass ##### -->
518 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:Long_Description ##### -->
524 <!-- ##### SECTION ./tmpl/gnome-canvas-pixbuf.sgml:Long_Description ##### -->
526 This canvas item displays #GdkPixbuf images. It handles full
527 affine transformations in both GDK and antialiased modes, and also
528 supports the <ulink url="http://www.w3.org">W3C</ulink>'s <ulink
529 url="http://www.w3.org/Graphics/SVG/">SVG</ulink>-like scaling and
530 translation semantics for absolute pixel values.
534 #GdkPixbuf structures may be shared among different pixbuf canvas
535 items; the pixbuf item uses #GdkPixbuf's reference counting
540 <title>Custom Scaling and Translation</title>
543 In addition to the normal affine transformations supported by
544 canvas items, the #GnomeCanvasPixbuf item supports independent
545 object arguments for scaling and translation. This is useful
546 for explicitly setting a size to which the pixbuf's image will
547 be scaled, and for specifying translation offsets that take
548 place in the item's local coordinate system.
552 By default, the pixbuf canvas item will attain the size in units
553 of the #GdkPixbuf it contains. If a #GnomeCanvasPixbuf is
554 configured to use a #GdkPixbuf that has a size of 300 by 200
555 pixels, then the pixbuf item will automatically obtain a size of
556 300 by 200 units in the item's local coordinate system. If the
557 item is transformed with a scaling transformation of (0.5, 2.0),
558 then the final image size will be of 150 by 400 pixels.
562 To set custom width and height values, you must set the <link
563 linkend="GnomeCanvasPixbuf--width-set">width_set</link> or <link
564 linkend="GnomeCanvasPixbuf--height-set">height_set</link>
565 arguments to %TRUE, and then set the <link
566 linkend="GnomeCanvasPixbuf--width">width</link> or <link
567 linkend="GnomeCanvasPixbuf--height">height</link> arguments to
568 the desired values. The former two arguments control whether
569 the latter two are used when computing the final image's size;
570 they are both %FALSE by default so that the pixbuf item will
571 attain a size in units equal to the size in pixels of the
572 #GdkPixbuf that the item contains.
576 The custom translation offsets are controlled by the <link
577 linkend="GnomeCanvasPixbuf--x">x</link> and <link
578 linkend="GnomeCanvasPixbuf--y">y</link> arguments. The logical
579 upper-left vertex of the image will be translated by the
580 specified distance, aligned with the item's local coordinate
586 <title>Absolute Pixel Scaling and Translation</title>
589 The <ulink url="http://www.w3.org/Graphics/SVG/">Scalable Vector
590 Graphics</ulink> specification (SVG) of the <ulink
591 url="http://www.w3.org">World Wide Web Consortium</ulink> also
592 allows images to be translated and scaled by absolute pixel
593 values that are independent of an item's normal affine
598 Normally, the pixbuf item's translation and scaling arguments
599 are interpreted in units, so they will be modified by the item's
600 affine transformation. The <link
601 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>,
603 linkend="GnomeCanvasPixbuf--height-in-pixels">height_in_pixels</link>,
605 linkend="GnomeCanvasPixbuf--x-in-pixels">x_in_pixels</link>, and
607 linkend="GnomeCanvasPixbuf--y-in-pixels">y_in_pixels</link>
608 object arguments can be used to modify this behavior. If one of
609 these arguments is %TRUE, then the corresponding scaling or
610 translation value will not be affected lengthwise by the pixbuf
611 item's affine transformation.
615 For example, consider a pixbuf item whose size is (300, 200).
616 If the item is modified with a scaling transformation of (0.5,
618 linkend="GnomeCanvasPixbuf--width-in-pixels">width_in_pixels</link>
619 is set to %TRUE, then the item will appear to be (300, 400)
620 pixels in size. This means that in this case the item's affine
621 transformation only applies to the height value, while the width
622 value is kept in absolute pixels.
626 Likewise, consider a pixbuf item whose (<link
627 linkend="GnomeCanvasPixbuf--x">x</link>, <link
628 linkend="GnomeCanvasPixbuf--y">y</link>) arguments are set to
629 (30, 40). If the item is then modified by the same scaling
630 transformation of (0.5, 2.0) but the <link
631 linkend="GnomeCanvasPixbuf--y-in-pixels">y_in_pixels</link>
632 argument is set to %TRUE, then the image's upper-left corner
633 will appear to be at position (15, 40). In this case, the
634 affine transformation is applied only to the x offset, while the
635 y offset is kept in absolute pixels.
639 In short, these arguments control whether a particular dimension
640 of a pixbuf item is scaled or not in the normal way by the
641 item's affine transformation.
646 <title>Resource Management</title>
649 When you set the #GdkPixbuf structure that a #GnomeCanvasPixbuf
650 item will use by setting the <link
651 linkend="GnomeCanvasPixbuf--pixbuf">pixbuf</link> argument, a
652 reference count will be added to that #GdkPixbuf structure.
653 When the pixbuf item no longer needs the #GdkPixbuf structure,
654 such as when the item is destroyed or when a new pixbuf
655 structure is passed to it, then the old #GdkPixbuf structure
656 will be automatically unreferenced.
660 This means that if an application just needs to load a pixbuf
661 image and set it into a pixbuf canvas item, it can do the
662 following to ‘forget’ about the pixbuf structure:
666 GnomeCanvasItem *item;
668 pixbuf = gdk_pixbuf_new_from_file ("foo.png");
669 g_assert (pixbuf != NULL);
671 item = gnome_canvas_item_new (gnome_canvas_root (my_canvas),
672 gnome_canvas_pixbuf_get_type (),
675 gdk_pixbuf_unref (pixbuf);
680 After this happens, the reference count of the pixbuf structure
681 will be 1: the gdk_pixbuf_new_from_file() function creates it
682 with a reference count of 1, then setting the <link
683 linkend="GnomeCanvasPixbuf--pixbuf">pixbuf</link> argument of
684 the #GnomeCanvasPixbuf item increases it to 2, and then it is
685 decremented to 1 by the call to gdk_pixbuf_unref(). When the
686 canvas item is destroyed, it will automatically unreference the
687 pixbuf structure again, causing its reference count to drop to
688 zero and thus be freed.
693 <!-- ##### SECTION ./tmpl/xlib-rendering.sgml:Title ##### -->
697 <!-- ##### ARG GnomeCanvasPixbuf:height_set ##### -->
699 Determines whether the <link
700 linkend="GnomeCanvasPixbuf--height">height</link> argument is
701 taken into account when scaling the pixbuf item. Works in the
702 same way as the <link
703 linkend="GnomeCanvasPixbuf--width-set">width_set</link> argument.
704 The default is %FALSE.
708 <!-- ##### SECTION ./tmpl/gdk-pixbuf-io.sgml:Title ##### -->