C 透明浮球
我想开发一个游戏,可以采取多语言输入,包括CJK字符。有没有可能让GtkDrawingArea填满整个窗口,让GtkDrawingArea浮动在“顶部”呢?还可以使GTK的背景和边框透明吗?感谢您的帮助。以下是我在中的操作方法,其中有一个功能,可以在父窗口小部件顶部,在相对于父窗口小部件左上角的坐标(x,y)处,弹出一个包含一些文本的C 透明浮球,c,gtk,gtkentry,C,Gtk,Gtkentry,我想开发一个游戏,可以采取多语言输入,包括CJK字符。有没有可能让GtkDrawingArea填满整个窗口,让GtkDrawingArea浮动在“顶部”呢?还可以使GTK的背景和边框透明吗?感谢您的帮助。以下是我在中的操作方法,其中有一个功能,可以在父窗口小部件顶部,在相对于父窗口小部件左上角的坐标(x,y)处,弹出一个包含一些文本的GtkEntry: GtkWidget * popup_edit_window(GtkWidget *parent, gint x, gint y, const g
GtkEntry
:
GtkWidget *
popup_edit_window(GtkWidget *parent, gint x, gint y, const gchar *text)
{
gint px, py;
gdk_window_get_origin(gtk_widget_get_window(parent), &px, &py);
GtkWidget *edit_popup = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* stackoverflow.com/questions/1925568/how-to-give-keyboard-focus-to-a-pop-up-gtk-window */
GTK_WIDGET_SET_FLAGS(edit_popup, GTK_CAN_FOCUS);
gtk_window_set_decorated(GTK_WINDOW(edit_popup), FALSE);
gtk_window_set_has_frame(GTK_WINDOW(edit_popup), FALSE);
gtk_window_set_type_hint(GTK_WINDOW(edit_popup), GDK_WINDOW_TYPE_HINT_POPUP_MENU);
gtk_window_set_transient_for(GTK_WINDOW(edit_popup), GTK_WINDOW(parent));
gtk_window_set_gravity(GTK_WINDOW(edit_popup), GDK_GRAVITY_CENTER);
GtkWidget *entry = gtk_entry_new();
gtk_widget_add_events(entry, GDK_FOCUS_CHANGE_MASK);
gtk_entry_set_text(GTK_ENTRY(entry), text);
gtk_editable_select_region(GTK_EDITABLE(entry), 0, -1);
gtk_container_add(GTK_CONTAINER(edit_popup), entry);
g_signal_connect_swapped(entry, "focus-out-event", G_CALLBACK(gtk_widget_destroy), edit_popup);
g_signal_connect(entry, "key-press-event", G_CALLBACK(on_edit_popup_key_press), edit_popup);
gtk_widget_show_all(edit_popup);
gtk_window_move(GTK_WINDOW(edit_popup), x + px, y + py);
/* GDK_GRAVITY_CENTER seems to have no effect? */
gtk_widget_grab_focus(entry);
gtk_window_present(GTK_WINDOW(edit_popup));
return edit_popup;
}
gboolean
on_edit_popup_key_press(GtkWidget *entry, GdkEventKey *event, GtkWidget *edit_popup)
{
switch(event->keyval) {
case GDK_Escape:
gtk_widget_destroy(edit_popup);
return TRUE;
case GDK_Return:
case GDK_KP_Enter:
/* here, do whatever you need to do when finished editing */
gtk_widget_destroy(edit_popup);
return TRUE;
}
return FALSE; /* event not handled */
}
要使其透明,您应该能够做到:
gtk_window_set_opacity(GTK_WINDOW(edit_popup), 0.5);
但请注意,您的窗口管理器可能不支持该功能,或者可能会选择忽略它
但是,您是否考虑过GTK有相关的输入法库,因此用户可以选择他们想要的任何输入法来输入CJK字符?不需要重新发明轮子