Я пытаюсь обновить программное обеспечение с GTK2 до GTK3; У меня был некоторый успех, но я сталкиваюсь с проблемами, особенно связанными с цветовыми картами.
Все, что я прочитал, говорит, что GDKColormap должен быть заменен GDKVisual, и что графика должна быть представлена с использованием Каир. Я понимаю — более или менее — как GDKVisual работает, но у меня есть одна конкретная проблема: gdk_rgb_cmap_new (…). Кажется, что эта функция не имеет эквивалента в GDKVisual, и что невозможно передать «частные» (т.е. наш собственный дизайн) цветовые карты в GTK3. Так ли это сейчас? Если да, то как мы должны использовать наши собственные цветовые карты в программном обеспечении на основе GTK3? Нужно ли вручную редактировать изображение для отображения через Каир (что, похоже, также не имеет функций на основе цветовой карты)?
Это может быть слишком конкретный вопрос, но я не могу найти очевидный форум GTK +, чтобы задать его, поэтому, если у кого-то есть какие-либо указания относительно того, где лучше задать его, тогда, пожалуйста, так и скажите.
Обновить:
В GTK2 мы использовали функцию gdk_draw_indexed_image (…), который имел аргумент, который взял GDKColormap, который может быть создан с использованием gdk_rgb_cmap_new (…). Я сейчас пытаюсь использовать Каир, чтобы сделать что-то подобное через функцию Каира cairo_image_surface_create_for_data (…), но поскольку цветовые карты больше не существуют, я не вижу, как их использовать (например) cairo_set_source_rgba (…) чтобы получить тот же эффект, что и аргумент colormap в gdk_draw_indexed_image (…), если мы сами не отредактируем данные изображения перед передачей в функцию.
Я не уверен, насколько актуально событие expose: я отредактировал код GTK2
gtk_signal_connect (GTK_OBJECT (canvas), "expose_event", (GtkSignalFunc) repaint_proc, (gpointer) tv_screen);
к коду GTK3
g_signal_connect (G_OBJECT (canvas), "draw", G_CALLBACK (repaint_proc), (gpointer) tv_screen);
но я не уверен, насколько это относится к проблеме цветовой карты.
Задача ещё не решена.
Других решений пока нет …