Пример #1
0
static void regen_loopuptable(GtkWidget * widget, IBusHandwriteEngine * engine)
{
	int i;
	MatchedChar *matched;
	char drawtext[32]={0};
	GtkWidget * bt;

	gtk_container_foreach(GTK_CONTAINER(widget),(GtkCallback)gtk_widget_destroy,0);

	int munber = ibus_handwrite_recog_getmatch(engine->engine,&matched,0);

	//画10个侯选字
	for (i = 0; i < MIN(munber,10) ; ++i)
	{
		sprintf(drawtext,"%d.%s",i,matched[i].chr);

		bt = gtk_button_new_with_label(drawtext);

		g_object_set(G_OBJECT(bt), "expand", TRUE, NULL);

		gtk_grid_attach(GTK_TABLE(widget), bt, i%5, i/5, 1, 1);

		gtk_widget_show(bt);

		void clicked(GtkButton *button, IBusHandwriteEngine *engine)
		{
			ibus_handwrite_engine_commit_text(engine,GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button),"order")));
		}

		g_object_set_data(G_OBJECT(bt),"order",GINT_TO_POINTER(i));
		g_signal_connect(bt,"clicked",G_CALLBACK(clicked),engine);

		gtk_widget_show(bt);
	}
Пример #2
0
static gboolean paint_ui(GtkWidget *widget, GdkEventExpose *event,
		gpointer user_data)
{
	GdkGC *gc;

	IBusHandwriteEngine * engine;

	LineStroke cl;
	int i;

	MatchedChar * matched;

	engine = (IBusHandwriteEngine *) (user_data);

	gc = gdk_gc_new(widget->window);

	gdk_draw_rectangle(widget->window, gc,0,0,0,199,199);

	gdk_draw_rectangle(widget->window, gc,0,200,0,399,199);

	puts(__func__);

	//已经录入的笔画

	for (i = 0; i < engine->engine->strokes->len ; i++ )
	{
		printf("drawing %d th line, total %d\n",i,engine->engine->strokes->len);
		cl =  g_array_index(engine->engine->strokes,LineStroke,i);
		gdk_draw_lines(widget->window, gc, cl.points,cl.segments );
	}
	//当下笔画
	if ( engine->currentstroke.segments && engine->currentstroke.points )
		gdk_draw_lines(widget->window, gc, engine->currentstroke.points,
				engine->currentstroke.segments);


	int munber = ibus_handwrite_recog_getmatch(engine->engine,&matched,0);

	//画10个侯选字
	for (i = 0; i < munber ; ++i)
	{

		char drawtext[32]={0};

		sprintf(drawtext,"%d.%s",i,matched[i].chr);

		PangoLayout * layout = gtk_widget_create_pango_layout(widget,drawtext);

		gdk_draw_layout(widget->window, gc, (i % 5) * 40 + 3, 205 + (20 * (i / 5)),	layout);
		g_object_unref(layout);
	}

	g_object_unref(gc);
	return TRUE;
}
Пример #3
0
gboolean ibus_handwrite_engine_commit_text(IBusHandwriteEngine * engine , int index)
{
	MatchedChar * matched;

	int number = ibus_handwrite_recog_getmatch(engine->engine,&matched,0);

	if(number > index )
	{
		ibus_engine_commit_text(IBUS_ENGINE(engine),ibus_text_new_from_string(matched[index].chr));
		ibus_handwrite_recog_clear_stroke(engine->engine);
		engine->needclear = TRUE;
		engine->currentstroke.segments = 0;
		g_free(engine->currentstroke.points);
		engine->currentstroke.points = NULL;
		return TRUE;
	}
	engine->needclear = FALSE;
	return FALSE;
}