这段时间实现基于directfb的GTK项目,遇到一些问题,其中一个问题是由于基于directfb的gtk没有实现相应的接口造成。本来想通过移动鼠标或禁止鼠标的方式来实现鼠标的隐藏,但是因为gdk_display_warp_pointer()和gdk_display_freeze_pointer()接口没有实现无法实现鼠标的隐藏。
为了能够隐藏鼠标我找了gdk_display_warp_pointer()和gdk_display_freeze_pointer()的实现。为了以后回来温习,同时让其他人不为此烦恼,我将实现贴出。
/* 移动鼠标 */
void gdk_display_warp_pointer (GdkDisplay *display,
GdkScreen *screen,
gint x,
gint y)
{
GdkDisplayDFB * gdkdisplay = _gdk_display;
gdkdisplay->layer->SetCooperativeLevel(gdkdisplay->layer, DLSCL_ADMINISTRATIVE);
DFBResult returnvalue = gdkdisplay->layer->WarpCursor(gdkdisplay->layer, x, y);
gdkdisplay->layer->SetCooperativeLevel(gdkdisplay->layer, DLSCL_SHARED);
}
/* 使能或不使能鼠标 */
void gdk_display_freeze_pointer (const gboolean flag)
{
GdkDisplayDFB * gdkdisplay = _gdk_display;
gdkdisplay->layer->SetCooperativeLevel(gdkdisplay->layer, DLSCL_ADMINISTRATIVE);
DFBResult returnvalue = gdkdisplay->layer->EnableCursor(gdkdisplay->layer, flag);
gdkdisplay->layer->SetCooperativeLevel(gdkdisplay->layer, DLSCL_SHARED);
}
/* 用一个透明图片覆盖鼠标 */
void gdk_window_set_invisible_cursor (GdkWindow *window)
{
GdkBitmap *empty_bitmap;
GdkCursor *cursor;
GdkColor useless;
char invisible_cursor_bits[] = { 0x0 };
useless.red = useless.green = useless.blue = 0;
useless.pixel = 0;
empty_bitmap = gdk_bitmap_create_from_data (window,
invisible_cursor_bits,
1, 1);
cursor = gdk_cursor_new_from_pixmap (empty_bitmap,
empty_bitmap,
&useless,
&useless, 0, 0);
gdk_window_set_cursor (window, cursor);
gdk_cursor_unref (cursor);
g_object_unref (G_OBJECT (empty_bitmap));
}
最后
以上就是稳重乌龟最近收集整理的关于directfb + gtk的鼠标隐藏问题的全部内容,更多相关directfb内容请搜索靠谱客的其他文章。
发表评论 取消回复