void renderHelp() { // Draws the helpbox in the bottom right corner. g15r_drawLine(canvas, G15_LCD_WIDTH-37, 16, G15_LCD_WIDTH, 16, G15_COLOR_BLACK); g15r_drawLine(canvas, G15_LCD_WIDTH-37, 16, G15_LCD_WIDTH-37, G15_LCD_HEIGHT, G15_COLOR_BLACK); g15r_renderString (canvas, (unsigned char *)"1:Default\0", 3, G15_TEXT_SMALL, G15_LCD_WIDTH-35, 0); g15r_renderString (canvas, (unsigned char *)"2: Up\0", 4, G15_TEXT_SMALL, G15_LCD_WIDTH-35, 0); g15r_renderString (canvas, (unsigned char *)"3: Down\0", 5, G15_TEXT_SMALL, G15_LCD_WIDTH-35, 0); g15r_renderString (canvas, (unsigned char *)"4: OK\0", 6, G15_TEXT_SMALL, G15_LCD_WIDTH-35, 0); }
void renderFull() { char currPreset[1024]; g15macro_log("Redrawing whole screen.\n"); g15r_clearScreen(canvas,G15_COLOR_WHITE); drawXBM(canvas, (unsigned char*)g15macro_small_bits, g15macro_small_width, g15macro_small_height, 0, 0); // Logo renderHelp(); // Help box to the right // Draw indicator of currently selected preset memset(currPreset,0,sizeof(currPreset)); snprintf(currPreset,1024,"Current:%s",getConfigName(currConfig)); g15r_drawLine(canvas, 50, 2, 50, 11, G15_COLOR_BLACK); // Line separating logo from Current: <config> g15r_renderString (canvas, (unsigned char *)currPreset, 0, G15_TEXT_MED, 53, 4); // Current: <config> // Draw selection list renderSelectionList(); }
/* take the track_info structure and render it */ void *g15display_thread(){ long chksum=0; static long last_chksum; int i; unsigned char time_elapsed[41]; unsigned char time_total[41]; static int current = 0; int changed =0; while(!leaving){ if(playlist_mode){ int y=0; int offset=2; changed = 0; if(track_info.currentsong>-1){ current=track_info.currentsong; track_info.currentsong = -1; changed = 1; } if(playlist_selection>0){ if(current+1<mpd_playlist_get_playlist_length(obj)){ current+=playlist_selection; changed = 1; } playlist_selection=0; } if(playlist_selection<0){ if(current) { current--; changed = 1; } playlist_selection=0; } if(current-offset<0) offset-=current; if(changed){ g15r_pixelBox (canvas, 0, 0, 159, 42, G15_COLOR_WHITE, 1, 1); for(i=current-offset;i<current+6;i++){ char title[100]; mpd_Song *song; song = mpd_playlist_get_song_from_pos(obj, i); if(song) { if(song->title!=NULL) strncpy(title,song->title,99); else strncpy(title,"",99); if(song->artist!=NULL){ strncat(title," - ",99); strncat(title,song->artist,99); } } /* sanitise the display */ if(i==mpd_playlist_get_playlist_length(obj)) strncpy(title,"End of PlayList",99); if(i>mpd_playlist_get_playlist_length(obj)) break; if(i<0) strncpy(title,"",99); if(y==offset){ g15r_pixelBox (canvas, 0, 7*offset, 159 , 7*(offset+1), G15_COLOR_BLACK, 1, 1); canvas->mode_xor=1; if(song) if(song->id) item_selected=song->id; } g15r_renderString (canvas, (unsigned char *)title, y, G15_TEXT_MED, 1, 1); canvas->mode_xor=0; y++; } } }else{ /* track info */ g15r_pixelBox (canvas, 0, 0, 159, 42, G15_COLOR_WHITE, 1, 1); g15r_renderString (canvas, (unsigned char *)track_info.artist, 0, G15_TEXT_LARGE, 80-(strlen(track_info.artist)*8)/2, 2); g15r_renderString (canvas, (unsigned char *)track_info.title, 0, G15_TEXT_MED, 80-(strlen(track_info.title)*5)/2, 12); /* elapsed time */ memset(time_elapsed,0,41); memset(time_total,0,41); if (track_info.total != 0) { snprintf((char*)time_elapsed,40,"%02i:%02i",track_info.elapsed/60, track_info.elapsed%60); snprintf((char*)time_total,40,"%02i:%02i",track_info.total/60, track_info.total%60); } if(track_info.elapsed>0&&track_info.total>0) g15r_drawBar (canvas, 10, 22, 149, 30, G15_COLOR_BLACK, track_info.elapsed, track_info.total, 1); canvas->mode_xor=1; g15r_renderString (canvas,(unsigned char*)time_elapsed,0,G15_TEXT_MED,12,23); g15r_renderString (canvas,(unsigned char*)time_total,0,G15_TEXT_MED,124,23); canvas->mode_xor=0; switch(track_info.playstate) { case MPD_PLAYER_PLAY: playing=1; paused=0; break; case MPD_PLAYER_PAUSE: g15r_pixelBox (canvas, 10, 22, 149, 30, G15_COLOR_WHITE, 1, 1); g15r_renderString (canvas, (unsigned char *)"Playback Paused", 0, G15_TEXT_LARGE, 22, 23); paused=1; break; case MPD_PLAYER_STOP: g15r_pixelBox (canvas, 10, 22, 149, 30, G15_COLOR_WHITE, 1, 1); g15r_renderString (canvas, (unsigned char *)"Playback Stopped", 0, G15_TEXT_LARGE, 18, 23); playing=0; paused=0; break; default: break; } g15r_pixelBox (canvas, 1, 34, 158 , 41, G15_COLOR_WHITE, 1, 1); g15r_pixelBox (canvas, 10, 34, 27, 42, G15_COLOR_BLACK, 1, 1); canvas->mode_xor=1; g15r_renderString (canvas, (unsigned char *)"mode", 0, G15_TEXT_SMALL, 11, 36); canvas->mode_xor=0; if(menulevel==MENU_MODE1){ if(track_info.random){ g15r_drawLine (canvas, 43, 42, 158, 42,G15_COLOR_WHITE); canvas->mode_xor=1; g15r_pixelBox (canvas, 104, 34, 125 , 42, G15_COLOR_BLACK, 1, 1); }else{ g15r_pixelBox (canvas, 104, 34, 125 , 42, G15_COLOR_BLACK, 1, 0); } g15r_renderString (canvas, (unsigned char *)"Rndm", 0, G15_TEXT_SMALL, 108, 36); canvas->mode_xor=0; if(track_info.repeat){ canvas->mode_xor=1; g15r_pixelBox (canvas, 130, 34, 149 , 42, G15_COLOR_BLACK, 1, 1); }else { g15r_pixelBox (canvas, 130, 34, 149 , 42, G15_COLOR_BLACK, 1, 0); } g15r_renderString (canvas, (unsigned char *)"Rpt", 0, G15_TEXT_SMALL, 136, 36); canvas->mode_xor=0; // 2nd box from left - if you want it... if(playlist_mode==0){ g15r_pixelBox (canvas, 34, 34, 70 , 42, G15_COLOR_BLACK, 1, 0); g15r_renderString (canvas, (unsigned char *)"Playlist", 0, G15_TEXT_SMALL, 36, 36); }else{ canvas->mode_xor=1; g15r_pixelBox (canvas, 34, 34, 70 , 42, G15_COLOR_BLACK, 1, 1); g15r_renderString (canvas, (unsigned char *)"Playlist", 0, G15_TEXT_SMALL, 36, 36); canvas->mode_xor=0; } } if(menulevel==MENU_MODE2){ g15r_pixelBox (canvas, 104, 34, 125 , 42, G15_COLOR_BLACK, 1, 0); g15r_renderString (canvas, (unsigned char *)"Vol-", 0, G15_TEXT_SMALL, 108, 36); g15r_pixelBox (canvas, 130, 34, 149 , 42, G15_COLOR_BLACK, 1, 0); g15r_renderString (canvas, (unsigned char *)"Vol+", 0, G15_TEXT_SMALL, 132, 36); // 2nd box from left - if you want it... //g15r_pixelBox (canvas, 34, 34, 54 , 42, G15_COLOR_BLACK, 1, 0); //g15r_renderString (canvas, (unsigned char *)"test", 0, G15_TEXT_SMALL, 36, 36); } if(muted_volume != 0){ g15r_renderString (canvas, (unsigned char *)"MUTE", 0, G15_TEXT_LARGE, 11, 2); } else if(voltimeout){ g15r_drawBar (canvas,10, 22, 149, 30, G15_COLOR_BLACK, track_info.volume, 100, 1); canvas->mode_xor=1; g15r_renderString (canvas, (unsigned char *)"Volume", 0, G15_TEXT_LARGE, 59, 23); canvas->mode_xor=0; } } /* do a quicky checksum - only send frame if different */ chksum=0; for(i=0;i<G15_BUFFER_LEN;i++){ chksum+=canvas->buffer[i]*i; } pthread_mutex_lock(&daemon_mutex); if(last_chksum!=chksum) { while(g15_send(g15screen_fd,(char *)canvas->buffer,G15_BUFFER_LEN)<0 && !leaving) { perror("lost connection, tryng again\n"); usleep(10000); /* connection error occurred - try to reconnect to the daemon */ g15screen_fd=new_g15_screen(G15_G15RBUF); } } pthread_mutex_unlock(&daemon_mutex); last_chksum=chksum; usleep(75*1000); if(playlist_mode) usleep(75*1000); } return NULL; }