File indexing completed on 2024-04-28 04:18:52

0001 // vim: set tabstop=4 shiftwidth=4 expandtab:
0002 /*
0003 Gwenview: an image viewer
0004 Copyright 2008 Aurélien Gâteau <agateau@kde.org>
0005 
0006 This program is free software; you can redistribute it and/or
0007 modify it under the terms of the GNU General Public License
0008 as published by the Free Software Foundation; either version 2
0009 of the License, or (at your option) any later version.
0010 
0011 This program is distributed in the hope that it will be useful,
0012 but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 GNU General Public License for more details.
0015 
0016 You should have received a copy of the GNU General Public License
0017 along with this program; if not, write to the Free Software
0018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
0019 
0020 */
0021 #ifndef RAMP_H
0022 #define RAMP_H
0023 
0024 namespace Gwenview
0025 {
0026 /**
0027  * This class maps values on a linear ramp.
0028  * It's useful to do mappings like this:
0029  *
0030  * x | -oo       x1               x2     +oo
0031  * --+--------------------------------------
0032  * y |  y1       y1 (linear ramp) y2      y2
0033  *
0034  * Note that y1 can be greater than y2 if necessary
0035  */
0036 class Ramp
0037 {
0038 public:
0039     Ramp(qreal x1, qreal x2, qreal y1, qreal y2)
0040         : mX1(x1)
0041         , mX2(x2)
0042         , mY1(y1)
0043         , mY2(y2)
0044     {
0045         mK = (y2 - y1) / (x2 - x1);
0046     }
0047 
0048     qreal operator()(qreal x) const
0049     {
0050         if (x < mX1) {
0051             return mY1;
0052         }
0053         if (x > mX2) {
0054             return mY2;
0055         }
0056         return mY1 + (x - mX1) * mK;
0057     }
0058 
0059 private:
0060     qreal mX1, mX2, mY1, mY2, mK;
0061 };
0062 
0063 } // namespace
0064 
0065 #endif /* RAMP_H */