34 #ifndef LIBMWAW_INTERNAL_H
35 #define LIBMWAW_INTERNAL_H
48 #define M_PI 3.14159265358979323846
51 #include <librevenge-stream/librevenge-stream.h>
52 #include <librevenge/librevenge.h>
54 #if defined(_MSC_VER) || defined(__DJGPP__)
56 typedef signed char int8_t;
57 typedef unsigned char uint8_t;
58 typedef signed short int16_t;
59 typedef unsigned short uint16_t;
60 typedef signed int int32_t;
61 typedef unsigned int uint32_t;
62 typedef unsigned __int64 uint64_t;
63 typedef __int64 int64_t;
73 # ifdef HAVE_INTTYPES_H
74 # include <inttypes.h>
81 # include <inttypes.h>
90 # define gmtime_r(tp,tmp) (gmtime(tp)?(*(tmp)=*gmtime(tp),(tmp)):0)
91 # define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0)
95 #if defined(SHAREDPTR_TR1)
97 using std::tr1::shared_ptr;
98 #elif defined(SHAREDPTR_STD)
100 using std::shared_ptr;
102 #include <boost/shared_ptr.hpp>
103 using boost::shared_ptr;
112 #if defined(__clang__) || defined(__GNUC__)
113 # define LIBMWAW_ATTRIBUTE_PRINTF(fmt, arg) __attribute__((__format__(__printf__, fmt, arg)))
115 # define LIBMWAW_ATTRIBUTE_PRINTF(fmt, arg)
124 #define MWAW_DEBUG_MSG(M) libmwaw::printDebugMsg M
126 #define MWAW_DEBUG_MSG(M)
156 uint8_t
readU8(librevenge::RVNGInputStream *input);
158 void appendUnicode(uint32_t val, librevenge::RVNGString &buffer);
182 MWAWColor(
unsigned char r,
unsigned char g,
unsigned char b,
unsigned char a=255) :
183 m_value(uint32_t((a<<24)+(r<<16)+(g<<8)+b))
195 double w=1.-double(k)/255.;
197 ((
unsigned char)(255 * (1-
double(c)/255) * w),
198 (
unsigned char)(255 * (1-
double(m)/255) * w),
199 (
unsigned char)(255 * (1-
double(y)/255) * w)
205 double c=(1-((L>=128) ? (2*
double(L)-255) : (255-2*
double(L)))/255)*
207 double tmp=std::fmod((
double(H)*6/255),2)-1;
208 double x=c*(1-(tmp>0 ? tmp : -tmp));
209 unsigned char C=(
unsigned char)(255*c);
210 unsigned char M=(
unsigned char)(
double(L)-255*c/2);
211 unsigned char X=(
unsigned char)(255*x);
212 if (H<=42)
return MWAWColor((
unsigned char)(M+C),(
unsigned char)(M+X),(
unsigned char)M);
213 if (H<=85)
return MWAWColor((
unsigned char)(M+X),(
unsigned char)(M+C),(
unsigned char)M);
214 if (H<=127)
return MWAWColor((
unsigned char)M,(
unsigned char)(M+C),(
unsigned char)(M+X));
215 if (H<=170)
return MWAWColor((
unsigned char)M,(
unsigned char)(M+X),(
unsigned char)(M+C));
216 if (H<=212)
return MWAWColor((
unsigned char)(M+X),(
unsigned char)M,(
unsigned char)(M+C));
217 return MWAWColor((
unsigned char)(M+C),(
unsigned char)(M),(
unsigned char)(M+X));
241 return (
unsigned char)((
m_value>>24)&0xFF);
246 return (
unsigned char)(
m_value&0xFF);
251 return (
unsigned char)((
m_value>>16)&0xFF);
256 return (
unsigned char)((
m_value>>8)&0xFF);
266 return (
m_value&0xFFFFFF)==0xFFFFFF;
301 std::string
str()
const;
319 bool addTo(librevenge::RVNGPropertyList &propList, std::string which=
"")
const;
372 bool addTo(librevenge::RVNGPropertyList &propList)
const;
374 librevenge::RVNGString
getString()
const;
393 bool addTo(librevenge::RVNGPropertyList &propList)
const;
428 add(binaryData, type);
444 void add(librevenge::RVNGBinaryData
const &binaryData, std::string type=
"image/pict")
454 bool addTo(librevenge::RVNGPropertyList &propList)
const;
621 return (c==0) ?
m_x :
m_y;
627 return (c==0) ?
m_x :
m_y;
708 bool operator<(MWAWVec2<T>
const &p)
const
715 if (
m_x < p.
m_x)
return -1;
716 if (
m_x > p.
m_x)
return 1;
717 if (
m_y < p.
m_y)
return -1;
718 if (
m_y > p.
m_y)
return 1;
724 if (
m_y < p.
m_y)
return -1;
725 if (
m_y > p.
m_y)
return 1;
726 if (
m_x < p.
m_x)
return -1;
727 if (
m_x > p.
m_x)
return 1;
732 friend std::ostream &operator<< (std::ostream &o, MWAWVec2<T>
const &f)
734 o << f.m_x <<
"x" << f.m_y;
745 return s1.
cmp(s2) < 0;
751 typedef std::map<MWAWVec2<T>, T,
struct PosSizeLtX>
MapX;
760 return s1.
cmpY(s2) < 0;
766 typedef std::map<MWAWVec2<T>, T,
struct PosSizeLtY>
MapY;
796 for (
int c = 0; c < 3; c++)
m_val[c] = T(p[c]);
828 void set(T xx, T yy, T zz)
851 void add(T dx, T dy, T dz)
874 for (
int c = 0; c < 3; c++)
m_val[c] = T(
m_val[c]*scale);
909 bool operator<(MWAWVec3<T>
const &p)
const
916 for (
int c = 0; c < 3; c++) {
918 if (diff)
return (diff < 0) ? -1 : 1;
924 friend std::ostream &operator<< (std::ostream &o, MWAWVec3<T>
const &f)
926 o << f.m_val[0] <<
"x" << f.m_val[1] <<
"x" << f.m_val[2];
937 return s1.
cmp(s2) < 0;
943 typedef std::map<MWAWVec3<T>, T,
struct PosSizeLt>
Map;
972 for (
int c=0; c < 2; c++)
m_pt[c] = p[c];
1045 m_pt[0] = centerPt - 0.5*sz;
1046 m_pt[1] = centerPt + (sz - 0.5*sz);
1094 bool operator<(MWAWBox2<T>
const &p)
const
1102 int diff =
m_pt[0].cmpY(p.
m_pt[0]);
1103 if (diff)
return diff;
1105 if (diff)
return diff;
1110 friend std::ostream &operator<< (std::ostream &o, MWAWBox2<T>
const &f)
1112 o <<
"(" << f.m_pt[0] <<
"<->" << f.m_pt[1] <<
")";
1123 return s1.
cmp(s2) < 0;
1129 typedef std::map<MWAWBox2<T>, T,
struct PosSizeLt>
Map;
1158 for (
int c=0; c < 2; c++)
m_pt[c] = p[c];
1231 m_pt[0] = centerPt - 0.5*sz;
1232 m_pt[1] = centerPt + (sz - 0.5*sz);
1260 bool operator<(MWAWBox3<T>
const &p)
const
1269 if (diff)
return diff;
1271 if (diff)
return diff;
1276 friend std::ostream &operator<< (std::ostream &o, MWAWBox3<T>
const &f)
1278 o <<
"(" << f.m_pt[0] <<
"<->" << f.m_pt[1] <<
")";
1289 return s1.
cmp(s2) < 0;