void Scroll_scroll( struct Tracker_Windows *window, int num_lines ){ // int lokke; struct WBlocks *wblock=window->wblock; #if !USE_OPENGL int top_realline=wblock->top_realline; int bot_realline=wblock->bot_realline; /* if(num_lines<0){ Scroll_freePixMapLines(window,bot_realline+num_lines+1,bot_realline); }else{ Scroll_freePixMapLines(window,top_realline,top_realline+num_lines-1); } // printf("scroll1:\n"); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); */ // Scroll_scrollPixMapDefs(window,num_lines); PixMap_scrollDefs( window, num_lines ); #endif // printf("scroll2:\n"); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); wblock->top_realline+=num_lines; wblock->curr_realline+=num_lines; wblock->bot_realline+=num_lines; GE_set_curr_realline(wblock->curr_realline); #if !USE_OPENGL if(num_lines<0){ Scroll_makePixMapLines(window,top_realline+num_lines,top_realline-1); }else{ Scroll_makePixMapLines(window,bot_realline+1,bot_realline+num_lines); } #endif // printf("scroll3: n: %d\n",num_lines); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); /* Scroll_drawPixMaps(window,wblock->top_realline,wblock->bot_realline); */ }
// Simpler version when using opengl void P2MUpdateSongPosCallBack(void){ bool setfirstpos=ATOMIC_GET(root->setfirstpos); NInt curr_block_num = ATOMIC_GET(root->curr_blocknum); struct Tracker_Windows *window=root->song->tracker_windows; struct WBlocks *wblock = ListFindElement1(&window->wblocks->l,curr_block_num); int old_curr_realline = wblock->curr_realline; int till_curr_realline = R_BOUNDARIES(0, ATOMIC_GET(wblock->till_curr_realline), wblock->num_reallines-1); // till_curr_realline can be set from any thread, at any time, to any value. if (!ATOMIC_GET(root->play_cursor_onoff)){ //printf("P2MUpdateSongPosCallBack: Setting to %d\n",till_curr_realline); wblock->curr_realline = till_curr_realline; wblock->top_realline += till_curr_realline - old_curr_realline; wblock->bot_realline += till_curr_realline - old_curr_realline; } if(pc->playtype==PLAYSONG) BS_SelectPlaylistPos(ATOMIC_GET2(root->curr_playlist)); if(window->curr_block!=curr_block_num){ //printf("Bef. w: %d, r: %d\n",window->curr_block,root->curr_block); if(setfirstpos){ wblock->curr_realline=0; SetWBlock_Top_And_Bot_Realline(window,wblock); GE_set_curr_realline(0); } SelectWBlock( window, wblock ); //printf("Aft. w: %d, r: %d\n",window->curr_block,root->curr_block); } // make sure "Rec" is updated { static struct Tracks *current_track = NULL; static bool current_track_recording = false; struct Tracks *track = wblock->wtrack->track; if (track != current_track || (current_track!=NULL && track->is_recording != current_track_recording)){ current_track = track; current_track_recording = current_track->is_recording; GL_create(window, wblock); } } //GE_set_curr_realline(wblock->curr_realline); // printf("till_curr_realline: %d\n",wblock->till_curr_realline); //ScrollEditorToRealLine(window,wblock,wblock->curr_realline); }
static void setit(struct WBlocks *wblock, int realline){ if (!ATOMIC_GET(root->play_cursor_onoff)){ // Set current realline in main thread (main thread picks up till_curr_realline and sets curr_realline afterwards) //printf(" Setting till_curr_realline to %d\n", realline); ATOMIC_SET(wblock->till_curr_realline, realline); // Set current realline in opengl thread //printf("PEQ: set realline %d\n",realline); GE_set_curr_realline(realline); } PC_Pause_set_pos(wblock->l.num, realline); }
void Scroll_scroll( struct Tracker_Windows *window, int num_lines ){ bool dopause = (ATOMIC_GET(root->play_cursor_onoff)==false); if (dopause) PC_Pause(); // int lokke; struct WBlocks *wblock=window->wblock; #if !USE_OPENGL int top_realline=wblock->top_realline; int bot_realline=wblock->bot_realline; /* if(num_lines<0){ Scroll_freePixMapLines(window,bot_realline+num_lines+1,bot_realline); }else{ Scroll_freePixMapLines(window,top_realline,top_realline+num_lines-1); } // printf("scroll1:\n"); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); */ // Scroll_scrollPixMapDefs(window,num_lines); PixMap_scrollDefs( window, num_lines ); #endif // printf("scroll2:\n"); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); wblock->top_realline+=num_lines; wblock->curr_realline+=num_lines; wblock->bot_realline+=num_lines; //printf("scroll: Set realline to %d (%d)\n",wblock->curr_realline,num_lines); GE_set_curr_realline(wblock->curr_realline); #if !USE_OPENGL if(num_lines<0){ Scroll_makePixMapLines(window,top_realline+num_lines,top_realline-1); }else{ Scroll_makePixMapLines(window,bot_realline+1,bot_realline+num_lines); } #endif if (dopause) PC_StopPause(window); // printf("scroll3: n: %d\n",num_lines); // for(lokke=0;lokke<window->wblock->num_visiblelines;lokke++) // printf("vis: %d, val: %d\n",lokke,window->pixmapdefs[lokke]); /* Scroll_drawPixMaps(window,wblock->top_realline,wblock->bot_realline); */ }