#include "color.hpp"
+// Nooo!!!! I'm repeating myself.
+// Should all the'se ref typedefs go somewhere else?
+// *sigh* mutters about recursive #includes
+class SeqSpan;
+typedef boost::shared_ptr<SeqSpan> SeqSpanRef;
+
class Drawable;
typedef boost::shared_ptr<Drawable> DrawableRef;
*/
class Drawable {
public:
+ typedef void (*draw_func_ptr)(SeqSpanRef, void *);
+
Drawable() :
- draw_x(0), draw_y(0), draw_z(0), draw_height(0), draw_color(new Color) {}
- Drawable(float x, float y, float z, float h, ColorRef c) :
- draw_x(x), draw_y(y), draw_z(z), draw_height(h), draw_color(c) {}
+ draw_x(0), draw_y(0), draw_z(0), draw_height(0), draw_color(new Color), draw_func(0) {}
+ Drawable(float x, float y, float z, float h, ColorRef c, draw_func_ptr draw=0) :
+ draw_x(x), draw_y(y), draw_z(z), draw_height(h), draw_color(c), draw_func(draw) {}
Drawable(const DrawableRef d) :
draw_x(d->draw_x), draw_y(d->draw_y), draw_z(d->draw_z),
draw_height(d->draw_height),
- draw_color(new Color(d->draw_color))
+ draw_color(new Color(d->draw_color)),
+ draw_func(d->draw_func)
{}
//! set our starting x (horizontal) coordinate
void setColor(ColorRef c) { draw_color = c; }
//! return our draw color
ColorRef color() { return draw_color; }
+
+ void setDrawFunction(draw_func_ptr d) { draw_func = d; }
+ draw_func_ptr drawFunction() const { return draw_func; }
protected:
float draw_x;
float draw_z;
float draw_height;
ColorRef draw_color;
+ draw_func_ptr draw_func;
+
};
#endif /*DRAWABLE_HPP_*/
#include <boost/shared_ptr.hpp>
#include "drawable.hpp"
+#include "seq_span.hpp"
BOOST_AUTO_TEST_CASE( drawable_empty_constructors )
{
BOOST_CHECK_EQUAL(*asp->color(), *grey);
BOOST_CHECK_EQUAL(*bsp->color(), *grey);
BOOST_CHECK_EQUAL(*csp->color(), *black);
+}
+
+void test_draw_func_null(SeqSpanRef r, void *p)
+{
+}
+
+BOOST_AUTO_TEST_CASE( drawable_null_draw_func )
+{
+ ColorRef white(new Color(1.0, 1.0, 1.0));
+ DrawableRef asp(new Drawable(1.0,1.0,1.0,1.0, white, test_draw_func_null));
+
+ BOOST_CHECK_EQUAL(asp->drawFunction(), test_draw_func_null);
+
+ DrawableRef bsp(asp);
+ BOOST_CHECK_EQUAL(bsp->drawFunction(), test_draw_func_null);
+}
+
+void test_draw_func_find_drawable(SeqSpanRef r, void *p)
+{
+ BOOST_REQUIRE(r->drawable());
+ BOOST_REQUIRE_EQUAL(r->drawable()->drawFunction(), test_draw_func_find_drawable);
+}
+
+BOOST_AUTO_TEST_CASE( test_drawable_find_drawable )
+{
+ ColorRef white(new Color(1.0, 1.0, 1.0));
+ DrawableRef drawsp(new Drawable(1.0,1.0,1.0,1.0, white, test_draw_func_find_drawable));
+ SeqSpanRef ssp(new SeqSpan("AAAA"));
+ ssp->setDrawable(drawsp);
+
+ BOOST_CHECK_EQUAL(drawsp->drawFunction(), test_draw_func_find_drawable);
+ ssp->drawable()->drawFunction();
}
\ No newline at end of file