开罗x11不显示任何内容

时间:2018-12-14 15:54:12

标签: c x11 cairo xlib

我以前使用过cairo和X11,并且有一段代码可以完美地工作,现在我正在开发一个新项目(假定是karaoke),然后我拿了一部分代码来显示某些内容。在屏幕上,该屏幕可用于旧项目,但现在不再可用。 我整天都在寻找一个错误,我肯定会错过一些东西,因为没有任何效果。 代码如下。

用于显示一些文本的第一个功能:

void display_line(cairo_surface_t *surface, lyrics_line l)
{
   cairo_t *cr;
   cr=cairo_create(surface);
   cairo_set_source_rgb(cr, 0, 0, 0); // Should paint the window black
   cairo_paint(cr);
   cairo_set_source_rgb(cr, 1., 1., 1.);
   cairo_select_font_face(cr, "Hacker", CAIRO_FONT_SLANT_NORMAL,CAIRO_FONT_WEIGHT_BOLD);
   cairo_set_font_size(cr, 13);
   cairo_move_to(cr, 620, 30);
   char text[255];
   strcpy(text, l.text);
   cairo_show_text(cr, text);  // Should print the text in white
   cairo_destroy(cr);
   printf("%s\n", text);
}

还有调用上一个功能的主功能

void display(song s)
{
   // X11 display
   Display *dpy;
   Window rootwin;
   Window win;
   int scr;
   // init the display
   if(!(dpy=XOpenDisplay(NULL))) {
       fprintf(stderr, "ERROR: Could not open display\n");
       exit(1);
   }
   scr=DefaultScreen(dpy);
   rootwin=RootWindow(dpy, scr);
   win=XCreateSimpleWindow(dpy, rootwin, 1, 1, WINSIZEX, WINSIZEY, 0, BlackPixel(dpy, scr), BlackPixel(dpy, scr));
   XStoreName(dpy, win, "Karaoke");
   KeyPressMask|ButtonPressMask|ExposureMask);
   XMapWindow(dpy, win);
   // create cairo surface
   cairo_surface_t *cs;
   cs=cairo_xlib_surface_create(dpy, win, DefaultVisual(dpy, 0), WINSIZEX, WINSIZEY);
   cairo_t *cr;
   cr=cairo_create(cs);
   cairo_set_source_rgb (cr, 0.0, 0.0, 1.0);
   cairo_paint(cr);    // Should fill the window in blue
   cairo_destroy(cr);
   int i;
   printf("\n");
   lyrics_line l = {"That's a test", 200};
   display_line(cs, l);
   usleep(s.text[0].length*10000);
   for(i=0; i<s.length; i++)
     {
       display_line(cs, s.text[i]);
       usleep((s.text[i+1].length - s.text[i].length)*10000);
     }
   cairo_surface_destroy(cs); // destroy cairo surface
   XCloseDisplay(dpy); // close the display
 }

我不知道display_line是否会引起问题,因为当我简单地尝试用display将窗口涂成蓝色时,它甚至无法工作。 但是,歌词 do 会显示在控制台中,因此算法不是问题。

我可能会缺少什么?

谢谢。

0 个答案:

没有答案