Clutter学习(十三):可多行可编辑的ClutterText

 

  这个不太像我们其他图形界面的EditText,从形式上更像label,可以是单行,也可以是多行,可以设置文本的属性,可以编译。学习资料来源:ClutterText ,Example 。它提供了一个丰富的字符显示方式。但是我们不得不很遗憾地指出:Clutter的ClutterText的编译模式受到一些限制,最大的问题是无法启动输入法,也就是无法输入中文。这个问题不知道是clutter的原理导致还是因为clutter的开发者还没有考虑输入方的问题,但是前面的可能性比较大。因此如果我们需要输入的时候,选择clutter widget嵌入GTK的方式。

ClutterActor * text = clutter_text_new();
clutter_text_set_color (CLUTTER_TEXT(text),&actor_color);
clutter_text_set_text (CLUTTER_TEXT(text),"你好!Non-editable text: Wizard imps and sweat sock pimps, interstellar mongrel nymphs.");
clutter_text_set_font_name(CLUTTER_TEXT(text),"微软雅黑 14");
clutter_actor_set_position (text,5,5);
clutter_container_add_actor(CLUTTER_CONTAINER(stage),text);
clutter_actor_show(text);

   上面是基本的ClutterText显示过程。设置了字体类型已经字体颜色。clutter还提供很多的字体属性,例如背景、粗体,斜体,划线等等,这些我们都可以在联机文档中查到。ClutterText一种是通过clultter_text_set_xxxx直接设定某个属性,另一种通过设置属性list来设置,如下面例子。在我们的实验中,如果ClutterText设置为可编译的方式,这些属性并不能生效。

PangoAttrList * pangolist = pango_attr_list_new();
pango_attr_list_insert
(pangolist, pango_attr_style_new (PANGO_STYLE_OBLIQUE));
pango_attr_list_insert (pangolist, pango_attr_weight_new (PANGO_WEIGHT_BOLD));
clutter_text_set_attributes (CLUTTER_TEXT(text),pangolist);

   多行显示处理如下。如果设置为和编辑方式,多行有效,并且能自动向下扩展行数。

clutter_text_set_line_wrap (CLUTTER_TEXT(text),TRUE ); //缺省为FALSE
float min_height = 0, natural_height = 0;
//在长度为750的情况下,询问合适的高度
clutter_actor_get_preferred_height (text,750,&min_height,&natural_height);
clutter_actor_set_size (text, 780, natural_height);

   可编辑方式处理如下,请注意应给出clutter_set_key_focus。

clutter_text_set_editable (CLUTTER_TEXT(text2),TRUE);
clutter_stage_set_key_focus (CLUTTER_STAGE(stage),text2);

   在我们编辑是,例如一些网页,我们编辑完后,在习惯上,不通过按键,而是直接通过回车来表示。下面的例子就是检测这个回车触发。相关的事件触发还可以是:cursor-event,text-changed。

void my_activate(ClutterText * text,gpointer data){
        printf("ok ,activated!/n");
}

clutter_text_set_activatable (CLUTTER_TEXT(text2),TRUE);
g_signal_connect(text2,"activate ",G_CALLBACK(my_activate),NULL);

Clutter的兼容性问题:

   在我的ATI显卡的机器上,如果使用clutter1.0(非0.9),显示ClutterText有问题,这个在Clutter学习(五)——Clutter的兼容性问题 中我们讨论过。一个有效的解决方法,就是在show ClutterText之间先show一个ClutterTexture。

Clutter的问题:

   ClutterText在编译模式下似乎不支持属性设置,严重的问题是不支持输入法,即无法进行中文输入。

相关链接:
我的Clutter相关博客

你可能感兴趣的:(list,insert,输入法,actor,attributes,wizard)