X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fdocument.cpp;h=cb52986cf215be67dea47a5d47ef1010bb74cb7d;hp=d4d8eacf53f5d14b85decd8e6632b37db47158e1;hb=b8c16a61fc9df50a0254aeeb8875421836194981;hpb=7e00a47f18e0ccdb0c7255f30bc7820cabb3206a diff --git a/src/document.cpp b/src/document.cpp index d4d8eac..cb52986 100644 --- a/src/document.cpp +++ b/src/document.cpp @@ -95,7 +95,6 @@ void Document::GenBaseQuadtree() m_quadtree.nodes.push_back(QuadTreeNode{QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QUADTREE_EMPTY, QTC_UNKNOWN, 0, ObjectCount()}); m_quadtree.root_id = 0; GenQuadChild(0, QTC_TOP_LEFT); - GenQuadParent(0, QTC_BOTTOM_RIGHT); } QuadTreeIndex Document::GenQuadChild(QuadTreeIndex parent, QuadTreeNodeChildren type) @@ -284,8 +283,8 @@ void Document::LoadSVG(const string & filename, const Rect & bounds) // Combine all SVG tags into one thing because lazy for (xml_node svg : doc_xml.children("svg")) { - Real width = svg.attribute("width").as_float() * bounds.w; - Real height = svg.attribute("width").as_float() * bounds.h; + Real width = Real(svg.attribute("width").as_float()) * bounds.w; + Real height = Real(svg.attribute("width").as_float()) * bounds.h; // Rectangles @@ -310,8 +309,8 @@ void Document::LoadSVG(const string & filename, const Rect & bounds) Real x = (cx - r)/width + bounds.x; Real y = (cy - r)/height + bounds.y; - Real w = 2*r/width; - Real h = 2*r/height; + Real w = Real(2)*r/width; + Real h = Real(2)*r/height; Rect rect(x,y,w,h); Add(CIRCLE_FILLED, rect,0); @@ -396,9 +395,9 @@ void Document::AddPathFromString(const string & d, const Rect & bounds) if (command == "m" || command == "M") { Debug("Construct moveto command"); - Real dx = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.w; + Real dx = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.w; assert(GetToken(d,token,i) == ","); - Real dy = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.h; + Real dy = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.h; x[0] = (relative) ? x[0] + dx : dx; y[0] = (relative) ? y[0] + dy : dy; @@ -411,25 +410,25 @@ void Document::AddPathFromString(const string & d, const Rect & bounds) else if (command == "c" || command == "C" || command == "q" || command == "Q") { Debug("Construct curveto command"); - Real dx = strtod(GetToken(d,token,i).c_str(),NULL)/bounds.w; + Real dx = Real(strtod(GetToken(d,token,i).c_str(),NULL))/bounds.w; assert(GetToken(d,token,i) == ","); - Real dy = strtod(GetToken(d,token,i).c_str(),NULL)/bounds.h; + Real dy = Real(strtod(GetToken(d,token,i).c_str(),NULL))/bounds.h; x[1] = (relative) ? x[0] + dx : dx; y[1] = (relative) ? y[0] + dy : dy; - dx = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.w; + dx = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.w; assert(GetToken(d,token,i) == ","); - dy = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.h; + dy = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.h; x[2] = (relative) ? x[0] + dx : dx; y[2] = (relative) ? y[0] + dy : dy; if (command != "q" && command != "Q") { - dx = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.w; + dx = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.w; assert(GetToken(d,token,i) == ","); - dy = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.h; + dy = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.h; x[3] = (relative) ? x[0] + dx : dx; y[3] = (relative) ? y[0] + dy : dy; } @@ -437,6 +436,11 @@ void Document::AddPathFromString(const string & d, const Rect & bounds) { x[3] = x[2]; y[3] = y[2]; + Real old_x1(x[1]), old_y1(y[1]); + x[1] = x[0] + Real(2) * (old_x1 - x[0])/ Real(3); + y[1] = y[0] + Real(2) * (old_y1 - y[0])/ Real(3); + x[2] = x[3] + Real(2) * (old_x1 - x[3])/ Real(3); + y[2] = y[3] + Real(2) * (old_y1 - y[3])/ Real(3); } unsigned index = AddBezierData(Bezier(x[0],y[0],x[1],y[1],x[2],y[2],x[3],y[3])); @@ -454,12 +458,12 @@ void Document::AddPathFromString(const string & d, const Rect & bounds) { Debug("Construct lineto command"); - Real dx = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.w; + Real dx = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.w; assert(GetToken(d,token,i) == ","); - Real dy = strtod(GetToken(d,token,i).c_str(),NULL) / bounds.h; + Real dy = Real(strtod(GetToken(d,token,i).c_str(),NULL)) / bounds.h; - x[1] = (relative) ? x0 + dx : dx; - y[1] = (relative) ? y0 + dy : dy; + x[1] = (relative) ? x[0] + dx : dx; + y[1] = (relative) ? y[0] + dy : dy; x[2] = x[1]; y[2] = y[1];