#ifndef __SHAPE_H__ #define __SHAPE_H__ #include #include #include #include namespace mogltk { typedef enum { LEFT, CENTER, RIGHT } align_t; class fillwalker : public Base { public: fillwalker(); virtual ~fillwalker(); virtual void step(int x, int y); }; class fill : public Base { public: fill(); virtual ~fill(); void walk(fillwalker *); void insert(int, int); int GetMinX() const; int GetMinY() const; int GetMaxX() const; int GetMaxY() const; texture * GetTexture(); texture * Talloc(); Color last; private: class sline : public Base { public: sline(int, fill *); virtual ~sline(); int GetY() const; void insert(int, int); void walk(fillwalker *); private: class point : public Base { public: point(int, sline *); virtual ~point(); int GetX() const; int GetY() const; void walk(fillwalker *); point * look(int); private: int x; point * next; sline * header; }; int y; sline * next; fill * header; sline * look(int); protected: point * pheader; friend class point; }; int minX, minY, maxX, maxY; texture * cached; protected: sline * header; friend class sline; }; class shape : public Base { public: virtual void pixel(int x, int y, ColorP = WHITE); virtual void circle(int x, int y, int r, ColorP = WHITE); virtual void pcircle(int x, int y, int r, ColorP = WHITE); virtual fill * fcircle(int x, int y, int r); virtual void fdraw(fill *, ColorP = WHITE, int sx = 0, int sy = 0); virtual void arc(int x, int y, int r, double a1, double a2, ColorP = DOS_WHITE); virtual void arc(int x, int y, int r, int x1, int y1, int x2, int y2, ColorP = DOS_WHITE); virtual void box(int x1, int y1, int x2, int y2, ColorP = DOS_WHITE); virtual void box3d(int x1, int y1, int x2, int y2, ColorP = DOS_WHITE, ColorP = DOS_HIGH_WHITE, ColorP = DOS_GRAY, int = 2, bool = false); virtual void box(int x1, int y1, int x2, int y2, ColorP, ColorP, ColorP, ColorP); virtual void obox(int x1, int y1, int x2, int y2, ColorP = DOS_WHITE); virtual void obox3d(int x1, int y1, int x2, int y2, ColorP = DOS_HIGH_WHITE, ColorP = DOS_GRAY, bool = false); virtual void obox(int x1, int y1, int x2, int y2, ColorP, ColorP, ColorP, ColorP); virtual void hline(int x1, int x2, int y, ColorP = DOS_WHITE); virtual void hline3d(int x1, int x2, int y, ColorP = DOS_HIGH_WHITE, ColorP = DOS_GRAY, bool = false); virtual void hline(int x1, int x2, int y, ColorP, ColorP); virtual void vline(int x, int y1, int y2, ColorP = DOS_WHITE); virtual void vline3d(int x, int y1, int y2, ColorP = DOS_HIGH_WHITE, ColorP = DOS_GRAY, bool = false); virtual void vline(int x, int y1, int y2, ColorP, ColorP); virtual void tbox(texture *, int x1, int y1, int x2, int y2, int tx = 0, int ty = 0, double = 1.0, ColorP = WHITE); virtual void tbox(texture *, int x1, int y1, int x2, int y2, int tx1, int ty1, int tx2, int ty2, ColorP = WHITE); virtual void tbox(texture *, int x1, int y1, int x2, int y2, ColorP, ColorP, ColorP, ColorP, int tx = 0, int ty = 0, double = 1.0); virtual void tbox(texture *, int x1, int y1, int x2, int y2, ColorP, ColorP, ColorP, ColorP, int tx1, int ty1, int tx2, int ty2); virtual void window(int x1, int y1, int x2, int y2, const String & title = "", ColorP titlecolor = DOS_HIGH_WHITE, ColorP titlebackcolor = DOS_MAGENTA, ColorP front = DOS_WHITE, ColorP shade1 = DOS_HIGH_WHITE, ColorP shade2 = DOS_GRAY); virtual void text(int x, int y, const String &, ColorP textcolor = DOS_HIGH_WHITE, align_t align = LEFT); virtual void text3d(int x, int y, const String &, ColorP textcolor = DOS_BLACK, ColorP shade1 = DOS_HIGH_WHITE, ColorP shade2 = DOS_GRAY, align_t align = LEFT, bool bevel = false); virtual void button(int x1, int y1, int x2, int y2, const String &, bool bevel = false, ColorP front = DOS_WHITE, ColorP shade1 = DOS_HIGH_WHITE, ColorP shade2 = DOS_GRAY, ColorP round = DOS_BLACK, ColorP textcolor = DOS_BLACK, ColorP tshade1 = DOS_HIGH_WHITE, ColorP tshade2 = DOS_GRAY); private: virtual bool Enter(); virtual void Leave(bool); }; class filldrawer : public fillwalker { public: filldrawer(fill *, texture *, ColorP = DOS_WHITE); virtual ~filldrawer(); virtual void step(int x, int y); private: fill * f; texture * t; ColorP c; int oldx, oldy; }; }; #endif