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!
");
}

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

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

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

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

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

原文地址:https://www.cnblogs.com/ishell/p/4240174.html