Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
May 28, 2006, 8:18:03 PM (18 years ago)
Author:
bensch
Message:

gui: Slider can be slided

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/gui/src/lib/gui/gl_gui/glgui_slider.cc

    r7929 r7931  
    1717
    1818#include "glgui_slider.h"
     19#include "event_def.h"
    1920
    2021namespace OrxGui
     
    3536  */
    3637  GLGuiSlider::~GLGuiSlider()
    37   {
    38   }
     38  {}
    3939
    4040  /**
     
    5353    this->_maxValue = 1.0;
    5454    this->_step = 0.1;
     55    this->_sliderWidth = 5.0;
     56    this->grabbed = false;
    5557
    5658    this->setSize2D(100, 30);
     
    6163  void GLGuiSlider::setValue(float value)
    6264  {
    63     this->_value = value;
     65    if (value < this->min())
     66      this->_value = min();
     67    else if (value > max())
     68      this->_value = max();
     69    else
     70      this->_value = value;
     71    printf("VALUE %f\n", _value);
    6472  }
    6573
    6674  void GLGuiSlider::setMin(float minimum)
    6775  {
    68     this->_minValue = minimum;
     76    if (minimum <= max())
     77     this->_minValue = minimum;
     78
     79    if (this->value() < minimum)
     80      this->_value = minimum;
    6981  }
    7082
    7183  void GLGuiSlider::setMax(float maximum)
    7284  {
    73     this->_maxValue = maximum;
     85    if (maximum >= min())
     86      this->_maxValue = maximum;
     87
     88    if (this->value() > maximum)
     89      this->_value = maximum;
    7490  }
    7591
    7692  void GLGuiSlider::setRange(float minimum, float maximum)
    7793  {
    78     this->_minValue = minimum;
    79     this->_maxValue = maximum;
     94    if (minimum < maximum)
     95    {
     96      this->_minValue = minimum;
     97      this->_maxValue = maximum;
     98    }
     99    if (this->value() < minimum)
     100      this->_value = minimum;
     101    else if (this->value() > maximum)
     102      this->_value = maximum;
    80103  }
    81104
     
    93116  }
    94117
     118
     119  void GLGuiSlider::clicked(const Vector2D& pos)
     120  {
     121    GLGuiWidget::clicked(pos);
     122
     123    float sliderPosition = this->sliderPosition();
     124    if (sliderPosition > pos.x + this->_sliderWidth)
     125      this->setValue(this->value() - this->step());
     126
     127    else if (sliderPosition < pos.x - this->_sliderWidth)
     128      this->setValue(this->value() + this->step());
     129    else
     130      this->grabbed = true;
     131
     132
     133
     134    printf("clicked at position: "), pos.debug();
     135  }
     136
     137  void GLGuiSlider::released(const Vector2D& pos)
     138  {
     139    GLGuiWidget::released(pos);
     140    this->grabbed = false;
     141  }
     142
     143  void GLGuiSlider::removedFocus()
     144  {
     145    GLGuiWidget::removedFocus();
     146    this->grabbed = false;
     147  }
     148
     149  float GLGuiSlider::sliderPosition() const
     150  {
     151    return (this->_value - this->_minValue)/( this->_maxValue - this->_minValue) * (this->getSizeX2D() - 4.0) + 2.0;
     152  }
     153
     154  float GLGuiSlider::sliderValue(float position) const
     155  {
     156    return (position - 2.0) / (this->getSizeX2D() - 4.0)  *( this->_maxValue - this->_minValue) +this->_minValue ;
     157  }
     158
     159  /*  virtual void GLGuiSlider::tick(float dt)
     160    {
     161      if (this->grabbed)
     162      {
     163        this->setValue( 1);
     164      }
     165    }*/
     166
    95167  /**
    96168   * @brief draws the GLGuiSlider
     
    104176    this->drawRect(this->frontRect());
    105177
    106     float percentagePosition = (this->_value - this->_minValue)/( this->_maxValue - this->_minValue);
    107 
    108     this->drawRect(Rect2D(percentagePosition* this->getSizeX2D(), 2, 5, this->getSizeY2D() - 4));
     178    this->drawRect(Rect2D(this->sliderPosition()-_sliderWidth/2.0, 2, _sliderWidth, this->getSizeY2D() - 4));
    109179
    110180    this->endDraw();
    111181  }
     182
     183  bool GLGuiSlider::processEvent( const Event& event )
     184  {
     185    if (this->grabbed && event.type == EV_MOUSE_MOTION)
     186    {
     187      this->setValue(sliderValue(event.x - this->getAbsCoor2D().x));
     188      return true;
     189    }
     190    return false;
     191  }
    112192}
Note: See TracChangeset for help on using the changeset viewer.