LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Можно сделать как еще. Не курсор мучить, а создать по клику окно поверх всех (я думаю, что курсоры с кружочками так и делают), сфотографировать картинку под ним, делать анимацию. Так примерно работает aosd-cat (посмотри). Он поддерживает прозрачность верхнего текста и исчезновение текста.

Я сейчас глянул его исходник - он тоже фотографирует область под собой.

Pixmap
take_snapshot(Aosd* aosd)
{
  Display* dsp = aosd->display;
  Window root_win = aosd->root_win, win = aosd->win;
  int width = aosd->width, height = aosd->height;
  int scr = aosd->screen_num;
  Pixmap pixmap;
  GC gc;

  /* create a pixmap to hold the screenshot */
  pixmap = XCreatePixmap(dsp, win, width, height, DefaultDepth(dsp, scr));

  /* then copy the screen into the pixmap */
  gc = XCreateGC(dsp, pixmap, 0, NULL);
  XSetSubwindowMode(dsp, gc, IncludeInferiors);
  XCopyArea(dsp, root_win, pixmap, gc, aosd->x, aosd->y, width, height, 0, 0);
  XSetSubwindowMode(dsp, gc, ClipByChildren);
  XFreeGC(dsp, gc);

  return pixmap;
}

Исходная версия Zubok, :

Можно сделать как еще. Не курсор мучить, а создать по клику окно поверх всех (я думаю, что курсоры с кружочками так и делают), сфотографировать картинку под ним, делать анимацию. Так примерно работает aosd-cat (посмотри). Он поддерживает прозрачность верхнего текста и исчезновение текста.

Я сейчас глянул его исходник - он тоже фотографирует область под собой.

Pixmap
take_snapshot(Aosd* aosd)
{
  Display* dsp = aosd->display;
  Window root_win = aosd->root_win, win = aosd->win;
  int width = aosd->width, height = aosd->height;
  int scr = aosd->screen_num;
  Pixmap pixmap;
  GC gc;

  /* create a pixmap to hold the screenshot */
  pixmap = XCreatePixmap(dsp, win, width, height, DefaultDepth(dsp, scr));

  /* then copy the screen into the pixmap */
  gc = XCreateGC(dsp, pixmap, 0, NULL);
  XSetSubwindowMode(dsp, gc, IncludeInferiors);
  XCopyArea(dsp, root_win, pixmap, gc, aosd->x, aosd->y, width, height, 0, 0);
  XSetSubwindowMode(dsp, gc, ClipByChildren);
  XFreeGC(dsp, gc);

  return pixmap;
}