+
+ /** Convert absolute control points to control points relative to bounds
+ * (This basically does the opposite of the Copy constructor)
+ * ie: If this is absolute, the returned Bezier will be relative to the bounds rectangle
+ */
+ Bezier ToRelative(const Rect & bounds) const
+ {
+ // x' <- (x - x0)/w etc
+ // special cases when w or h = 0
+ // (So can't just use the Copy constructor on the inverse of bounds)
+ // Rect inverse = {-bounds.x/bounds.w, -bounds.y/bounds.h, Real(1)/bounds.w, Real(1)/bounds.h};
+ Bezier result;
+ if (bounds.w == 0)
+ {
+ result.x0 = 0;
+ result.x1 = 0;
+ result.x2 = 0;
+ result.x3 = 0;
+ }
+ else
+ {
+ result.x0 = (x0 - bounds.x)/bounds.w;
+ result.x1 = (x1 - bounds.x)/bounds.w;
+ result.x2 = (x2 - bounds.x)/bounds.w;
+ result.x3 = (x3 - bounds.x)/bounds.w;
+ }