C gtk中的混乱阶段无法处理阶段鼠标按下事件
我已经试着使用杂乱的gtk。我写了一小段代码,创建了一个gtk窗口,其中包含一个混乱阶段。我试着在舞台上表演鼠标按键,但什么都没有 代码如下:C gtk中的混乱阶段无法处理阶段鼠标按下事件,c,gtk,clutter,C,Gtk,Clutter,我已经试着使用杂乱的gtk。我写了一小段代码,创建了一个gtk窗口,其中包含一个混乱阶段。我试着在舞台上表演鼠标按键,但什么都没有 代码如下: #include <clutter/clutter.h> #include <clutter-gtk/clutter-gtk.h> #include <glib.h> #include <stdlib.h> #include <stdio.h> /*gcc 3_clutter_app_click
#include <clutter/clutter.h>
#include <clutter-gtk/clutter-gtk.h>
#include <glib.h>
#include <stdlib.h>
#include <stdio.h>
/*gcc 3_clutter_app_clickable_text_in_gtk.c -o 3_clutter_app_clickable_text_in_gtk `pkg-config clutter-1.0 clutter-gtk-1.0 glib --cflags --libs`*/
/*mouse clic handler*/
void on_stage_button_press( ClutterStage *stage, ClutterEvent *event, gpointer data)
{
printf("ok\n");
}
int main(int argc, char *argv[])
{
if (gtk_clutter_init(&argc, &argv) != CLUTTER_INIT_SUCCESS)
return EXIT_FAILURE;
/*create the window*/
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size (GTK_WINDOW (window), 640, 480);
/*destroy from window close all*/
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
/*vertical box, 0 spacing*/
GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
/*add box in the window*/
gtk_container_add(GTK_CONTAINER(window), box);
/*create the cutter widget*/
GtkWidget *clutter_widget = gtk_clutter_embed_new ();
gtk_widget_set_size_request (clutter_widget, 200, 200);
ClutterActor *stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED(clutter_widget));
clutter_stage_set_use_alpha(CLUTTER_STAGE(stage), TRUE);
ClutterColor stage_color ;
GString * bg_color = g_string_new("#555753ff");
clutter_color_from_string(&stage_color,bg_color->str);
clutter_actor_set_background_color(stage, &stage_color);
/*add the cutter widget in the box expand and fill are TRUE and spacing is 0*/
gtk_box_pack_start (GTK_BOX (box), clutter_widget, TRUE, TRUE, 0);
/*create line text*/
ClutterColor text_color;
GString * fg_color = g_string_new("#00000055");
clutter_color_from_string(&text_color, fg_color->str);
ClutterActor *some_text = clutter_text_new_full("Sans 24", "Hello, world", &text_color);
clutter_actor_set_size(some_text, 256, 128);
clutter_actor_set_position(some_text, 128, 128);
clutter_actor_add_child(CLUTTER_ACTOR(stage), some_text);
clutter_text_set_editable(CLUTTER_TEXT(some_text), TRUE);
/*define clic event*/
g_signal_connect(stage, "button-press-event", G_CALLBACK(on_stage_button_press), NULL);
/* Show the window and all its widgets: */
gtk_widget_show_all (GTK_WIDGET (window));
/* Start the main loop, so we can respond to events: */
gtk_main ();
return EXIT_SUCCESS;
}
当我点击舞台时什么也没发生。我已经做了一些测试,我可以在主窗口上、杂波_小部件上处理单击事件,但不能直接在杂波阶段处理
此代码是从一个修改而来的。在本例中,作者将信号直接连接到舞台上,但本例适用于杂波0.9,不再编译杂波v>1.0
你知道我做错了什么吗
编辑
我已经做了一些测试与按键事件的处理。所以问题似乎来自舞台上的事件面具
是否有人知道如何更改舞台的事件掩码以强制舞台对鼠标事件做出反应?我结束这个问题,因为: 杂波gtk只是一个概念证明 将来不会使用gtk 看 所以我不想浪费更多的时间
作为参考,使用juste杂波的同一示例与预期效果相同。杂波_BACKEND=gdk./yourexecutable