2013-12-24 4 views
0

Я пытаюсь переключиться с поверхности изображения Каира на поверхность xlib. Мой код отлично работал с поверхностью изображения, но я не думаю, что правильно инициализирую поверхность xlib. Он компилируется, но он выдает предупреждения и ничего больше не показывает.Cairo to Cairo-xlib: cairo_xlib_surface_create problems (C)

Вот мой текущий код, чтобы инициализировать поверхность:

int width, height; 
    gdk_threads_enter(); 
    gdk_drawable_get_size(pixmap, &width, &height); 
    gdk_threads_leave(); 

    /*** Create surface to draw on ***/ 
    cairo_surface_t *cst = cairo_xlib_surface_create(gdk_x11_drawable_get_xdisplay(pixmap), 
             gdk_x11_drawable_get_xid(pixmap), 
             gdk_x11_visual_get_xvisual(gvis), 
             width, height); 

Получение следующих предупреждений при компиляции:

In function 'do_draw': 
evis.c:112:11: warning: passing argument 1 of 'cairo_xlib_surface_create' makes pointer from integer without a cast [enabled by default] 
      width, height); 
     ^
In file included from evis.c:6:0: 
/usr/include/cairo/cairo-xlib.h:49:1: note: expected 'struct Display *' but argument is of type 'int' 
cairo_xlib_surface_create (Display  *dpy, 
^ 
evis.c:112:11: warning: passing argument 3 of 'cairo_xlib_surface_create' makes pointer from integer without a cast [enabled by default] 
      width, height); 
     ^
In file included from evis.c:6:0: 
/usr/include/cairo/cairo-xlib.h:49:1: note: expected 'struct Visual *' but argument is of type 'int' 
cairo_xlib_surface_create (Display  *dpy, 
^ 

Я уверен, что эти предупреждения взломать код, и я не знаю, как чтобы исправить их. Я попытался сделать первый аргумент и третий аргумент (Display *) и (Visual *) соответственно, но это тоже не сработало. Начали бросать другие предупреждения.

* EDIT 1 * Попытка понять это, но мое понимание указателей ограничено до сих пор. gdk_drawable_get_xdisplay() возвращает Display*, но моя функция ищет указатель на struct Display *. В чем разница между 2 и как я получаю от Display* до Display *.

ответ

1

«Обычная» причина, по которой компилятор думает о функции, возвращает int (что происходит здесь, поскольку он жалуется на результаты этих двух функций) заключается в том, что он не может найти прототип функции, что вам не хватает #include. (Хотя я ожидал бы найти другие предупреждения в этом случае?)

+0

Ты мужчина. Забыл включить gdkx.h. Предупреждения исчезли. – ReX357