Changeset 468

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

Smooth hand scroll - feature should be applied into production trunk.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sweep/branches/sweep-info-panel/src/sample-display.c

    r467 r468  
    115115#define MARCH_INTERVAL 300 
    116116#define PULSE_INTERVAL 450 
     117#define HAND_SCROLL_INTERVAL 50 
    117118 
    118119extern sw_view * last_tmp_view; 
     
    18121813 
    18131814static gint 
     1815sample_display_hand_scroll (SampleDisplay * s) 
     1816{ 
     1817  gint new_win_start, win_length; 
     1818  gfloat step; 
     1819   
     1820  win_length = s->view->end - s->view->start; 
     1821 
     1822  step = win_length * 1.0 / s->width; 
     1823 
     1824  new_win_start = s->view->start + s->hand_scroll_delta * step; 
     1825   
     1826  new_win_start = CLAMP(new_win_start, 0, 
     1827                        s->view->sample->sounddata->nr_frames - 
     1828                        (s->view->end - s->view->start)); 
     1829 
     1830  if(new_win_start != s->view->start) { 
     1831    sample_display_set_window (s, 
     1832                               new_win_start, 
     1833                               new_win_start + win_length); 
     1834  } else { 
     1835          s->hand_scroll_delta = 0; 
     1836  } 
     1837/* 
     1838  g_print ("s->delta: %i new_win_start: %i\n", s->hand_scroll_delta, new_win_start); 
     1839*/ 
     1840  s->hand_scroll_delta *= 0.98; 
     1841 
     1842  return (s->hand_scroll_delta != 0); 
     1843} 
     1844 
     1845static gint 
    18141846sample_display_scroll_left (gpointer data) 
    18151847{ 
     
    20762108  gdouble step = (gdouble)(s->view->end - s->view->start) / ((gdouble)s->width); 
    20772109  GtkAdjustment * adj = GTK_ADJUSTMENT(s->view->adj); 
    2078  
     2110  gint delta; 
     2111 
     2112  delta = s->view->hand_offset - x; 
     2113 
     2114  s->hand_scroll_delta *= 0.9; 
     2115 
     2116  if (abs (delta) > abs (s->hand_scroll_delta)) 
     2117          s->hand_scroll_delta = delta; 
     2118/*   
     2119  g_print ("HT:Delta: %i, %i\n", delta, s->hand_scroll_delta); 
     2120*/ 
    20792121  if (s->view->hand_offset != x){ 
    20802122    move = s->view->hand_offset - x; 
     
    24542496 
    24552497    case TOOL_HAND: 
    2456                 s->selecting = SELECTING_HAND; 
    2457                 s->view->hand_offset = x; 
    2458                 SET_CURSOR(widget, HAND_CLOSE); 
    2459                 sample_display_handle_hand_motion (s, x, y); 
     2498//      g_print("HT:Press:\n"); 
     2499        s->selecting = SELECTING_HAND; 
     2500        s->view->hand_offset = x; 
     2501        s->hand_scroll_delta = 0; 
     2502        if (s->hand_scroll_tag){ 
     2503                g_source_remove (s->hand_scroll_tag); 
     2504                s->hand_scroll_tag = 0; 
     2505        } 
     2506        SET_CURSOR(widget, HAND_CLOSE); 
     2507        sample_display_handle_hand_motion (s, x, y); 
    24602508        break; 
    24612509 
    24622510    case TOOL_MARKER: 
    2463                s->selecting = SELECTING_MARKER; 
    2464                sample_display_handle_marker_motion (s, x, y); 
     2511        s->selecting = SELECTING_MARKER; 
     2512        sample_display_handle_marker_motion (s, x, y); 
    24652513        break; 
    24662514 
     
    26072655    break; 
    26082656  case TOOL_HAND: 
     2657//    g_print("HT:Release:\n"); 
    26092658    s->view->hand_offset = -1; 
     2659 
     2660    s->hand_scroll_tag = g_timeout_add (HAND_SCROLL_INTERVAL, 
     2661                    (GSourceFunc)sample_display_hand_scroll, 
     2662                    s); 
     2663 
    26102664    break; 
    26112665 
     
    32143268  s->pulsing_tag = 0; 
    32153269  s->pulse = FALSE; 
     3270  s->hand_scroll_tag = 0; 
    32163271  s->mouse_x = 0; 
    32173272  s->mouse_offset = 0; 
  • sweep/branches/sweep-info-panel/src/sample-display.h

    r459 r468  
    9797  gboolean pulse; 
    9898 
     99  gint hand_scroll_tag;   /* gtk_timeout tag for natural hand scrolling */ 
     100  gint hand_scroll_delta; /* natural hand scrolling */ 
     101 
    99102  /* Window panning */ 
    100103  int selecting_x0;  /* the coordinate where the mouse was clicked */