void SetSignatureCurrPos(struct Tracker_Windows *window){ struct WBlocks *wblock=window->wblock; int curr_realline=wblock->curr_realline; Place *place= &wblock->reallines[curr_realline]->l.p; char *signaturestring = GFX_GetString(window,NULL,"New Time Signature: >"); if(signaturestring==NULL) return; Rational rational = create_rational_from_string(signaturestring); if (rational.is_valid()==false || rational.numerator<=0 || rational.denominator<=0) return; PlayStop(); Undo_Signatures_CurrPos(window); SetSignature(wblock->block,place,rational.get_ratio()); UpdateWBlockCoordinates(window, wblock); //UpdateWBlockWidths(window, wblock); //UpdateWSignatures(window,wblock); //DrawSignatures(window,wblock,curr_realline,curr_realline); wblock->block->is_dirty = true; //WBLOCK_DrawTempoColor(window,wblock,curr_realline,wblock->num_reallines); }
void TrackSelectUpdate(struct Tracker_Windows *window,struct WBlocks *wblock,int ret){ switch(ret){ case 0: return; case 1: R_SetCursorPos(window); break; case 2: window->must_redraw = true; #if 0 UpdateWBlockCoordinates(window,wblock); DrawUpAllWTracks(window,wblock,NULL); DrawAllWTrackHeaders(window,wblock); { struct WTracks *wtrack2=ListLast1(&wblock->wtracks->l); if(wtrack2->fxarea.x2<wblock->a.x2){ GFX_FilledBox(window,0,wtrack2->fxarea.x2+2,wblock->t.y1,wblock->a.x2,wblock->t.y2,PAINT_BUFFER); GFX_FilledBox(window,0,wtrack2->fxarea.x2+2,0,wblock->a.x2,wblock->t.y1,PAINT_DIRECTLY); } } DrawBottomSlider(window); DrawUpTrackerWindow(window); #endif break; } GFX_update_instrument_patch_gui(wblock->wtrack->track->patch); DrawAllWTrackHeaders(window,wblock); window->must_redraw=true; }
// Use DrawUpTrackerWindow instead. void UpdateTrackerWindow(struct Tracker_Windows *window){ UpdateTrackerWindowCoordinates(window); UpdateWBlockCoordinates(window,window->wblock); PixMap_reset(window); DrawWBlock(window,window->wblock); DrawLeftSlider(window); window->wblock->isgfxdatahere=true; }
int CursorLeft(struct Tracker_Windows *window,struct WBlocks *wblock){ if(window->curr_track>0 || (0==window->curr_track && window->curr_track_sub>=0)){ window->curr_track_sub--; if(window->curr_track_sub==-2){ do{ ATOMIC_INC(window->curr_track, -1); R_ASSERT_RETURN_IF_FALSE2(window->curr_track >= 0, 0); ATOMIC_WRITE(wblock->wtrack, ListFindElement1(&wblock->wtracks->l,window->curr_track)); }while(wblock->wtrack==NULL); int num_subtracks = GetNumSubtracks(wblock->wtrack); window->curr_track_sub=num_subtracks-1; } if( window->curr_track<wblock->left_track || (window->curr_track==wblock->left_track && window->curr_track_sub<wblock->left_subtrack) ){ wblock->left_subtrack=-1;//window->curr_track_sub; wblock->left_track=window->curr_track; printf(" left_track: %d, left_subtrack: %d. curr_track: %d\n",wblock->left_track, wblock->left_subtrack,window->curr_track); //UpdateAllWTracksCoordinates(window,wblock); UpdateWBlockCoordinates(window,wblock); return 2; }else{ printf(" left_track: %d, left_subtrack: %d, curr_track: %d\n",wblock->left_track, wblock->left_subtrack,window->curr_track); return 1; } }else{ if (window->curr_track==TEMPOTRACK) return 0; ATOMIC_INC(window->curr_track, -1); if (window->curr_track==TEMPONODETRACK && window->show_reltempo_track==false) ATOMIC_INC(window->curr_track, -1); if (window->curr_track==LINENUMBTRACK) ATOMIC_INC(window->curr_track, -1); if (window->curr_track==SIGNATURETRACK && window->show_signature_track==false) ATOMIC_INC(window->curr_track, -1); if (window->curr_track==LPBTRACK && window->show_lpb_track==false) ATOMIC_INC(window->curr_track, -1); if (window->curr_track==TEMPOTRACK && window->show_bpm_track==false) set_curr_track_to_leftmost_legal_track(window); return 1; } }
void EditorWidget::updateEditor(){ if(ATOMIC_GET(is_starting_up)==true) return; { struct Patch *patch = ATOMIC_GET(atomic_must_redraw_instrument); if (patch!=NULL){ ATOMIC_SET(atomic_must_redraw_instrument, NULL); GFX_update_instrument_widget(patch);//GFX_update_instrument_patch_gui(patch); } } transfer_atomic_must_redraws(window); #if 0 //!defined(RELEASE) { int queue_size = GFX_get_op_queue_size(this->window); if (queue_size > 0 || this->window->must_calculate_coordinates==true || this->window->must_redraw==true || this->window->must_redraw_editor) printf("..Updating. Queue: %d. Update coordinates: %d. Redraw editor: %d. Redraw: %d\n", queue_size, this->window->must_calculate_coordinates, this->window->must_redraw_editor, this->window->must_redraw ); } #endif if (GFX_get_op_queue_size(this->window)>0) this->window->must_redraw = true; if (this->window->must_calculate_coordinates==true){ this->window->must_redraw = true; this->window->must_calculate_coordinates=false; } if (this->window->must_redraw) { UpdateTrackerWindowCoordinates(window); UpdateWBlockCoordinates(this->window, this->window->wblock); GFX_UpdateUpperLeft(window, window->wblock); UpdateAllPianoRollHeaders(window, window->wblock); SEQUENCER_update(); update(); this->window->must_redraw_editor=true; this->window->must_redraw=false; } if (this->window->must_redraw_editor==true){ GL_create(this->window, this->window->wblock); if (!is_playing()) SEQUENCER_update(); this->window->must_redraw_editor=false; } }
void setPianorollLowKey(int key, int tracknum, int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; struct WTracks *wtrack = getWTrackFromNumA(windownum, &window, blocknum, &wblock, tracknum); if (wtrack==NULL) return; int newkey = R_BOUNDARIES(0, key, 127); if (wtrack->pianoroll_highkey - newkey < 5) return; wtrack->pianoroll_lowkey = newkey; UpdateWBlockCoordinates(window,wblock); window->must_redraw=true; }
void RemoveSignaturesCurrPos(struct Tracker_Windows *window){ struct WBlocks *wblock=window->wblock; int curr_realline=wblock->curr_realline; Place p1,p2; PlayStop(); Undo_Signatures_CurrPos(window); PlaceSetReallinePlace(wblock,curr_realline,&p1); PlaceSetReallinePlace(wblock,curr_realline+1,&p2); RemoveSignatures(wblock->block,&p1,&p2); UpdateWBlockCoordinates(window, wblock); //UpdateWBlockWidths(window, wblock); //UpdateWSignatures(window,wblock); //UpdateSTimes(wblock->block); wblock->block->is_dirty = true; }
/************************************************************************** FUNCTION Redraw without flickering. ***************************************************************************/ void DrawUpTrackerWindow(struct Tracker_Windows *window){ //printf("Draw up tracker. width: %d, height: %d\n",window->width,window->height); if(window->must_redraw==true) return; #if UPDATECOORDINATES_WHEN_DRAWING struct WBlocks *wblock = window->wblock; #endif #if 0 while(GetXSubTrack_B2(wblock,window->curr_track,window->curr_track_sub) >= wblock->a.x2){ if(window->curr_track<wblock->left_track) break; // should not be possible if(window->curr_track==wblock->left_track && window->curr_track_sub==wblock->left_subtrack) break; CursorLeft_CurrPos(window); } #endif #if !USE_OPENGL GFX_BouncePoints(window); // To clear point buffer. (TODO: Implement a clear point buffer function.) #endif #if UPDATECOORDINATES_WHEN_DRAWING UpdateTrackerWindowCoordinates(window); UpdateWBlockCoordinates(window,wblock); #endif #if !USE_OPENGL PixMap_reset(window); #endif #if !USE_OPENGL struct WTracks *wtrack=ListLast1(&wblock->wtracks->l); int x2=wtrack->fxarea.x2; EraseAllLines(window, window->wblock, 0, x2); GFX_FilledBox(window,0, x2,0, window->width-1,window->height-1, PAINT_BUFFER); DrawLeftSlider(window); #endif DrawWBlock(window,window->wblock); window->wblock->isgfxdatahere=true; #if !USE_OPENGL ClearUnusedWindowsAreas(window); Blt_unMarkVisible(window); // Need a better name for this function. #endif }
int MoveWTrackBorder_Mouse( struct Tracker_Windows *window, float x,float y ){ struct WBlocks *wblock=window->wblock; struct WTracks *wtrack=(struct WTracks *)ListFindElement1_r0(&wblock->wtracks->l,(NInt)window->prevaction.eint1); if(window->prevaction.action==NOACTION) window->must_redraw=true; // fix up slightly skewed gradient caused by the direct blitting. (blitting is wrong, but it's faster) if(wtrack==NULL) return 0; x=R_BOUNDARIES(wtrack->fxarea.x+3, x, wblock->t.x2-3); int oldfxwidth=wtrack->fxwidth; wtrack->fxwidth=x - wtrack->fxarea.x; wtrack->fxwidth=R_MAX(wtrack->fxwidth,2); if(oldfxwidth==wtrack->fxwidth && window->prevaction.action!=NOACTION){ return 0; } #if !USE_OPENGL NInt oldrighttrack=wblock->right_track; GFX_BitBlt(window,wtrack->fxwidth-oldfxwidth,0, wtrack->fxarea.x2-2,wblock->a.y1, wblock->a.x2,wblock->t.y2 ); #endif UpdateWBlockCoordinates(window,wblock); DrawAllWTrackHeaders(window,wblock); #if !USE_OPENGL DrawUpWTrack(window,wblock,wtrack); struct WTracks *wtrack2; if(oldfxwidth>wtrack->fxwidth){ wtrack2=ListFindElement1(&wblock->wtracks->l,oldrighttrack); while(wtrack2!=NULL && wtrack2->l.num<=wblock->right_track){ DrawUpWTrack(window,wblock,wtrack2); DrawWTrackHeader(window,wblock,wtrack2); wtrack2=NextWTrack(wtrack2); } }else{ while(GetXSubTrack_B2(wblock,window->curr_track,window->curr_track_sub)+3>=wblock->a.x2){ window->curr_track_sub--; if(window->curr_track_sub==-2){ wblock->wtrack=ListFindElement1(&wblock->wtracks->l,window->curr_track-1); window->curr_track_sub=wblock->wtrack->num_vel-1; window->curr_track--; } } } wtrack2=ListLast1(&wblock->wtracks->l); if(wtrack2->fxarea.x2<wblock->a.x2){ GFX_FilledBox(window,0, wtrack2->fxarea.x2+1,wblock->a.y1, wblock->a.x2,wblock->t.y1, PAINT_BUFFER); GFX_FilledBox(window,0,wtrack2->fxarea.x2+3,wblock->a.y1,wblock->a.x2,wblock->t.y2,PAINT_BUFFER); EraseAllLines(window,wblock, wtrack2->x, wtrack2->x2); } UpdateBottomSlider(window); if(wtrack->fxarea.x2<wblock->a.x2){ Blt_mark(window,wblock->top_realline,wblock->bot_realline, wtrack->fxarea.x2,wblock->a.x2 ); Blt_marktrackheader(window,wtrack->l.num,wblock->right_track); } #else UpdateBottomSlider(window); { struct WTracks *wtrack2=wtrack; while(wtrack2!=NULL && wtrack2->l.num<=wblock->right_track){ DrawAllWTrackHeaders(window,wblock); wtrack2=NextWTrack(wtrack2); } } #endif //window->must_redraw=true; return 0; }