Changeset 469

Show
Ignore:
Timestamp:
01/12/07 07:50:43 (2 years ago)
Author:
radekk
Message:

Hand Tool smooth scrolling.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sweep/trunk/src/sample-display.c

    r442 r469  
    112112#define MARCH_INTERVAL 300 
    113113#define PULSE_INTERVAL 450 
     114#define HAND_SCROLL_INTERVAL 50 
    114115 
    115116extern sw_view * last_tmp_view; 
     
    16261627 
    16271628static gint 
     1629sample_display_hand_scroll (SampleDisplay * s) 
     1630{ 
     1631  gint new_win_start, win_length; 
     1632  gfloat step; 
     1633   
     1634  win_length = s->view->end - s->view->start; 
     1635 
     1636  step = win_length * 1.0 / s->width; 
     1637 
     1638  new_win_start = s->view->start + s->hand_scroll_delta * step; 
     1639   
     1640  new_win_start = CLAMP(new_win_start, 0, 
     1641                        s->view->sample->sounddata->nr_frames - 
     1642                        (s->view->end - s->view->start)); 
     1643 
     1644  if(new_win_start != s->view->start) { 
     1645    sample_display_set_window (s, 
     1646                               new_win_start, 
     1647                               new_win_start + win_length); 
     1648  } else { 
     1649          s->hand_scroll_delta = 0; 
     1650  } 
     1651/* 
     1652  g_print ("s->delta: %i new_win_start: %i\n", s->hand_scroll_delta, new_win_start); 
     1653*/ 
     1654  s->hand_scroll_delta *= 0.98; 
     1655 
     1656  return (s->hand_scroll_delta != 0); 
     1657} 
     1658 
     1659static gint 
    16281660sample_display_scroll_left (gpointer data) 
    16291661{ 
     
    18901922  gdouble step = (gdouble)(s->view->end - s->view->start) / ((gdouble)s->width); 
    18911923  GtkAdjustment * adj = GTK_ADJUSTMENT(s->view->adj); 
    1892  
     1924  gint delta; 
     1925 
     1926  delta = s->view->hand_offset - x; 
     1927 
     1928  s->hand_scroll_delta *= 0.9; 
     1929 
     1930  if (abs (delta) > abs (s->hand_scroll_delta)) 
     1931          s->hand_scroll_delta = delta; 
     1932   
    18931933  if (s->view->hand_offset != x){ 
    18941934    move = s->view->hand_offset - x; 
     
    19061946        vend = s->view->sample->sounddata->nr_frames; 
    19071947    } 
    1908 /* 
    1909     g_print("X: %i OLD: %i MOVE: %f STEP: %f start: %i end: %i vstart: %f vend: %f fstart:%f fend: %f\n", 
    1910                    x, s->view->hand_offset, move, step, 
    1911                    s->view->start, s->view->end, vstart, vend, round(vstart), round(vend)); 
    1912 */ 
    1913     vstart = round(vstart + (move < 0 ? 0.5 : -0.5)); 
     1948     
     1949        vstart = round(vstart + (move < 0 ? 0.5 : -0.5)); 
    19141950    vend = round(vend + (move < 0 ? 0.5 : -0.5)); 
    19151951 
     
    22102246        break; 
    22112247      case TOOL_HAND: 
    2212         s->selecting = SELECTING_HAND; 
    2213         s->view->hand_offset = x; 
    2214         SET_CURSOR(widget, HAND_CLOSE); 
    2215         sample_display_handle_hand_motion (s, x, y); 
     2248            s->selecting = SELECTING_HAND; 
     2249            s->view->hand_offset = x; 
     2250            s->hand_scroll_delta = 0; 
     2251            if (s->hand_scroll_tag){ 
     2252                   g_source_remove (s->hand_scroll_tag); 
     2253                   s->hand_scroll_tag = 0; 
     2254            } 
     2255            SET_CURSOR(widget, HAND_CLOSE); 
     2256            sample_display_handle_hand_motion (s, x, y); 
    22162257        break; 
    22172258      case TOOL_ZOOM: 
    2218         o = XPOS_TO_OFFSET(x); 
    2219         view_center_on (s->view, o); 
    2220         if (state & GDK_SHIFT_MASK) { 
    2221           view_zoom_out (s->view, 2.0); 
    2222         } else { 
    2223           view_zoom_in (s->view, 2.0); 
    2224        
     2259            o = XPOS_TO_OFFSET(x); 
     2260            view_center_on (s->view, o); 
     2261            if (state & GDK_SHIFT_MASK) { 
     2262              view_zoom_out (s->view, 2.0); 
     2263            } else { 
     2264              view_zoom_in (s->view, 2.0); 
     2265           
    22252266        break; 
    22262267      case TOOL_PENCIL: 
     
    23532394  case TOOL_HAND: 
    23542395    s->view->hand_offset = -1; 
     2396 
     2397    s->hand_scroll_tag = g_timeout_add (HAND_SCROLL_INTERVAL, 
     2398                    (GSourceFunc)sample_display_hand_scroll, 
     2399                    s); 
     2400 
    23552401    break; 
    23562402  case TOOL_MOVE: 
     
    24112457        break; 
    24122458      case SELECTING_HAND: 
    2413         sample_display_handle_hand_motion (s, x, y); 
    2414         break; 
     2459            sample_display_handle_hand_motion (s, x, y); 
     2460            break; 
    24152461      case SELECTING_PENCIL: 
    24162462        sample_display_handle_pencil_motion (s, x, y); 
     
    29292975  s->pulsing_tag = 0; 
    29302976  s->pulse = FALSE; 
     2977  s->hand_scroll_tag = 0; 
    29312978  s->mouse_x = 0; 
    29322979  s->mouse_offset = 0; 
  • sweep/trunk/src/sample-display.h

    r241 r469  
    9090  gboolean pulse; 
    9191 
     92  gint hand_scroll_tag;   /* gtk_timeout tag for natural hand scrolling */ 
     93  gint hand_scroll_delta; /* natural hand scrolling */ 
     94 
    9295  /* Window panning */ 
    9396  int selecting_x0;  /* the coordinate where the mouse was clicked */