X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fipdf.h;h=20e47c026675ba138574d3097de5c5327c3cd66e;hp=79d25a894dddb086f5bfe3010ae97db188fc3bb1;hb=326f04a375ce3120f7e8957e3d7cd5f296f513e3;hpb=5e19040b00e135ead52e535165e079ee72059727 diff --git a/src/ipdf.h b/src/ipdf.h index 79d25a8..20e47c0 100644 --- a/src/ipdf.h +++ b/src/ipdf.h @@ -3,56 +3,65 @@ #include "common.h" #include "real.h" +#include "bezier.h" +#include "rect.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) +#include "path.h" namespace IPDF { inline Real Random(Real max=1, Real min=0) { - return min + (max-min) * (Real(rand() % (int)1e6) / Real(1e6)); + return min + (max-min) * (Real(rand() % (int)100) / Real(100)); } 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 + { + CIRCLE_FILLED = 0, + RECT_FILLED, + RECT_OUTLINE, + BEZIER, + PATH, + NUMBER_OF_OBJECT_TYPES + } ObjectType; enum DocChunkTypes { CT_NUMOBJS, CT_OBJTYPES, - CT_OBJBOUNDS + CT_OBJBOUNDS, + CT_OBJINDICES, + CT_OBJBEZIERS, + CT_OBJPATHS }; - struct Rect + struct Objects { - 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() const + /** Used by all objects **/ + std::vector types; // types of objects + std::vector bounds; // rectangle bounds of objects + /** Used by BEZIER and GROUP to identify data position in relevant vector **/ + std::vector data_indices; + /** Used by BEZIER only **/ + std::vector beziers; // bezier curves - look up by data_indices + /** Used by PATH only **/ + std::vector paths; + + void Clear() { - std::stringstream s; - // 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(); + types.clear(); + bounds.clear(); + data_indices.clear(); + beziers.clear(); + paths.clear(); } }; - 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; - std::vector bounds; - }; - class View; }