Gimp插件Hello world注释

前一阵翻译gimp官网的编写插件教程,本打算继续翻译第二部分,但是感觉第一个例子还不是很懂,翻译第二部分有点理解不能,所以就读了一
下源码,记录如下

#include <libgimp/gimp.h>



/* 声明query函数,它提供gimp相关信息,使其可以根据参数配置插件 */

static void query (void);



/* 声明run函数,调用时会运行插件安装在程序数据库中的程序 */

static void run   (const gchar      *name,

                   gint              nparams,

                   const GimpParam  *param,

                   gint             *nreturn_vals,

                   GimpParam       **return_vals);



// GimpPlugInInfo是一个函数结构体,调用init,quit,query,run函数

// 本例中init,quit函数不使用,所以置为NULL

GimpPlugInInfo PLUG_IN_INFO =

{

	NULL,

	NULL,

	query,

	run

};



//宏

MAIN()



/* query函数,用于提供插件信息 */

static void query (void)

{

	//GimpParamDef结构体,保存程序的定义

	//GimpParamDef的三个参数,GimpPDBArgType类型, gchar *名称, gchar *描述

	static GimpParamDef args[] =

	{

		{

		GIMP_PDB_INT32,

		"run-mode",

		"Run mode"

		},

		{

		GIMP_PDB_IMAGE,

		"image",

		"Input image"

		},

		{

		GIMP_PDB_DRAWABLE,

		"drawable",

		"Input drawable"

		}

	};



	/* gimp_install_procedure函数使用PDB来安装程序 */

	gimp_install_procedure (

	"plug-in-hello",	//名称

	"Hello, world!",	//简介

	"Displays \"Hello, world!\" in a dialog", //帮助(一般作为简介的补充)

	"David Neary",		//作者

	"Copyright David Neary",//版权

	"2004",			//日期

	"_Hello world...",	//菜单标签名称 “_”在菜单中显示为空格

	"RGB*, GRAY*",		//图像类型,支持RGB,RGBA, 灰度

				//如果插件不需要图像,则置为空串

	GIMP_PLUGIN,		//程序的类型为gimp插件,或“GIMP_EXTENSION(gimp扩展)”

	G_N_ELEMENTS (args), 	//传入args数组中元素的个数

	0,			//返回值

	args, 			//传入args数组

	NULL			//返回值

	);



	//插件安装在“滤镜/Misc”文件夹下,标签名称为上面定义的“Hello world...”

	gimp_plugin_menu_register ("plug-in-hello",

		             "<Image>/Filters/Misc");

}



/* run函数,用于实现插件功能 */

static void

run (const gchar      *name,

     gint              nparams,

     const GimpParam  *param,

     gint             *nreturn_vals,

     GimpParam       **return_vals)

{

	/* 一个插件可以生成多个插件程序,所以本例题的插件程序使用values[0] */

	static GimpParam  values[1];



	/* 定义程序数据库的状态 */

	GimpPDBStatusType status = GIMP_PDB_SUCCESS;



	/* 定义程序的运行模式,如交互式,非交互式,最后使用值 */

	GimpRunMode       run_mode;



	/* 强制设置返回值 */

	*nreturn_vals = 1;

	*return_vals  = values;



	/* 设置程序的类型和状态 */

	values[0].type = GIMP_PDB_STATUS;

	values[0].data.d_status = status;



	/* 获取运行模式,如果运行模式是非交互式,那么不会显示对话框 */

	run_mode = param[0].data.d_int32;



	if (run_mode != GIMP_RUN_NONINTERACTIVE)

		g_message("Hello, world!\n");

}

1,最后生成的插件名称与源程序的名称相同

2,读完这个例子对插件有了一定的了解,但有些地方还很模糊,应该是正常现象

3,想深入的理解插件的实现与运行原理,那么就要多读源码

4,想读懂源码,那么就要翻看帮助文档,Devhelp是个好东西

5,通过一个hello world还不能编写插件甚至依旧看不懂别人的插件实现,欲编写实用的插件,需打好基础,循序渐进

你可能感兴趣的:(Hello world)