Неправильная цветовая карта, назначенная окну gtk, созданному с использованием gtk_drawing_area_new

Я создал область рисования с помощью gtk_drawing_area_new(). Дескриптор окна (например, drawing_handle) этого виджета извлекается с помощью GDK_WINDOW_XID.

С помощью xwininfo я проверил атрибуты окна drawing_handle.

Выход:

ubuntu@wandboard:~$ xwininfo -id 0x1400007

  • Абсолютный верхний левый X: 2
  • Абсолютный верхний левый Y: 21
  • Относительный верхний левый X: 0
  • Относительный верхний левый Y: 0
  • Ширина: 1916
  • Рост: 1011
  • Глубина: 24
  • Визуальный: 0xc7
  • Визуальный класс: TrueColor
  • Ширина границы: 0
  • Класс: ВходВыход
  • Цветовая карта: 0x1400002 (не установлена)
  • Состояние битовой гравитации: NorthWestGravity
  • Состояние гравитации окна: NorthWestGravity
  • Состояние резервного хранилища: NotUseful
  • Сохранить в состоянии: нет
  • Состояние карты: IsViewable
  • Состояние переопределения перенаправления: нет
  • Угловые: +2+21 -2+21 -2-48 +2-48
  • -геометрия 1916x1011+0+0

Цветовая карта показывает неправильное значение и не установлено. Принимая во внимание, что цветовая карта по умолчанию для системы равна 32 (0x20). Отсутствует некоторая системная настройка, из-за которой gtk не может принять правильную палитру. Пожалуйста, предложите, как создается gtk-window и как назначается цветовая карта.

Возможно, эта неправильная цветовая карта вытекает из главного окна, созданного с помощью API gtk_window_new(). Тем не менее я не нахожу gtk api, чтобы изменить это значение для обоих окон.


person Naseeb Panghal    schedule 04.04.2018    source источник
comment
Пожалуйста, напишите об ошибке открытым текстом. Фотографии не доступны для поиска или копирования.   -  person theGtknerd    schedule 06.04.2018


Ответы (1)


Визуальные элементы окна GDK можно изменить с помощью следующего кода. Здесь я получаю визуал X по умолчанию и сравниваю его со списком визуалов, доступных в 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;
}
person Naseeb Panghal    schedule 23.04.2018