+ /* calculate hidden tracks in current y-axis delta */
+ int delta_skip = 0;
+ if (_last_pointer_time_axis_view < 0 && _pdropzone > 0) {
+ /* The mouse is more than one track below the dropzone.
+ * distance calculation is not needed (and would not work, either
+ * because the dropzone is "packed").
+ *
+ * Except when [partially] moving regions out of dropzone in a large step.
+ * (the mouse may or may not remain in the DZ)
+ * Hidden tracks at the bottom of the TAV need to be skipped.
+ *
+ * This also handles the case if the mouse entered the DZ
+ * in a large step (exessive delta), either due to fast-movement,
+ * autoscroll, laggy UI. _ddropzone copensates for that (see "move into dz" above)
+ */
+ if (delta_time_axis_view < 0 && (int)_ddropzone - delta_time_axis_view >= (int)_pdropzone) {
+ const int dt = delta_time_axis_view + (int)_pdropzone - (int)_ddropzone;
+ assert(dt <= 0);
+ delta_skip = apply_track_delta(_time_axis_views.size(), dt, 0, true)
+ -_time_axis_views.size() - dt;
+ }
+ }
+ else if (_last_pointer_time_axis_view < 0) {
+ /* Moving out of the zone. Check for hidden tracks at the bottom. */
+ delta_skip = apply_track_delta(_time_axis_views.size(), delta_time_axis_view, 0, true)
+ -_time_axis_views.size() - delta_time_axis_view;
+ } else {
+ /* calculate hidden tracks that are skipped by the pointer movement */
+ delta_skip = apply_track_delta(_last_pointer_time_axis_view, delta_time_axis_view, 0, true)
+ - _last_pointer_time_axis_view
+ - delta_time_axis_view;
+ }
+