summaryrefslogtreecommitdiff
path: root/src/gui/widgets/slider.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-03-04 21:13:28 +0300
committerAndrei Karas <akaras@inbox.ru>2014-03-04 21:13:28 +0300
commit050c957927ccd7da1da135ce4fc51c3e53101ba6 (patch)
treee41b45b7215ba6c05fec6a307de460ea70f9c92c /src/gui/widgets/slider.cpp
parentbc510019c0e0b9cc14f0c580667b384568177f7a (diff)
downloadmv-050c957927ccd7da1da135ce4fc51c3e53101ba6.tar.gz
mv-050c957927ccd7da1da135ce4fc51c3e53101ba6.tar.bz2
mv-050c957927ccd7da1da135ce4fc51c3e53101ba6.tar.xz
mv-050c957927ccd7da1da135ce4fc51c3e53101ba6.zip
Merge slider classes into one.
Diffstat (limited to 'src/gui/widgets/slider.cpp')
-rw-r--r--src/gui/widgets/slider.cpp127
1 files changed, 125 insertions, 2 deletions
diff --git a/src/gui/widgets/slider.cpp b/src/gui/widgets/slider.cpp
index 7a9b38050..ab8cb97c2 100644
--- a/src/gui/widgets/slider.cpp
+++ b/src/gui/widgets/slider.cpp
@@ -20,6 +20,49 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+/* _______ __ __ __ ______ __ __ _______ __ __
+ * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\
+ * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / /
+ * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / /
+ * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / /
+ * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ /
+ * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/
+ *
+ * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson
+ *
+ *
+ * Per Larsson a.k.a finalman
+ * Olof Naessén a.k.a jansem/yakslem
+ *
+ * Visit: http://guichan.sourceforge.net
+ *
+ * License: (BSD)
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name of Guichan nor the names of its contributors may
+ * be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
#include "gui/widgets/slider.h"
#include "client.h"
@@ -47,7 +90,16 @@ static std::string const data[2] =
Slider::Slider(Widget2 *const widget,
const double scaleEnd) :
- gcn::Slider(widget, scaleEnd),
+ Widget(widget),
+ MouseListener(),
+ KeyListener(),
+ mDragged(false),
+ mValue(0),
+ mStepLength(scaleEnd / 10),
+ mMarkerLength(10),
+ mScaleStart(0),
+ mScaleEnd(scaleEnd),
+ mOrientation(HORIZONTAL),
mVertexes(new ImageCollection),
mHasMouse(false),
mRedraw(true)
@@ -58,7 +110,16 @@ Slider::Slider(Widget2 *const widget,
Slider::Slider(Widget2 *const widget,
const double scaleStart,
const double scaleEnd) :
- gcn::Slider(widget, scaleStart, scaleEnd),
+ Widget(widget),
+ MouseListener(),
+ KeyListener(),
+ mDragged(false),
+ mValue(scaleStart),
+ mStepLength((scaleEnd - scaleStart) / 10),
+ mMarkerLength(10),
+ mScaleStart(scaleStart),
+ mScaleEnd(scaleEnd),
+ mOrientation(HORIZONTAL),
mVertexes(new ImageCollection),
mHasMouse(false),
mRedraw(true)
@@ -83,6 +144,12 @@ Slider::~Slider()
void Slider::init()
{
+ setFocusable(true);
+ setFrameSize(1);
+
+ addMouseListener(this);
+ addKeyListener(this);
+
setFrameSize(0);
// Load resources
@@ -385,3 +452,59 @@ void Slider::setValue2(const double value)
setValue(value);
mRedraw = true;
}
+
+void Slider::setScale(const double scaleStart, const double scaleEnd)
+{
+ mScaleStart = scaleStart;
+ mScaleEnd = scaleEnd;
+}
+
+void Slider::setValue(const double value)
+{
+ if (value > getScaleEnd())
+ {
+ mValue = getScaleEnd();
+ return;
+ }
+
+ if (value < getScaleStart())
+ {
+ mValue = getScaleStart();
+ return;
+ }
+
+ mValue = value;
+}
+
+double Slider::markerPositionToValue(const int v) const
+{
+ int w;
+ if (getOrientation() == HORIZONTAL)
+ w = getWidth();
+ else
+ w = getHeight();
+
+ const double pos = v / (static_cast<double>(w) - getMarkerLength());
+ return (1.0 - pos) * getScaleStart() + pos * getScaleEnd();
+}
+
+int Slider::valueToMarkerPosition(const double value) const
+{
+ int v;
+ if (getOrientation() == HORIZONTAL)
+ v = getWidth();
+ else
+ v = getHeight();
+
+ const int w = static_cast<int>((v - getMarkerLength())
+ * (value - getScaleStart())
+ / (getScaleEnd() - getScaleStart()));
+
+ if (w < 0)
+ return 0;
+
+ if (w > v - getMarkerLength())
+ return v - getMarkerLength();
+
+ return w;
+}