No more pointer arithmetic in GL/use geom shaders
[ipdf/code.git] / src / ipdf.h
1 #ifndef _IPDF_H
2 #define _IPDF_H
3
4 #include "common.h"
5 #include "real.h"
6
7 #define C_RED Colour(1,0,0,1)
8 #define C_GREEN Colour(0,1,0,1)
9 #define C_BLUE Colour(0,0,1,1)
10
11 namespace IPDF
12 {
13
14         inline Real Random(Real max=1, Real min=0)
15         {
16                 return min + (max-min) * (Real(rand() % (int)1e6) / Real(1e6));
17         }
18
19         typedef unsigned ObjectID;
20         typedef enum {RECT_FILLED, RECT_OUTLINE} ObjectType;
21
22         enum DocChunkTypes
23         {
24                 CT_NUMOBJS,
25                 CT_OBJTYPES,
26                 CT_OBJBOUNDS
27         };
28
29         struct Rect
30         {
31                 Real x; Real y; Real w; Real h;
32                 Rect() = default; // Needed so we can fread/fwrite this struct
33                 Rect(Real _x, Real _y, Real _w, Real _h) : x(_x), y(_y), w(_w), h(_h) {}
34                 std::string Str() const
35                 {
36                         std::stringstream s;
37                         // float conversion needed because it is fucking impossible to get ostreams working with template classes
38                         s << "{" << Float(x) << ", " << Float(y) << ", " << Float(w) << ", " << Float(h) << "}";
39                         return s.str();
40                 }
41         };
42
43         struct Colour
44         {
45                 float r; float g; float b; float a;
46                 Colour() = default;
47                 Colour(float _r, float _g, float _b, float _a) : r(_r), g(_g), b(_b), a(_a) {}
48         };
49
50         struct Objects
51         {
52                 std::vector<ObjectType> types;          
53                 std::vector<Rect> bounds;
54         };
55
56         class View;
57 }
58
59
60 #endif //_IPDF_H

UCC git Repository :: git.ucc.asn.au