Change various positions and dimensions to integer from double
This includes note heights, note positions, contents height for streamviews, positions of tracks. It makes zero sense to think of these as having potentially fractional positions. In addition, fractional note heights and positions lead to numerous errors drawing MIDI stuff at the pixel level.
This commit is contained in:
@@ -51,7 +51,7 @@ public:
|
||||
|
||||
void redisplay_track ();
|
||||
|
||||
double contents_height() const {
|
||||
int contents_height() const {
|
||||
return (_trackview.current_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2);
|
||||
}
|
||||
|
||||
|
||||
@@ -6815,9 +6815,9 @@ NoteCreateDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
|
||||
|
||||
double const x0 = editing_context.sample_to_pixel (rrp1.samples ());
|
||||
double const x1 = editing_context.sample_to_pixel (rrp2.samples ());
|
||||
double const y = _midi_view->note_to_y (_midi_view->y_to_note (y_to_region (event->button.y)));
|
||||
int const y = _midi_view->note_to_y (_midi_view->y_to_note (y_to_region (event->button.y)));
|
||||
|
||||
_drag_rect->set (ArdourCanvas::Rect (x0, y, x1, y + floor (_midi_view->midi_context ().note_height ())));
|
||||
_drag_rect->set (ArdourCanvas::Rect (x0, y, x1, y + _midi_view->midi_context ().note_height ()));
|
||||
_drag_rect->set_outline_all ();
|
||||
_drag_rect->set_outline_color (0xffffff99);
|
||||
_drag_rect->set_fill_color (0xffffff66);
|
||||
@@ -6896,7 +6896,7 @@ HitCreateDrag::HitCreateDrag (EditingContext& ec, ArdourCanvas::Item* i, MidiVie
|
||||
: Drag (ec, i, Temporal::BeatTime, ec.get_trackview_group())
|
||||
, _midi_view (mv)
|
||||
, _last_pos (Temporal::Beats ())
|
||||
, _y (0.0)
|
||||
, _y (0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -8442,7 +8442,7 @@ Editor::fit_tracks (TrackViewList & tracks)
|
||||
* - height of the ruler/hscroll area
|
||||
*/
|
||||
uint32_t h = (uint32_t) floor ((trackviews_height() - child_heights) / visible_tracks);
|
||||
double first_y_pos = DBL_MAX;
|
||||
int first_y_pos = std::numeric_limits<int>::max();
|
||||
|
||||
if (h < TimeAxisView::preset_height (HeightSmall)) {
|
||||
ArdourMessageDialog msg (_("There are too many tracks to fit in the current window"));
|
||||
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
void leave_internal ();
|
||||
void mouse_mode_changed ();
|
||||
|
||||
double contents_height() const { return (_height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); }
|
||||
int contents_height() const { return (_height - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); }
|
||||
|
||||
void connect_to_diskstream ();
|
||||
bool pianoroll_window_deleted (GdkEventAny*);
|
||||
|
||||
@@ -531,7 +531,7 @@ MidiStreamView::record_layer_check (std::shared_ptr<ARDOUR::Region> r, samplepos
|
||||
check_record_layers (r, t);
|
||||
}
|
||||
|
||||
double
|
||||
int
|
||||
MidiStreamView::y_position () const
|
||||
{
|
||||
return _trackview.y_position();
|
||||
|
||||
@@ -69,11 +69,11 @@ public:
|
||||
//bool can_change_layer_display() const { return false; } // revert this change for now. Although stacked view is weirdly implemented wrt the "scroomer", it is still necessary to be able to manage layered regions.
|
||||
void redisplay_track ();
|
||||
|
||||
double contents_height() const {
|
||||
return (child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2);
|
||||
int contents_height() const {
|
||||
return child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2;
|
||||
}
|
||||
|
||||
double y_position () const;
|
||||
int y_position () const;
|
||||
|
||||
RegionView* create_region_view (std::shared_ptr<ARDOUR::Region>, bool, bool);
|
||||
|
||||
|
||||
@@ -1483,7 +1483,7 @@ MidiView::display_sysexes()
|
||||
|
||||
const double x = _editing_context.time_to_pixel (_midi_region->source_beats_to_region_time (time.beats()));
|
||||
|
||||
double height = _midi_context.contents_height();
|
||||
int height = _midi_context.contents_height();
|
||||
|
||||
// CAIROCANVAS: no longer passing *i (the sysex event) to the
|
||||
// SysEx canvas object!!!
|
||||
@@ -1513,7 +1513,7 @@ MidiView::update_sysexes ()
|
||||
return;
|
||||
}
|
||||
|
||||
double height = _midi_context.contents_height();
|
||||
int height = _midi_context.contents_height();
|
||||
|
||||
for (SysExes::iterator s = _sys_exes.begin(); s != _sys_exes.end(); ++s) {
|
||||
|
||||
@@ -1844,7 +1844,7 @@ MidiView::clip_capture_update_sustained (Note *ev, double& x0, double& x1, doubl
|
||||
timepos_t note_end (note->end_time());
|
||||
|
||||
x0 = _editing_context.sample_to_pixel (note_start.samples());
|
||||
y0 = 1 + floor(note_to_y(note->note()));
|
||||
y0 = 1 + note_to_y (note->note());
|
||||
|
||||
if (note->length() == Temporal::Beats()) {
|
||||
|
||||
@@ -1873,7 +1873,7 @@ MidiView::clip_capture_update_sustained (Note *ev, double& x0, double& x1, doubl
|
||||
x1 = x0 + std::max (1., _editing_context.duration_to_pixels (note_start.distance (active_note_end.end())));
|
||||
}
|
||||
|
||||
y1 = y0 + std::max (1., floor(note_height()) - 1);
|
||||
y1 = y0 + std::max (1., note_height() - 1.);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1903,7 +1903,7 @@ MidiView::region_update_sustained (Note *ev, double& x0, double& x1, double& y0,
|
||||
const samplepos_t note_start_samples = _midi_region->position().distance ((note_start + session_source_start)).samples();
|
||||
|
||||
x0 = _editing_context.sample_to_pixel (note_start_samples);
|
||||
y0 = 1 + floor(note_to_y(note->note()));
|
||||
y0 = 1 + note_to_y (note->note());
|
||||
|
||||
if (note->length() == Temporal::Beats()) {
|
||||
|
||||
@@ -1954,7 +1954,7 @@ MidiView::update_hit (Hit* ev)
|
||||
}
|
||||
|
||||
const double diamond_size = std::max(1., floor(note_height()) - 2.);
|
||||
const double y = 1.5 + floor(note_to_y(note->note())) + diamond_size * .5;
|
||||
double y = 1.5 + note_to_y (note->note()) + diamond_size * .5;
|
||||
|
||||
if (y <= 0 || y >= height()) {
|
||||
ev->hide();
|
||||
@@ -2090,7 +2090,7 @@ MidiView::add_canvas_patch_change (MidiModel::PatchChangePtr patch)
|
||||
|
||||
timecnt_t off (_midi_region->source_beats_to_region_time (patch->time()), _midi_region->position());
|
||||
const double x = _editing_context.duration_to_pixels (off);
|
||||
double const height = _midi_context.contents_height();
|
||||
int const height = _midi_context.contents_height();
|
||||
|
||||
// CAIROCANVAS: active_channel info removed from PatcChange constructor
|
||||
// so we need to do something more sophisticated to keep its color
|
||||
|
||||
@@ -630,11 +630,11 @@ class MidiView : public virtual sigc::trackable, public LineMerger
|
||||
|
||||
virtual double height() const;
|
||||
|
||||
virtual double contents_height() const { return height() - 2; }
|
||||
inline double note_height() const { return contents_height() / _midi_context.contents_note_range(); }
|
||||
virtual int contents_height() const { return height() - 2; }
|
||||
inline int note_height() const { return contents_height() / _midi_context.contents_note_range(); }
|
||||
|
||||
double note_to_y (uint8_t note) const { return _midi_context.note_to_y (note); }
|
||||
uint8_t y_to_note (double y) const { return _midi_context.y_to_note (y); }
|
||||
int note_to_y (uint8_t note) const { return _midi_context.note_to_y (note); }
|
||||
uint8_t y_to_note (int y) const { return _midi_context.y_to_note (y); }
|
||||
|
||||
void update_patch_changes ();
|
||||
void update_sysexes ();
|
||||
|
||||
@@ -107,9 +107,9 @@ MidiViewBackground::note_range_adjustment_changed()
|
||||
}
|
||||
|
||||
uint8_t
|
||||
MidiViewBackground::y_to_note (double y) const
|
||||
MidiViewBackground::y_to_note (int y) const
|
||||
{
|
||||
int const n = ((contents_height() - y) / contents_height() * (double)contents_note_range())
|
||||
int const n = floor (((contents_height() - (double) y) / contents_height() * (double) contents_note_range()))
|
||||
+ lowest_note();
|
||||
|
||||
if (n < 0) {
|
||||
@@ -286,7 +286,7 @@ MidiViewBackground::apply_note_range (uint8_t lowest, uint8_t highest, bool to_c
|
||||
int const max_note_height = std::max<int> (mnh, mnh * uiscale);
|
||||
int const range = _highest_note - _lowest_note;
|
||||
|
||||
int const available_note_range = floor (contents_height() / max_note_height);
|
||||
int const available_note_range = contents_height() / max_note_height;
|
||||
int additional_notes = available_note_range - range;
|
||||
|
||||
/* distribute additional notes to higher and lower ranges, clamp at 0 and 127 */
|
||||
|
||||
@@ -93,32 +93,34 @@ class MidiViewBackground : public virtual ViewBackground
|
||||
|
||||
void maybe_extend_note_range (uint8_t note_num);
|
||||
|
||||
double note_to_y (uint8_t note) const {
|
||||
return contents_height() - (note + 1 - lowest_note()) * note_height() + 1;
|
||||
int note_height() const {
|
||||
/* Note: this effectively rounds down (truncates) due to integer arithmetic */
|
||||
return contents_height() / contents_note_range();
|
||||
}
|
||||
|
||||
uint8_t y_to_note(double y) const;
|
||||
int note_to_y (uint8_t note) const {
|
||||
/* Note: this effectively rounds down (truncates) due to integer arithmetic */
|
||||
return contents_height() - ((note - lowest_note()) * note_height());
|
||||
}
|
||||
|
||||
uint8_t y_to_note (int y) const;
|
||||
|
||||
uint8_t contents_note_range() const {
|
||||
return highest_note() - lowest_note() + 1;
|
||||
}
|
||||
|
||||
double note_height() const {
|
||||
return contents_height() / (double)contents_note_range();
|
||||
}
|
||||
|
||||
sigc::signal<void> NoteRangeChanged;
|
||||
void apply_note_range (uint8_t lowest, uint8_t highest, bool to_children);
|
||||
void maybe_apply_note_range (uint8_t lowest, uint8_t highest, bool to_children);
|
||||
|
||||
/** @return y position, or -1 if hidden */
|
||||
virtual double y_position () const { return 0.; }
|
||||
virtual int y_position () const { return 0; }
|
||||
|
||||
virtual uint8_t get_preferred_midi_channel () const = 0;
|
||||
virtual void set_note_highlight (bool) = 0;
|
||||
virtual void record_layer_check (std::shared_ptr<ARDOUR::Region>, samplepos_t) = 0;
|
||||
|
||||
virtual void set_size (double w, double h) {}
|
||||
virtual void set_size (int w, int h) {}
|
||||
PBD::Signal<void()> HeightChanged;
|
||||
|
||||
virtual ARDOUR::InstrumentInfo* instrument_info() const = 0;
|
||||
|
||||
@@ -39,15 +39,15 @@ class PianorollMidiBackground : public MidiViewBackground
|
||||
PianorollMidiBackground (ArdourCanvas::Item* parent, Pianoroll&);
|
||||
~PianorollMidiBackground ();
|
||||
|
||||
double height() const;
|
||||
double width() const;
|
||||
double contents_height() const;
|
||||
int height() const;
|
||||
int width() const;
|
||||
int contents_height() const;
|
||||
|
||||
uint8_t get_preferred_midi_channel () const;
|
||||
void set_note_highlight (bool);
|
||||
void record_layer_check (std::shared_ptr<ARDOUR::Region>, samplepos_t);
|
||||
|
||||
void set_size (double w, double h);
|
||||
void set_size (int w, int h);
|
||||
void set_view (MidiView*);
|
||||
|
||||
ARDOUR::InstrumentInfo* instrument_info() const;
|
||||
@@ -55,8 +55,8 @@ class PianorollMidiBackground : public MidiViewBackground
|
||||
protected:
|
||||
MidiView* view;
|
||||
Pianoroll& pianoroll;
|
||||
double _width;
|
||||
double _height;
|
||||
int _width;
|
||||
int _height;
|
||||
|
||||
void apply_note_range_to_children();
|
||||
};
|
||||
|
||||
@@ -316,7 +316,7 @@ TimeAxisView::hide ()
|
||||
* @return height of this TimeAxisView.
|
||||
*/
|
||||
guint32
|
||||
TimeAxisView::show_at (double y, int& nth, VBox *parent)
|
||||
TimeAxisView::show_at (int y, int& nth, VBox *parent)
|
||||
{
|
||||
if (control_parent) {
|
||||
control_parent->reorder_child (TOP_LEVEL_WIDGET, nth);
|
||||
|
||||
@@ -124,7 +124,7 @@ public:
|
||||
uint32_t effective_height () const { return _effective_height; }
|
||||
|
||||
/** @return y position, or -1 if hidden */
|
||||
double y_position () const { return _y_position; }
|
||||
int y_position () const { return _y_position; }
|
||||
|
||||
/** @return our Editor */
|
||||
PublicEditor& editor () const { return _editor; }
|
||||
@@ -133,7 +133,7 @@ public:
|
||||
|
||||
void idle_resize (int32_t);
|
||||
|
||||
virtual guint32 show_at (double y, int& nth, Gtk::VBox *parent);
|
||||
virtual guint32 show_at (int y, int& nth, Gtk::VBox *parent);
|
||||
virtual void hide ();
|
||||
|
||||
bool touched (double top, double bot);
|
||||
@@ -260,7 +260,7 @@ protected:
|
||||
Gtk::Menu* _size_menu;
|
||||
ArdourCanvas::Line* _canvas_separator;
|
||||
ArdourCanvas::Container* _canvas_display;
|
||||
double _y_position;
|
||||
int _y_position;
|
||||
PublicEditor& _editor;
|
||||
|
||||
virtual bool can_edit_name() const;
|
||||
|
||||
@@ -40,12 +40,12 @@ class ViewBackground : public sigc::trackable
|
||||
ViewBackground ();
|
||||
virtual ~ViewBackground ();
|
||||
|
||||
virtual double height() const { return 0.; }
|
||||
virtual double width() const { return 0.; }
|
||||
virtual double contents_height() const { return 0.; }
|
||||
virtual int height() const { return 0; }
|
||||
virtual int width() const { return 0; }
|
||||
virtual int contents_height() const { return 0; }
|
||||
|
||||
/** @return y position, or -1 if hidden */
|
||||
virtual double y_position () const { return 0.; }
|
||||
virtual int y_position () const { return 0; }
|
||||
|
||||
protected:
|
||||
virtual void update_contents_height () {}
|
||||
|
||||
Reference in New Issue
Block a user