📄 module_interface.sgml
字号:
<!-- ##### SECTION Title ##### -->Module Interface<!-- ##### SECTION Short_Description ##### -->Extending &gdk-pixbuf;<!-- ##### SECTION Long_Description ##### --><para>If &gdk-pixbuf; has been compiled with GModule support, it can be extended bymodules which can load (and perhaps also save) new image and animationformats. Each loadable module must export a#GdkPixbufModuleFillInfoFunc function named <function>fill_info</function> anda #GdkPixbufModuleFillVtableFunc function named<function>fill_vtable</function>.</para><para>In order to make format-checking work before actually loading the modules(which may require dlopening image libraries), modules export their signatures (and other information) via the <function>fill_info</function>function. An external utility, <command>gdk-pixbuf-query-loaders</command>, uses this to create a text file containing a list of all available loaders and their signatures. This file is then read at runtime by &gdk-pixbuf; to obtainthe list of available loaders and their signatures. </para><para>Modules may only implement a subset of the functionality available via#GdkPixbufModule. If a particular functionality is not implemented, the<function>fill_vtable</function> function will simply not set the correspondingfunction pointers of the #GdkPixbufModule structure. If a module supportsincremental loading (i.e. provides #begin_load, #stop_load and#load_increment), it doesn't have to implement #load, since &gdk-pixbuf; can supply a generic #load implementation wrapping the incremental loading. </para><para>Installing a module is a two-step process:<itemizedlist><listitem><para>copy the module file(s) to the loader directory (normally<filename><replaceable>libdir</replaceable>/gtk-2.0/<replaceable>version</replaceable>/loaders</filename>,unless overridden by the environment variable<envar>GDK_PIXBUF_MODULEDIR</envar>) </para></listitem><listitem><para>call <command>gdk-pixbuf-query-loaders</command> to update themodule file (normally<filename><replaceable>sysconfdir</replaceable>/gtk-2.0/gdk-pixbuf.loaders</filename>,unless overridden by the environment variable<envar>GDK_PIXBUF_MODULE_FILE</envar>)</para></listitem></itemizedlist></para><para>The &gdk-pixbuf; interfaces needed for implementing modules are contained in <filename>gdk-pixbuf-io.h</filename> (and<filename>gdk-pixbuf-animation.h</filename> if the module supports animations).They are not covered by the same stability guarantees as the regular &gdk-pixbuf; API. To underline this fact, they are protected by <literal>#ifdef GDK_PIXBUF_ENABLE_BACKEND</literal>.</para><!-- ##### SECTION See_Also ##### --><para></para><!-- ##### SECTION Stability_Level ##### --><!-- ##### FUNCTION gdk_pixbuf_set_option ##### --><para></para>@pixbuf: @key: @value: @Returns: <!-- ##### FUNCTION gdk_pixbuf_get_formats ##### --><para></para>@Returns: <!-- ##### FUNCTION gdk_pixbuf_format_get_name ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_get_description ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_get_mime_types ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_get_extensions ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_is_writable ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_is_scalable ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_is_disabled ##### --><para></para>@format: @Returns: <!-- ##### FUNCTION gdk_pixbuf_format_set_disabled ##### --><para></para>@format: @disabled: <!-- ##### FUNCTION gdk_pixbuf_format_get_license ##### --><para></para>@format: @Returns: <!-- ##### STRUCT GdkPixbufFormat ##### --><para>A #GdkPixbufFormat contains information about the image format accepted by amodule. Only modules should access the fields directly, applications shoulduse the <function>gdk_pixbuf_format_*</function> functions.</para>@name: the name of the image format.@signature: the signature of the module.@domain: the message domain for the @description.@description: a description of the image format.@mime_types: a %NULL-terminated array of MIME types for the image format.@extensions: a %NULL-terminated array of typical filename extensions for theimage format.@flags: a combination of #GdkPixbufFormatFlags.@disabled: a boolean determining whether the loader is disabled.@license: a string containing license information, typically set to shorthands like "GPL", "LGPL", etc.@Since: 2.2<!-- ##### ENUM GdkPixbufFormatFlags ##### --><para>Flags which allow a module to specify further details about the supportedoperations.</para>@GDK_PIXBUF_FORMAT_WRITABLE: the module can write out images in the format.@GDK_PIXBUF_FORMAT_SCALABLE: the image format is scalable@GDK_PIXBUF_FORMAT_THREADSAFE: the module is threadsafe. If this flag is not set, &gdk-pixbuf; will use a lock to prevent multiple threads from using this module at the same time. (Since 2.6)@Since: 2.2<!-- ##### STRUCT GdkPixbufModulePattern ##### --><para>The signature of a module is a set of prefixes. Prefixes are encoded aspairs of ordinary strings, where the second string, called the mask, if not %NULL, must be of the same length as the first one and may contain ' ', '!', 'x', 'z', and 'n' to indicate bytes that must be matched, not matched, "don't-care"-bytes, zeros and non-zeros. Each prefix has an associated integer that describes the relevance of the prefix, with 0 meaning a mismatch and 100 a "perfect match".</para><para>Starting with &gdk-pixbuf; 2.8, the first byte of the mask may be '*', indicating an unanchored pattern that matches not only at the beginning, but also in the middle. Versions prior to 2.8 will interpret the '*'like an 'x'. </para><para>The signature of a module is stored as an array of #GdkPixbufModulePattern<!-- -->s. The array is terminated by a patternwhere the @prefix is %NULL.</para><informalexample><programlisting>GdkPixbufModulePattern *signature[] = { { "abcdx", " !x z", 100 }, { "bla", NULL, 90 }, { NULL, NULL, 0 }};</programlisting>The example matches e.g. "auud\0" with relevance 100, and "blau" with relevance 90.</informalexample>@prefix: the prefix for this pattern@mask: mask containing bytes which modify how the prefix is matched against test data@relevance: relevance of this pattern@Since: 2.2<!-- ##### USER_FUNCTION GdkPixbufModuleFillVtableFunc ##### --><para>Defines the type of the function used to set the vtable of a #GdkPixbufModule when it is loaded. </para>@module: a #GdkPixbufModule.@Since: 2.2<!-- ##### USER_FUNCTION GdkPixbufModuleFillInfoFunc ##### --><para>Defines the type of the function used to fill a #GdkPixbufFormat structure with information about a module.</para>@info: a #GdkPixbufFormat.@Since: 2.2<!-- ##### USER_FUNCTION GdkPixbufModuleSizeFunc ##### --><para>Defines the type of the function that gets called once the size of the loaded image is known.</para><para>The function is expected to set @width and @height to the desiredsize to which the image should be scaled. If a module has no efficient way to achieve the desired scaling during the loading of the image, it mayeither ignore the size request, or only approximate it -- &gdk-pixbuf; willthen perform the required scaling on the completely loaded image. </para><para>If the function sets @width or @height to zero, the module should interpretthis as a hint that it will be closed soon and shouldn't allocate further resources. This convention is used to implement gdk_pixbuf_get_file_info()efficiently.</para>@width: pointer to a location containing the current image width@height: pointer to a location containing the current image height@user_data: the loader.@Since: 2.2<!-- ##### USER_FUNCTION GdkPixbufModulePreparedFunc ##### --><para>Defines the type of the function that gets called once the initial setup of @pixbuf is done.</para><para>#GdkPixbufLoader uses a function of this type to emit the "<link linkend="GdkPixbufLoader-area-prepared">area_prepared</link>"signal.</para>@pixbuf: the #GdkPixbuf that is currently being loaded.@anim: if an animation is being loaded, the #GdkPixbufAnimation, else %NULL.@user_data: the loader.@Since: 2.2<!-- ##### USER_FUNCTION GdkPixbufModuleUpdatedFunc ##### --><para>Defines the type of the function that gets called every time a regionof @pixbuf is updated.</para><para>#GdkPixbufLoader uses a function of this type to emit the "<link linkend="GdkPixbufLoader-area-updated">area_updated</link>"signal.</para>@pixbuf: the #GdkPixbuf that is currently being loaded.@x: the X origin of the updated area.@y: the Y origin of the updated area.@width: the width of the updated area.@height: the height of the updated area.@user_data: the loader.@Since: 2.2<!-- ##### STRUCT GdkPixbufModule ##### --><para>A #GdkPixbufModule contains the necessary functions to load and save images in a certain file format. </para><para>A #GdkPixbufModule can be loaded dynamically from a #GModule.Each loadable module must contain a #GdkPixbufModuleFillVtableFunc function named <function>fill_vtable</function>, which will get called when the moduleis loaded and must set the function pointers of the #GdkPixbufModule. </para>@module_name: the name of the module, usually the same as the usual file extension for images of this type, eg. "xpm", "jpeg" or "png".@module_path: the path from which the module is loaded.@module: the loaded #GModule.@info: a #GdkPixbufFormat holding information about the module.@load: loads an image from a file.@load_xpm_data: loads an image from data in memory.@begin_load: begins an incremental load.@stop_load: stops an incremental load.@load_increment: continues an incremental load.@load_animation: loads an animation from a file.@save: saves a #GdkPixbuf to a file.@save_to_callback: saves a #GdkPixbuf by calling the given #GdkPixbufSaveFunc.<!-- ##### STRUCT GdkPixbufAnimationClass ##### --><para>Modules supporting animations must derive a type from #GdkPixbufAnimation, providing suitable implementations of the virtual functions.</para>@parent_class: the parent class@is_static_image: returns whether the given animation is just a static image.@get_static_image: returns a static image representing the given animation.@get_size: fills @width and @height with the frame size of the animation.@get_iter: returns an iterator for the given animation.<!-- ##### STRUCT GdkPixbufAnimationIterClass ##### --><para>Modules supporting animations must derive a type from #GdkPixbufAnimationIter, providing suitable implementations of the virtual functions.</para>@parent_class: the parent class@get_delay_time: returns the time in milliseconds that the current frame should be shown.@get_pixbuf: returns the current frame.@on_currently_loading_frame: returns whether the current frame of @iter is being loaded.@advance: advances the iterator to @current_time, possibly changing the current frame.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -