#include "rgb_macros.h"
#include "keyboard.h"
#include "editor_routes.h"
+#include "editor_cursors.h"
+#include "mouse_cursors.h"
using namespace std;
using namespace ARDOUR;
/* compute start and end points for the summary */
- nframes_t const session_length = _session->current_end_frame() - _session->current_start_frame ();
+ framecnt_t const session_length = _session->current_end_frame() - _session->current_start_frame ();
double const theoretical_start = _session->current_start_frame() - session_length * _overhang_fraction;
_start = theoretical_start > 0 ? theoretical_start : 0;
_end = _session->current_end_frame() + session_length * _overhang_fraction;
{
switch (p) {
case LEFT:
- get_window()->set_cursor (*_editor->left_side_trim_cursor);
+ get_window()->set_cursor (*_editor->_cursors->resize_left);
break;
case LEFT_TOP:
- get_window()->set_cursor (Gdk::Cursor (Gdk::TOP_LEFT_CORNER));
+ get_window()->set_cursor (*_editor->_cursors->resize_top_left);
break;
case TOP:
- get_window()->set_cursor (Gdk::Cursor (Gdk::TOP_SIDE));
+ get_window()->set_cursor (*_editor->_cursors->resize_top);
break;
case RIGHT_TOP:
- get_window()->set_cursor (Gdk::Cursor (Gdk::TOP_RIGHT_CORNER));
+ get_window()->set_cursor (*_editor->_cursors->resize_top_right);
break;
case RIGHT:
- get_window()->set_cursor (*_editor->right_side_trim_cursor);
+ get_window()->set_cursor (*_editor->_cursors->resize_right);
break;
case RIGHT_BOTTOM:
- get_window()->set_cursor (Gdk::Cursor (Gdk::BOTTOM_RIGHT_CORNER));
+ get_window()->set_cursor (*_editor->_cursors->resize_bottom_right);
break;
case BOTTOM:
- get_window()->set_cursor (Gdk::Cursor (Gdk::BOTTOM_SIDE));
+ get_window()->set_cursor (*_editor->_cursors->resize_bottom);
break;
case LEFT_BOTTOM:
- get_window()->set_cursor (Gdk::Cursor (Gdk::BOTTOM_LEFT_CORNER));
+ get_window()->set_cursor (*_editor->_cursors->resize_bottom_left);
break;
case INSIDE:
- get_window()->set_cursor (Gdk::Cursor (Gdk::FLEUR));
+ get_window()->set_cursor (*_editor->_cursors->move);
+ break;
+ case TO_LEFT_OR_RIGHT:
+ get_window()->set_cursor (*_editor->_cursors->expand_left_right);
+ break;
+ case BELOW_OR_ABOVE:
+ get_window()->set_cursor (*_editor->_cursors->expand_up_down);
break;
default:
get_window()->set_cursor ();
}
set_editor (xr, y);
- set_cursor (INSIDE);
+ set_cursor (_start_position);
} else if (_zoom_dragging) {
/* see comment in other set_editor () */
return;
}
-
+
set_editor_x (x);
set_editor_y (y);
}
the total height into `total_height' and the height of complete tracks into
`scale height'.
*/
+
+ /* Copy of target range for use below */
pair<double, double> yc = y;
+ /* Total height of all tracks */
double total_height = 0;
+ /* Height of any parts of tracks that aren't fully in the desired range */
+ double partial_height = 0;
+ /* Height of any tracks that are fully in the desired range */
double scale_height = 0;
_editor->_routes->suspend_redisplay ();
}
double const h = (*i)->effective_height ();
+ total_height += h;
- if (yc.first >= 0 && yc.first < _track_height) {
- total_height += (_track_height - yc.first) * h / _track_height;
- } else if (yc.first < 0 && yc.second > _track_height) {
- total_height += h;
+ if (yc.first > 0 && yc.first < _track_height) {
+ partial_height += (_track_height - yc.first) * h / _track_height;
+ } else if (yc.first <= 0 && yc.second >= _track_height) {
scale_height += h;
- } else if (yc.second >= 0 && yc.second < _track_height) {
- total_height += yc.second * h / _track_height;
+ } else if (yc.second > 0 && yc.second < _track_height) {
+ partial_height += yc.second * h / _track_height;
break;
}
yc.first -= _track_height;
yc.second -= _track_height;
}
+
+ /* Height that we will use for scaling; use the whole editor height unless there are not
+ enough tracks to fill it.
+ */
+ double const ch = min (total_height, _editor->canvas_height() - _editor->get_canvas_timebars_vsize());
- /* hence required scale factor of the complete tracks to fit the required y range */
- double const scale = ((_editor->canvas_height() - _editor->get_canvas_timebars_vsize()) - (total_height - scale_height)) / scale_height;
+ /* hence required scale factor of the complete tracks to fit the required y range;
+ the amount of space they should take up divided by the amount they currently take up.
+ */
+ double const scale = (ch - partial_height) / scale_height;
yc = y;
continue;
}
- if (yc.first < 0 && yc.second > _track_height) {
+ if (yc.first <= 0 && yc.second >= _track_height) {
(*i)->set_height (max (TimeAxisView::preset_height (HeightSmall), (uint32_t) ((*i)->effective_height() * scale)));
}