История изменений
Исправление 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;
}