Fix some 32-bit int overflows at high zoom with long audio

Originally committed to SVN as r6290.
This commit is contained in:
Thomas Goyne 2012-01-13 20:59:35 +00:00
parent 789f25aff2
commit 37cb9d0548

View file

@ -134,9 +134,9 @@ class AudioDisplayScrollbar : public AudioDisplayInteractionObject {
// Recalculate thumb bounds from position and length data // Recalculate thumb bounds from position and length data
void RecalculateThumb() void RecalculateThumb()
{ {
thumb.width = std::max(min_width, bounds.width * page_length / data_length); thumb.width = std::max<int>(min_width, (int64_t)bounds.width * page_length / data_length);
thumb.height = height; thumb.height = height;
thumb.x = bounds.width * position / data_length; thumb.x = int((int64_t)bounds.width * position / data_length);
thumb.y = bounds.y; thumb.y = bounds.y;
} }
@ -209,7 +209,7 @@ public:
const int data_length_less_page = data_length - page_length; const int data_length_less_page = data_length - page_length;
const int shaft_length_less_thumb = bounds.width - thumb.width; const int shaft_length_less_thumb = bounds.width - thumb.width;
display->ScrollPixelToLeft(data_length_less_page * thumb_left / shaft_length_less_thumb); display->ScrollPixelToLeft((int64_t)data_length_less_page * thumb_left / shaft_length_less_thumb);
dragging = true; dragging = true;
} }
@ -232,9 +232,9 @@ public:
if (sel_length > 0 && sel_start >= 0) if (sel_length > 0 && sel_start >= 0)
{ {
wxRect r; wxRect r;
r.x = sel_start * bounds.width / data_length; r.x = int((int64_t)sel_start * bounds.width / data_length);
r.y = bounds.y; r.y = bounds.y;
r.width = sel_length * bounds.width / data_length; r.width = int((int64_t)sel_length * bounds.width / data_length);
r.height = bounds.height; r.height = bounds.height;
dc.SetPen(wxPen(colours.Selection())); dc.SetPen(wxPen(colours.Selection()));