int button_click(fb_info fb_inf) { int mfd; mouse_open(NULL, &mfd); /* highlight ico */ fb_info jpeg_inf; fb_info b_inf; if (init_fb(&b_inf) < 0) { printf("Error init_fb\n"); exit(1); } u8_t *buf24 = decode_jpeg("mainframel.jpg", &jpeg_inf); u8_t * scale_buf = scale24(buf24, b_inf, jpeg_inf); u32_t *buf32 = rgb24to32(scale_buf, b_inf); /* initialize font */ if (init_ft("x.ttf", 45) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; fb_drawcursor(fb_inf, m_x, m_y); u8_t buf[8]; mouse_event_t mevent; ico fkey[9]; fkey[0].x = 34; fkey[0].y = 34; fkey[1].x = 34; fkey[1].y = 178; fkey[2].x = 34; fkey[2].y = 322; fkey[3].x = 34; fkey[3].y = 510; fkey[4].x = 34; fkey[4].y = 660; fkey[5].x = 262; fkey[5].y = 46; fkey[6].x = 265; fkey[6].y = 180; fkey[7].x = 469; fkey[7].y = 46; fkey[8].x = 823; fkey[8].y = 595; char *discription[9] = {"图片", "音乐", "电子书", "设置", "时间", "幻灯", "浏览", "关于", "退出"}; int door2 = 1; /* loading ... */ display_jpeg("loading.jpg", fb_inf); display_string("loading", 200, 450, fb_inf, 0x00ff55e3); /* initialize font */ if (init_ft("x.ttf", 84) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } int c = 3; /* loading time */ while (c) { int i; for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ff0000); usleep(200000); } for (i=0; i<3; i++) { display_string(".", 550 + i *100, 450, fb_inf, 0x00ffff55); usleep(200000); } c--; } /* landing mainfframe */ /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_jpeg("mainframe.jpg", fb_inf); while (1) { int n = read(mfd, buf, 8); if (n != -1) { mouse_parse(buf,&mevent); fb_restorecursor(fb_inf, m_x, m_y); m_x += mevent.x; m_y += mevent.y; int k = 1; if (m_x>0 && m_x<1024 && m_y>0 && m_y<752) { fb_drawcursor(fb_inf, m_x, m_y); int i; for (i=0; i<9; i++) if (m_x > fkey[i].x && m_x < fkey[i].x + 100 && m_y > fkey[i].y && m_y < fkey[i].y + 100 ) { display_string(discription[i], fkey[i].x + 120, fkey[i].y + 50, fb_inf, 0x00ff0000); int m, n; for (m=fkey[i].y; m< fkey[i].y + 120; m++ ) for (n=fkey[i].x - 20; n< fkey[i].x + 100; n++ ) fb_pixel(b_inf, n, m, buf32[n + m * b_inf.w]); k = 0; /* interface for effect */ if (mevent.button == 1) /* if left button down ,when the cursor is being on the taiji ico occur */ { if (i == 5) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } char *f2[7] = {"虽","然", "哥", "不", "在", "江", "湖"}; char *f3[12] = {"但", "江", "湖", "仍", "有", "哥", "的", "传", "说", ".", ".", ".",}; fb_info fbinf; if (init_fb(&fbinf) < 0) { printf("Error init_fb\n"); exit(1); } jpgdsp_door( "oba.jpg", fbinf ); int i; for (i=0; i<7; i++) { display_string(f2[i], 240 + i*80, 400, fb_inf, 0x00fffb55); usleep(100000); } for (i=0; i<12; i++) { display_string(f3[i], 100 + i*80, 570, fb_inf, 0x00fffb55); usleep(100000); } sleep(2); /* recover font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } /* interface for you */ fbb(); /* write here */ mevent.button = 0; /* Avoid play again */ display_jpeg("mainframe.jpg", fb_inf);/* back to mainframe */ } if (i == 7 && door2) { display_jpeg("show.jpg", fb_inf); sleep(5); display_jpeg("show_us.jpg", fb_inf); sleep(5); door2 = 0; display_jpeg("mainframe.jpg", fb_inf); } if (i == 8) { /* initialize font */ if (init_ft("x.ttf", 64) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } // move1("log-out.jpg", fb_inf); display_jpeg("log-out.jpg", fb_inf); int i; char *f1[5] = {"待","续", ".", ".", "."}; for (i=0; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(100000); } int j = 4; /* replay ... tree times */ while (j) { for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ffff55); usleep(200000); } for (i=2; i<5; i++) { display_string(f1[i], 300 + i *100, 400, fb_inf, 0x00ff0000); usleep(200000); } j--; } /* initialize font */ if (init_ft("x.ttf", 32) != 0){ fprintf(stderr, "Error initial font\n") ; return 1; } display_string("雁留声工作室", 800, 720, fb_inf, 0x0055ffff); exit(1); } } } } else { m_x -= mevent.x; m_y -= mevent.y; } if (k) { display_jpeg("mainframe.jpg", fb_inf); mevent.button = 0; } } } free(buf24); free(scale_buf); free(buf32); return 0; }
int test_mouse(fb_info fb_inf) { int mfd; mouse_open(NULL, &mfd); int m_x = fb_inf.w / 2; int m_y = fb_inf.h / 2; fb_drawcursor(fb_inf, m_x, m_y); u8_t buf[8]; unsigned int mouce_msg[3]; mouse_event_t mevent; int flag = 0; //for(i = 0; i < 1000; ++i){ while(1) { //mouse_parse(buf,&mevent); //fb_drawcursor(fb_inf, m_x, m_y); int n = read(mfd, buf, 8); if(flag == 1) { flag = 0; fb_drawcursor(fb_inf, m_x, m_y); continue; } if (n != -1){ if((buf[0] & 0x7) ==1) { flag = 10; mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //m_x +=C_WIDTH; //m_y +=C_HEIGHT; fb_restorecursor(fb_inf, m_x, m_y); usleep(500000); fb_drawcursor(fb_inf, m_x, m_y); //fb_restorecursor(fb_inf, m_x, m_y); continue; } //if(0) /* if(flag > 1) { flag--; mouse_parse(buf,&mevent); m_x += mevent.x; m_y += mevent.y; m_x = m_x>0?m_x:0; m_y = m_y>0?m_y:0; m_x = m_x<(fb_inf.w-C_WIDTH)?m_x:(fb_inf.w-C_WIDTH); m_y = m_y<(fb_inf.h-C_HEIGHT)?m_y:(fb_inf.h-C_HEIGHT); mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //fb_drawcursor(fb_inf, m_x, m_y); continue; } */ mouse_parse(buf,&mevent); //printf("dx:%d\tdy:%d\n", mevent.x, mevent.y); //printf("mx:%d\tmy:%d\n", m_x, m_y); fb_restorecursor(fb_inf, m_x, m_y); m_x += mevent.x; m_y += mevent.y; m_x = m_x>0?m_x:0; m_y = m_y>0?m_y:0; m_x = m_x<(fb_inf.w-C_WIDTH)?m_x:(fb_inf.w-C_WIDTH); m_y = m_y<(fb_inf.h-C_HEIGHT)?m_y:(fb_inf.h-C_HEIGHT); mouce_msg[0] =buf[0] & 0x7; mouce_msg[1] =m_x; mouce_msg[2] =m_y; //printf("%d\n",mouce_msg[0]); //printf("%d\n",mouce_msg[1]); //printf("%d\n",mouce_msg[2]); write(pipe_fd[1],&mouce_msg,sizeof(mouce_msg)); //usleep(1000); fb_drawcursor(fb_inf, m_x, m_y); //fb_restorecursor(fb_inf, m_x, m_y); //fb_drawcursor(fb_inf, m_x, m_y); } usleep(10000); } return 0; }