int mouse_draw(const pinfo_t fb, int x, int y) { int i, j; mouse_save(fb, x, y); for (j = 0; j < C_HEIGHT; ++j) for (i = 0; i < C_WIDTH; ++i) if (cursor_pixel[i + j*C_WIDTH] != T___) fb_drawpixel(fb, x+i, y+j, cursor_pixel[i + j*C_WIDTH]); return 0; }
int mouse_draw(const pinfo_t fb, int x, int y) { int i,j; mouse_save(fb, x, y); for (j = 0; j < C_HIGHT; j++) { for (i = 0; i < C_WIDTH; i++) { if(cursor_pixel[i+j*C_WIDTH] != T___) fb_pixel(fb, x+i, y+j, cursor_pixel[i+j*C_WIDTH]); } } return 0; }
int main(void) { fb_info_t fb; mevent_t mevent; int fd, mfd; int m_x, m_y; if((fd = open("/dev/fb0", O_RDWR)) < 0) { perror("open /dev/fb0 error:"); exit(1); } if(-1L == ioctl(fd, FBIOGET_VSCREENINFO, &(fb.fb_var))) { printf("ioctl FBIOGET_VSCREENINFO\n"); exit(1); } fb.w = fb.fb_var.xres; fb.h = fb.fb_var.yres; fb.bpp = fb.fb_var.bits_per_pixel; fb.fd = fd; fb.fb_mem = mmap(NULL, fb.w*fb.h*fb.bpp/8, PROT_READ|PROT_WRITE, MAP_SHARED, fb.fd,0); if(MAP_FAILED == fb.fb_mem) { printf("mmap error!"); exit(1); } m_x = fb.w / 2; m_y = fb.h / 2; put1(&fb,0xFFFF); put2(&fb,0xFFFF); put3(&fb,0xFFFF); //Step 1 mouse_save(&fb, m_x, m_y); //Step 2 mouse_draw_take(&fb, m_x, m_y); mfd = open("/dev/input/mice", O_RDWR | O_NONBLOCK); if(mfd < 0) { perror("open /dev/input/mice error:"); exit(1); } while(1) { if(mouse_parse(mfd, &mevent) == 0) { //Step 3 mouse_restore(&fb, m_x, m_y); m_x += mevent.dx; m_y += mevent.dy; if(m_x < 0) m_x = 0; if(m_x > (fb.w-C_WIDTH-1)) m_x = fb.w - C_WIDTH-1; if(m_y < 0) m_y = 0; if(m_y > (fb.h-C_HEIGHT-1)) m_y = fb.h-C_HEIGHT-1; if((m_x > x_start_l)&&(m_x < x_start_r)&&(m_y > y_start_l)&&(m_y < y_start_r)) { mouse_save(&fb, m_x, m_y); mouse_draw_load(&fb, m_x, m_y); if(mevent.button == 1) { /*开始*/ printf("star\n"); // exit(1); } } else if((m_x > x_list_l)&&(m_x < x_list_r)&&(m_y > y_list_l)&&(m_y < y_list_r)) { mouse_save(&fb, m_x, m_y); mouse_draw_load(&fb, m_x, m_y); if(mevent.button == 1) { /*列表*/ printf("list\n"); // exit(1); } } else if((m_x > x_quit_l)&&(m_x < x_quit_r)&&(m_y > y_quit_l)&&(m_y < y_quit_r)) { mouse_save(&fb, m_x, m_y); mouse_draw_load(&fb, m_x, m_y); if(mevent.button == 1) { /*退出*/ printf("exit\n"); // exit(1); } } else { mouse_save(&fb, m_x, m_y); mouse_draw_take(&fb, m_x, m_y); } } } close(fb.fd); munmap(fb.fb_mem,fb.w*fb.h*fb.bpp/8); return 0; }