00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <GLW/GLWDragger.h>
00022 #include <GLEXT/GLState.h>
00023 #include <common/Keyboard.h>
00024 #include <common/ToolTip.h>
00025 #include <client/ScorchedClient.h>
00026 #include <tank/TankContainer.h>
00027 #include <tank/TankState.h>
00028 #include <tank/TankPosition.h>
00029
00030 REGISTER_CLASS_SOURCE(GLWDragger);
00031
00032 GLWDragger::GLWDragger(float x, float y, float w, float range) :
00033 GLWidget(x, y, w, 20.0f),
00034 range_(range),
00035 dragging_(false), handler_(0)
00036 {
00037
00038 }
00039
00040 GLWDragger::~GLWDragger()
00041 {
00042
00043 }
00044
00045 void GLWDragger::mouseDown(int button, float x, float y, bool &skipRest)
00046 {
00047 if (inBox(x, y, x_, y_, w_, h_))
00048 {
00049 skipRest = true;
00050 dragging_ = true;
00051 }
00052 }
00053
00054 void GLWDragger::mouseUp(int button, float x, float y, bool &skipRest)
00055 {
00056 dragging_ = false;
00057 }
00058
00059 void GLWDragger::mouseDrag(int button, float mx, float my, float x, float y, bool &skipRest)
00060 {
00061 if (dragging_)
00062 {
00063 float rangeMult = 1.0f;
00064 unsigned int keyState =
00065 Keyboard::instance()->getKeyboardState();
00066 if (keyState & KMOD_LSHIFT) rangeMult = 0.5f;
00067
00068 current_ += y /w_ * range_ * rangeMult;
00069 if (handler_) handler_->currentChanged(getId(), current_);
00070
00071 skipRest = true;
00072 }
00073 }