分配给使用gtk_drawing_area_new

时间:2018-04-04 11:51:51

标签: linux x11 gtk3 gdk

我使用gtk_drawing_area_new()创建了一个绘图区域。使用GDK_WINDOW_XID提取此窗口小部件的窗口句柄(比如drawing_handle)。

使用xwininfo我检查了drawing_handle窗口的属性。

输出:

ubuntu @ wandboard:〜$ xwininfo -id 0x1400007

  • 绝对左上角X:2
  • 绝对左上角Y:21
  • 相对左上角X:0
  • 相对左上Y:0
  • 宽度:1916
  • 身高:1011
  • 深度:24
  • 视觉:0xc7
  • Visual Class:TrueColor
  • 边框宽度:0
  • 类:InputOutput
  • Colormap:0x1400002(未安装)
  • 比特重力状态:NorthWestGravity
  • 窗口重力状态:NorthWestGravity
  • 支持商店状态:NotUseful
  • 保存状态:否
  • 地图状态:IsViewable
  • 覆盖重定向状态:否
  • 角落:+ 2 + 21 -2 + 21 -2-48 + 2-48
  • -geometry 1916x1011 + 0 + 0

Colormap显示错误的值并且未安装。系统默认Colormap为32(0x20)。缺少某些系统设置,其中gtk无法获取正确的色彩映射。请建议如何创建gtk-window以及如何分配色彩映射。

可能是这个错误的Colormap从主窗口向下流动,主窗口是使用api gtk_window_new()创建的。我仍然没有找到任何gtk api来改变这两个窗口的值。

1 个答案:

答案 0 :(得分:0)

可以使用以下代码更改GDK窗口的视觉效果。在这里,我获得X Default视觉效果,并将其与GDK提供的视觉效果列表进行比较。当GDK视觉与X Defalut视觉匹配时,我改变了GTK小部件的视觉效果。

static int change_visual(GtkWidget *widget)
{
  int nitems_return;
  Display *x_display = XOpenDisplay(NULL);
  Visual *x_visual = XDefaultVisual(x_display, DefaultScreen(x_display));

  GdkScreen *gdk_screen = gdk_screen_get_default();
  GList *gdk_visual_list = gdk_screen_list_visuals(gdk_screen);
  GList *l;
  for (l = gdk_visual_list; l != NULL; l = l->next)
  {
    Visual *temp = gdk_x11_visual_get_xvisual((GdkVisual *)l->data);
    if(temp->visualid == x_visual->visualid) break;
  }
  //l is pointing the visual which is similar to system x visual. Lets change it.
  gtk_widget_set_visual (widget, (GdkVisual *)l->data);
  return 0;
}