void GlSeqBrowser::selectRegion(int top, int left, int bottom, int right)
{
- GLfloat x_scale = cur_ortho.width()/((float)viewport_size.x);
- GLfloat y_scale = cur_ortho.height()/((float)viewport_size.y);
- GLfloat x_left = cur_ortho.left + (left*x_scale);
- GLfloat x_right = cur_ortho.left + (right * x_scale);
+ GLfloat x_left = viewportXtoWorldX(left);
+ GLfloat x_right = viewportXtoWorldX(right);cur_ortho.left;
if (top > bottom) {
// woah, someone gave us a rectangle with the origin in the lower left
top = temp;
}
// swap the orientation of canvas coordinates
- GLfloat y_top = cur_ortho.top-(bottom*y_scale);
- GLfloat y_bottom = cur_ortho.top - top * y_scale;
+ GLfloat y_top = viewportYtoWorldY(bottom);
+ GLfloat y_bottom = viewportYtoWorldY(top);
selectedRegion = rect<float>(y_top, x_left, y_bottom, x_right);
// hopefully this will make a buffer big enough to receive
int viewportPixelHeight() const;
//! return viewport width in pixels
int viewportPixelWidth() const;
+
+ //! convert x axis from display to world coordinates
+ float viewportXtoWorldX(int x);
+ //! convert y axis from display to world coordinates
+ float viewportYtoWorldY(int y);
//! zoom out far enough to show the full size of the sequence
double zoomOut();
std::list<TrackRegion> selected_tracks;
typedef std::list<TrackRegion>::iterator selected_track_iterator;
};
+
+inline float GlSeqBrowser::viewportXtoWorldX(int x) {
+ GLfloat x_scale = cur_ortho.width()/((float)viewport_size.x);
+ return (cur_ortho.left + (x * x_scale));
+}
+
+inline float GlSeqBrowser::viewportYtoWorldY(int y) {
+ GLfloat y_scale = cur_ortho.height()/((float)viewport_size.y);
+ return cur_ortho.top-(y * y_scale);
+}
+
#endif