------------------------------------------------------------------------------
MC logo
Text Canvas Class
[^] Code Examples
------------------------------------------------------------------------------
<<Ugly Shapes canvas.h Text Canvas Implementation>>
#include <iostream>

using namespace std;

//
// Simple text picture drawing class.
//

#ifndef _CANVAS_H_
#define _CANVAS_H_

// This describes anything that can be drawn on.
class Drawable
{
    public:
        virtual void set(int x, int y) = 0;
        virtual void print(ostream &out) = 0;
        void line(int startx, int starty, int endx, int endy);
};

// This allocates the actual space for the Drawable.
class Canvas: public Drawable
{
    protected:
        int width, height;              // Dimensions.
        char *space;                    // Allocated space.

    public:
        Canvas(int x, int y);
        ~Canvas() { delete [] space; }
        virtual void set(int x, int y);
        virtual void print(ostream &out);
};

// This is a "Drawable" which is relative to some real Drawable.
class OffsetDrawable: public Drawable 
{
    protected:
        Drawable &base;                 // Underlying Drawable.
        int offx, offy;                 // Ofset relative thereto.
    public:
        OffsetDrawable(Drawable &c, int ox = 0, int oy = 0): base(c)
        {
                offx = ox;
                offy = oy;
        }
        virtual void set(int x, int y) { base.set(x + offx, y + offy); }
        virtual void print(ostream &out) { base.print(out); }
        void translate(int x, int y) { offx += x; offy += y; }
};

#endif
<<Ugly Shapes Text Canvas Implementation>>