factor out viewport to display scaling functions
[mussa.git] / alg / glseqbrowser.cpp
index c3f5cb19a8f4199e7debd2892fd40615d63c1465..df9462618b119f56c704a234a059d184ef2c8a4a 100644 (file)
@@ -144,10 +144,8 @@ void GlSeqBrowser::processSelection(GLuint hits, GLuint buffer[], GLuint bufsize
 
 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
@@ -156,8 +154,8 @@ void GlSeqBrowser::selectRegion(int top, int left, int bottom, int right)
     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 
@@ -185,6 +183,13 @@ void GlSeqBrowser::selectRegion(int top, int left, int bottom, int right)
   processSelection(hits, selectBuf, select_buf_size, selectedRegion);
 }
 
+void GlSeqBrowser::clearSelection()
+{
+  selected_paths.clear();
+  selected_tracks.clear();
+  selectedMode = false;  
+}
+
 float GlSeqBrowser::border() const
 {
   return border_width;
@@ -354,11 +359,11 @@ void GlSeqBrowser::push_sequence(GlSequence gs)
 
 void GlSeqBrowser::push_sequence(GlSequenceRef gs)
 {
-  ColorRef default_color(new Color(0.0, 0.8, 0.0));
+  ColorRef default_color(GlSequence::default_gene_color());
   GlSequenceRef new_gs(new GlSequence(gs));
   new_gs->update_annotation_draw_function("gene", draw_narrow_track, default_color);
   // mark where the sequence is
-  new_gs->add_annotations_for_defined_sequence(draw_track);
+  new_gs->add_annotations_for_defined_sequence(draw_summarized_track);
   
   clear_links();
   track_container.push_back(new_gs);