1dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 4dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This library is free software; you can redistribute it and/or 5dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * modify it under the terms of the GNU Library General Public 6dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * License as published by the Free Software Foundation; either 7dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * version 2 of the License, or (at your option) any later version. 8dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 9dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * This library is distributed in the hope that it will be useful, 10dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * but WITHOUT ANY WARRANTY; without even the implied warranty of 11dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Library General Public License for more details. 13dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 14dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * You should have received a copy of the GNU Library General Public License 15dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * along with this library; see the file COPYING.LIB. If not, write to 16dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 17dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Boston, MA 02110-1301, USA. 18dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * 19dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block */ 20dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 21dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifndef StepRange_h 22dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#define StepRange_h 23dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 24dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Forward.h> 25dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/Noncopyable.h> 26dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blocknamespace WebCore { 28dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass HTMLInputElement; 30dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 31ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass StepRange { 32ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(StepRange); 33dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool hasStep; 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double step; 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double minimum; 37dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double maximum; // maximum must be >= minimum. 38dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 39dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block explicit StepRange(const HTMLInputElement*); 40dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double clampValue(double value); 41dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double clampValue(const String& stringValue); 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Clamp the middle value according to the step 44dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double defaultValue() 45dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 46dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return clampValue((minimum + maximum) / 2); 47dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 48dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Map value into 0-1 range 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double proportionFromValue(double value) 51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (minimum == maximum) 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return 0; 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return (value - minimum) / (maximum - minimum); 56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Map from 0-1 range to value 59dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double valueFromProportion(double proportion) 60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block { 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return minimum + proportion * (maximum - minimum); 62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 64dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double valueFromElement(HTMLInputElement*, bool* wasClamped = 0); 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 67dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 68dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 69dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif // StepRange_h 70