Пример #1
0
static void DrawAllWTrackNames(
                               struct Tracker_Windows *window,
                               const struct WBlocks *wblock
                               )
{  
  //int num_tracks = ListFindNumElements1(&wblock->wtracks->l);
  //bool *draw_border = alloca(sizeof(bool) * num_tracks);
  //memset(draw_border, 0, sizeof(bool) * num_tracks);

  {
    const struct WTracks *wtrack1 = get_leftmost_visible_wtrack(wblock);
    if (wtrack1==NULL)
      return;

    const struct WTracks *rightmost_wtrack = get_rightmost_visible_wtrack(wblock, wtrack1);
    R_ASSERT_RETURN_IF_FALSE(rightmost_wtrack!=NULL);
                      
    int tracknum1 = wtrack1->l.num;
    
    int channelnum1 = ATOMIC_GET(wtrack1->track->midi_channel);
    struct Patch   *patch1   = wtrack1->track->patch;
    struct WTracks *wtrack2  = NextWTrack(wtrack1);
    int tracknum2            = tracknum1;

    for(;;){
      int channelnum2 = wtrack2==NULL ? 0 : ATOMIC_GET(wtrack2->track->midi_channel);
    
      if (wtrack2==NULL || wtrack2->track->patch==NULL || patch1==NULL || wtrack2->track->patch != patch1 || channelnum2 != channelnum1){
      
        DrawWTrackNames(window, wblock, tracknum1, tracknum2);
        tracknum1 = tracknum2 = tracknum2+1;
        channelnum1 = channelnum2;
        patch1 = wtrack2==NULL ? NULL : wtrack2->track->patch;

        if (tracknum1 > rightmost_wtrack->l.num)
          break;
      
      } else {
        tracknum2++;
      }

      if (wtrack2==NULL)
        break;

      //if (tracknum2 - tracknum1 >= 1)
      //  draw_border[wtrack2->l.num] = true;
    
      wtrack2 = NextWTrack(wtrack2);
    }
  }
  

}
Пример #2
0
static void DrawAllWTrackNames(
                               struct Tracker_Windows *window,
                               struct WBlocks *wblock
                               )
{  
  struct WTracks *wtrack1 = (struct WTracks *)ListFindElement1(&wblock->wtracks->l,wblock->left_track);
  if (wtrack1==NULL)
    return;

  int tracknum1 = wtrack1->l.num;

  int channelnum1 = ATOMIC_GET(wtrack1->track->midi_channel);
  struct Patch   *patch1   = wtrack1->track->patch;
  struct WTracks *wtrack2  = NextWTrack(wtrack1);
  int tracknum2            = tracknum1;
  
  for(;;){
    int channelnum2 = wtrack2==NULL ? 0 : ATOMIC_GET(wtrack2->track->midi_channel);
    if (wtrack2==NULL || wtrack2->track->patch==NULL || patch1==NULL || wtrack2->track->patch != patch1 || channelnum2 != channelnum1){
      
      DrawWTrackNames(window, wblock, tracknum1, tracknum2);
      tracknum1 = tracknum2 = tracknum2+1;
      channelnum1 = channelnum2;
      patch1 = wtrack2==NULL ? NULL : wtrack2->track->patch;
      
    } else {
      tracknum2++;
    }

    if (wtrack2==NULL)
      break;
    else
      wtrack2 = NextWTrack(wtrack2);
  }

}