diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-11-02 18:28:04 +0100 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@cib.de> | 2017-11-18 13:07:43 +0100 |
commit | 6675e6eaf999de94d49d7644d5877537fda83239 (patch) | |
tree | 588b33264a822271d2840d7d9c39dc31212f642e /basegfx | |
parent | 995c75de956436606e4f313d60257285955586d8 (diff) |
RotateFlyFrame3: Initial support added
First steps to get a rotated FlyFrame and content
that only uses layouted sizes/positions and does not
change the model data (except rotation). This works
with persistence, after reload the rotation can be
resetted with going back to the original FrameSize.
Lot of stuff not yet working, experimental state.
Change-Id: Ie29d501fe2e618a1cb4457d600ce97575ed372d0
Diffstat (limited to 'basegfx')
-rw-r--r-- | basegfx/source/numeric/ftools.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/basegfx/source/numeric/ftools.cxx b/basegfx/source/numeric/ftools.cxx index a67bc56bd74e..994bd29e30eb 100644 --- a/basegfx/source/numeric/ftools.cxx +++ b/basegfx/source/numeric/ftools.cxx @@ -44,6 +44,40 @@ namespace basegfx } } } + + double normalizeToRange(double v, const double fRange) + { + if(fTools::lessOrEqual(fRange, 0.0)) + { + // with a zero (or less) range, all normalizes to 0.0 + return 0.0; + } + + const bool bNegative(fTools::less(v, 0.0)); + + if(bNegative) + { + if(fTools::moreOrEqual(v, -fRange)) + { + // in range [-fRange, 0.0[, shift one step + return v + fRange; + } + + // re-calculate + return v - (floor(v/fRange)*fRange); + } + else + { + if(fTools::less(v, fRange)) + { + // already in range [0.0, fRange[, nothing to do + return v; + } + + // re-calculate + return v - (floor(v/fRange)*fRange); + } + } } // end of namespace basegfx /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |