Prechádzať zdrojové kódy

Correct odd slider range when moves symmetrically. Fixes #432

achronop 11 rokov pred
rodič
commit
9140766b71
1 zmenil súbory, kde vykonal 5 pridanie a 5 odobranie
  1. 5 5
      Libs/Widgets/ctkRangeSlider.cpp

+ 5 - 5
Libs/Widgets/ctkRangeSlider.cpp

@@ -84,7 +84,7 @@ public:
   int m_SubclassPosition;
   
   /// Original width between the 2 bounds before any moves
-  int m_SubclassWidth;
+  float m_SubclassWidth;
 
   ctkRangeSliderPrivate::Handles m_SelectedHandles;
 
@@ -110,7 +110,7 @@ ctkRangeSliderPrivate::ctkRangeSliderPrivate(ctkRangeSlider& object)
   this->m_MaximumSliderSelected = QStyle::SC_None;
   this->m_SubclassClickOffset = 0;
   this->m_SubclassPosition = 0;
-  this->m_SubclassWidth = 0;
+  this->m_SubclassWidth = 0.0;
   this->m_SelectedHandles = 0;
   this->m_SymmetricMoves = false;
 }
@@ -692,7 +692,7 @@ void ctkRangeSlider::mousePressEvent(QMouseEvent* mouseEvent)
     // warning lost of precision it might be fatal
     d->m_SubclassPosition = (d->m_MinimumPosition + d->m_MaximumPosition) / 2.;
     d->m_SubclassClickOffset = mepos - d->pixelPosFromRangeValue(d->m_SubclassPosition);
-    d->m_SubclassWidth = (d->m_MaximumPosition - d->m_MinimumPosition) / 2;
+    d->m_SubclassWidth = (d->m_MaximumPosition - d->m_MinimumPosition) / 2.;
     qMax(d->m_SubclassPosition - d->m_MinimumPosition, d->m_MaximumPosition - d->m_SubclassPosition);
     this->setSliderDown(true);
     if (!this->isMinimumSliderDown() || !this->isMaximumSliderDown())
@@ -755,8 +755,8 @@ void ctkRangeSlider::mouseMoveEvent(QMouseEvent* mouseEvent)
   // Both handles are down (the user clicked in between the handles)
   else if (this->isMinimumSliderDown() && this->isMaximumSliderDown())
     {
-    this->setPositions(newPosition - d->m_SubclassWidth,
-                       newPosition + d->m_SubclassWidth );
+    this->setPositions(newPosition - static_cast<int>(d->m_SubclassWidth),
+                       newPosition + static_cast<int>(d->m_SubclassWidth + .5));
     }
   mouseEvent->accept();
 }