WhatsThis update
[mussa.git] / alg / glsequence.hpp
index b9a84f91ada055933b33aabdee803f12bf74c735..ab96239374e08f3b9a4263f0e0c622112d152a56 100644 (file)
@@ -1,10 +1,18 @@
 #ifndef _GL_SEQUENCE_H_
 #define _GL_SEQUENCE_H_
 
+#include <boost/shared_ptr.hpp>
+
 #include "alg/annotation_colors.hpp"
 #include "alg/sequence.hpp"
 #include "alg/color.hpp"
-#include <gl.h>
+// isn't it lovely how the header file can live in different places?
+#ifdef __APPLE__
+#include <OpenGL/gl.h>
+#else
+#include <GL/gl.h>
+#endif
+
 //! Manage rendering a mussa sequence track
 /*! The idea is this will keep track of the location of where the sequence
  *  is being rendered, and handle displaying annotations on that track
@@ -12,7 +20,8 @@
 class GlSequence
 {
 public: 
-  GlSequence(const Sequence & s, AnnotationColors &cm);
+  GlSequence(boost::shared_ptr<Sequence> s, 
+             boost::shared_ptr<AnnotationColors> cm);
   GlSequence(const GlSequence & s);
   GlSequence &operator=(const GlSequence &s);
 
@@ -21,12 +30,12 @@ public:
    */
   void draw(GLfloat left, GLfloat right) const;
 
-  const Sequence& sequence() const;
+  boost::shared_ptr<Sequence> sequence();
   //! set our starting x (horizontal) coordinate
   void setX(GLfloat);
   //! get our starting x (horizontal) coordinate
   GLfloat x() const;
-  //! get our right (horizontal) coordinate (length-x)
+  //! get our right (horizontal) coordinate (size-x)
   GLfloat right() const;
   //! set our current y (vertical) position
   void setY(GLfloat);
@@ -35,14 +44,13 @@ public:
   //! how thick (high) the track we're drawing is
   GLfloat height() const;
   //! how long is our sequence track? (computed from the sequence)
-  GLfloat length() const;
+  GLfloat size() const;
  
   //! return the left (lowest) base index that is fully visible
-  Sequence::size_type GlSequence::leftbase(GLfloat left) const;
+  Sequence::size_type leftbase(GLfloat left) const;
   //! return one past rightmost (highest ) base index that is fully visible
-  /*! done mostly so all the iterator logic continues to work correctly.
-   */
-  Sequence::size_type GlSequence::rightbase(GLfloat right) const;
+  //! done mostly so all the iterator logic continues to work correctly.
+  Sequence::size_type rightbase(GLfloat right) const;
 
   //! return iterator to the start of the stored sequence
   Sequence::const_iterator sequence_begin() const;
@@ -78,12 +86,12 @@ public:
   friend bool operator==(const GlSequence &left, const GlSequence &right);
 
 protected:
-  const Sequence& seq;
+  boost::shared_ptr<Sequence> seq;
   GLfloat seq_x;
   GLfloat seq_y;
   GLfloat seq_z;
   GLfloat seq_height;
-  AnnotationColors& color_mapper;
+  boost::shared_ptr<AnnotationColors> color_mapper;
   Color drawColor;
   const GLfloat char_pix_per_world_unit;