Exemple #1
0
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);
}
Exemple #2
0
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;
}
Exemple #3
0
// 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;
}
Exemple #4
0
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;
	}
}
Exemple #5
0
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;
  }
}
Exemple #6
0
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;
}
Exemple #7
0
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;
}
Exemple #8
0
/**************************************************************************
  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;
}