From 986a589d45841832e3655892f65b773193e277af Mon Sep 17 00:00:00 2001 From: pixel Date: Fri, 4 Apr 2003 08:04:38 +0000 Subject: Toying with shapes --- lib/glshape.cc | 30 ++++++++++++++++++++++++++++++ lib/shape.cc | 31 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/glshape.cc b/lib/glshape.cc index 0fdaef0..5572e4d 100644 --- a/lib/glshape.cc +++ b/lib/glshape.cc @@ -154,3 +154,33 @@ void mogltk::glshape::Leave(bool was2D) { if (!was2D) mogltk::engine::glbase_o->Leave2DMode(); } + +class filldrawer : public mogltk::fillwalker { + public: + filldrawer(mogltk::shape * _s, mogltk::ColorP _c = DOS_WHITE) : s(_s), c(_c), oldx(-1), oldy(-1) { } + virtual ~filldrawer() { } + virtual void step(int x, int y) { + if (oldy != y) + oldx = -1; + if (oldx == -1) { + oldx = x; + } else { + s->hline(oldx, x, y, c); + oldx = -1; + } + oldy = y; + } + private: + mogltk::shape * s; + mogltk::ColorP c; + int oldx, oldy; +}; + +void mogltk::glshape::fdraw(fill * f, ColorP c) { + ENTER; + filldrawer * w = new filldrawer(this, c); + f->walk(w); + delete w; + LEAVE; +} + \ No newline at end of file diff --git a/lib/shape.cc b/lib/shape.cc index 9ba4f0c..54e552b 100644 --- a/lib/shape.cc +++ b/lib/shape.cc @@ -1,4 +1,5 @@ #include +#include #include #include "engine.h" #include "base.h" @@ -18,7 +19,7 @@ mogltk::fillwalker::~fillwalker() { void mogltk::fillwalker::step(int x, int y) { } -mogltk::fill::fill() : header(0) { +mogltk::fill::fill() : minX(INT_MAX), minY(INT_MAX), maxX(INT_MIN), maxY(INT_MIN), header(0) { } mogltk::fill::~fill() { @@ -35,6 +36,34 @@ void mogltk::fill::insert(int x, int y) { new sline(y, this); } header->insert(x, y); + + if (x > maxX) + maxX = x; + + if (x < minX) + minX = x; + + if (y > maxY) + maxY = y; + + if (y < minY) + minY = y; +} + +int mogltk::fill::GetMaxX() { + return maxX; +} + +int mogltk::fill::GetMaxY() { + return maxY; +} + +int mogltk::fill::GetMinX() { + return minX; +} + +int mogltk::fill::GetMinY() { + return minY; } mogltk::fill::sline::sline(int _y, fill * _header) : y(_y), header(_header), pheader(0) { -- cgit v1.2.3