X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fipdf.h;h=5a4f35c3b9d8bc5f4014385caa8c3fa365e87e0e;hb=cfe7da763b5d8ef4252ddb94558abb080bbd893d;hp=4041bca776ef5145bab4f161fd713b94ceedf6e5;hpb=fd8f00531c67a2a187213ca6830114ff84a8ec4f;p=ipdf%2Fcode.git diff --git a/src/ipdf.h b/src/ipdf.h index 4041bca..5a4f35c 100644 --- a/src/ipdf.h +++ b/src/ipdf.h @@ -2,33 +2,60 @@ #define _IPDF_H #include "common.h" +#include "real.h" + +#define C_RED Colour(1,0,0,1) +#define C_GREEN Colour(0,1,0,1) +#define C_BLUE Colour(0,0,1,1) namespace IPDF { - typedef float Real; - - inline float RealToFloat(Real r) {return r;} + inline Real Random(Real max=1, Real min=0) { - return min + (max-min) * ((Real)(rand() % (int)1e6) / 1e6); + return min + (max-min) * (Real(rand() % (int)1e6) / Real(1e6)); } typedef unsigned ObjectID; - typedef enum {RECT_FILLED, RECT_OUTLINE} ObjectType; + /** Type of object + * NOTE: Extra entry in the enum so we can use this as an array index + */ + typedef enum + { + RECT_FILLED = 0, + RECT_OUTLINE, + CIRCLE_FILLED, + NUMBER_OF_OBJECT_TYPES + } ObjectType; + + enum DocChunkTypes + { + CT_NUMOBJS, + CT_OBJTYPES, + CT_OBJBOUNDS, + }; struct Rect { Real x; Real y; Real w; Real h; Rect() = default; // Needed so we can fread/fwrite this struct Rect(Real _x, Real _y, Real _w, Real _h) : x(_x), y(_y), w(_w), h(_h) {} - std::string Str() + std::string Str() const { std::stringstream s; - s << "{" << x << ", " << y << ", " << w << ", " << h << "}"; + // float conversion needed because it is fucking impossible to get ostreams working with template classes + s << "{" << Float(x) << ", " << Float(y) << ", " << Float(w) << ", " << Float(h) << "}"; return s.str(); } }; + struct Colour + { + float r; float g; float b; float a; + Colour() = default; + Colour(float _r, float _g, float _b, float _a) : r(_r), g(_g), b(_b), a(_a) {} + }; + struct Objects { std::vector types;