gtk 中的困惑阶段无法处理阶段鼠标按下事件

标签 c gtk clutter

我试过使用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_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;
}

当我点击舞台时没有任何反应。我做了一些测试,我可以在主窗口、clutter_widget 上处理点击事件,但不能直接在 clutter stage 上处理。

此代码修改自 http://www.openismus.com/documents/clutter_tutorial/0.9/docs/tutorial/html/sec-stage-widget.html .在这个中,作者直接在舞台上连接信号,但这个例子是针对 clutter 0.9 的,不要再用 clutter v > 1.0 编译。

对我做错了什么有什么想法吗?

编辑

我用处理过的“按键事件”做了一些测试。所以问题似乎来自舞台的事件掩码。

有谁知道如何更改舞台的事件掩码以强制舞台对鼠标事件使用react?

最佳答案

我关闭这个问题是因为:

  1. clutter-gtk 只是一个概念证明
  2. 以后不会用clutter-gtk

参见 https://mail.gnome.org/archives/clutter-list/2013-February/msg00059.html

所以我不想在这上面浪费更多时间。

有关信息,使用 juste clutter 的相同示例按预期工作。

关于gtk 中的困惑阶段无法处理阶段鼠标按下事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16527819/

相关文章:

c - GTK+ 3.0 和 C 程序

c++ - 无法将参数传递给 GTK 回调

python - 无法在 Ubuntu Python 2.7 中导入 GTK

python - 从 Vala 到 Python 再返回

gtk - Gnome-Shell-Extension 开发中的持久日志记录?

c - 使用 fscanf 读取 C 中的坐标时出现问题

c - 为什么我的 C 程序不能列出 7 的倍数?

c - 理解 C 中的语句

c++ - 使用字符串 C,读写字符串

c++ - 无边框杂乱窗口(mm)