Changeset 897

Show
Ignore:
Timestamp:
08/16/07 12:13:05 (1 year ago)
Author:
nikhilsharma
Message:

Updated to fix in/out points, marker selection, and other tracking bugs on the timeline, though one bug remains - marker thumb plays through the last active in/out point region in play mode.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/jahwidgets/src/qt3/widgets/timelineSlider.cpp

    r895 r897  
    152152        } 
    153153 
    154         int markerClamp( int i ) const 
    155         { 
    156                 return std::max( std::min( i, activeRange->out ), activeRange->in ); 
    157         } 
    158  
    159154        int inClamp( int i ) const 
    160155        { 
     156                // Change input point to a valid point below the current out point 
    161157                i = std::max( std::min( i, activeRange->out-1 ), min ); 
    162158 
    163159                // And clamp above neighbouring out point 
     160                for ( RangeSet::const_reverse_iterator I = rangeContainer.rbegin(); 
     161                          I != rangeContainer.rend(); 
     162                          ++I )  
     163                { 
     164                        if ( *I == activeRange ) continue; 
     165 
     166                        if ( (*I)->out < activeRange->out )     { 
     167                                if ( i <= (*I)->out ) { 
     168                                        i = (*I)->out - 1; 
     169                                        break; 
     170                                } 
     171                        } 
     172                } 
     173 
     174                return i; 
     175        } 
     176 
     177        int outClamp( int i ) const 
     178        { 
     179                // Change input point to a valid point above the current in point 
     180                i = std::min( std::max( i, activeRange->in+1 ), max ); 
     181 
     182                // And clamp below neighbouring in point 
    164183                for ( RangeSet::const_iterator I = rangeContainer.begin(); 
    165184                          I != rangeContainer.end(); 
     
    168187                        if ( *I == activeRange ) continue; 
    169188 
    170                         if ( (*I)->out > activeRange->out ) break; 
    171  
    172                         if ( i <= (*I)->out ) { 
    173                                 i = (*I)->out + 1; 
    174                                 break; 
    175                         } 
    176                 } 
    177  
    178                 return i; 
    179         } 
    180  
    181         int outClamp( int i ) const 
    182         { 
    183                 i = std::max( std::min( i, max ), activeRange->in ); 
    184  
    185                 // And clamp below neighbouring in point 
    186                 for ( RangeSet::const_reverse_iterator I = rangeContainer.rbegin(); 
    187                           I != rangeContainer.rend(); 
    188                           ++I )  
    189                 { 
    190                         if ( *I == activeRange ) continue; 
    191  
    192                         if ( (*I)->out < activeRange->in ) break; 
    193  
    194                         if ( i >= (*I)->in ) { 
    195                                 i = (*I)->in - 1; 
    196                                 break; 
     189                        if ( (*I)->in > activeRange->in ) { 
     190                                if ( i >= (*I)->in ) { 
     191                                        i = (*I)->in + 1; 
     192                                        break; 
     193                                } 
    197194                        } 
    198195                } 
     
    585582int TimelineSlider::insertRange( int in, int out ) 
    586583{ 
    587         qDebug( "insertRange: %d %d", in, out ); 
     584        //qDebug( "insertRange: %d %d", in, out ); 
    588585 
    589586        // Clamp to min/max, but otherwise leave as-is 
     
    599596void TimelineSlider::removeRangeWithId( int id )  
    600597{ 
    601         qDebug( "removeRangeWithId: %d", id ); 
     598        //qDebug( "removeRangeWithId: %d", id ); 
    602599 
    603600        RangeSet::iterator I = std::find_if( m_impl->rangeContainer.begin(), 
     
    10431040{ 
    10441041        // tracking check avoids anyone messing with the value during mouse tracking 
    1045         if ( val != m_impl->v && m_impl->tracking != PrivateTimeline::VALUE ) 
     1042        if ( val != m_impl->v && ( (m_impl->tracking != PrivateTimeline::VALUE) && 
     1043                                                        (m_impl->tracking != PrivateTimeline::THUMB) ) ) 
    10461044        { 
    10471045                _setValue( val );