Compare commits

...

2 Commits

Author SHA1 Message Date
5f30862a83 keep position on handle 2024-03-24 20:06:00 +01:00
017a51a24a remove code for drawing ticks 2024-03-24 19:59:38 +01:00

View File

@@ -44,8 +44,6 @@ class RangeSlider(QWidget):
super(RangeSlider, self).__init__() super(RangeSlider, self).__init__()
self.setFixedWidth(self._width) self.setFixedWidth(self._width)
self.draw_ticks = False
self.min_value = 0 self.min_value = 0
self.max_value = 100 self.max_value = 100
@@ -54,6 +52,7 @@ class RangeSlider(QWidget):
self.selected_handle = None self.selected_handle = None
self.selection_drag_range = (self.min_value, self.max_value) self.selection_drag_range = (self.min_value, self.max_value)
self.drag_y_offset_in_handle = 0
def set_maximum(self, max: int): def set_maximum(self, max: int):
if self.max_value == max: if self.max_value == max:
@@ -69,8 +68,6 @@ class RangeSlider(QWidget):
def paintEvent(self, event: PySide6.QtGui.QPaintEvent) -> None: def paintEvent(self, event: PySide6.QtGui.QPaintEvent) -> None:
painter = QPainter(self) painter = QPainter(self)
self._draw_background(painter) self._draw_background(painter)
if self.draw_ticks:
self._draw_ticks(painter)
self._draw_handle(painter, self.lower_value) self._draw_handle(painter, self.lower_value)
self._draw_handle(painter, self.upper_value, direction=-1) self._draw_handle(painter, self.upper_value, direction=-1)
@@ -90,19 +87,6 @@ class RangeSlider(QWidget):
self._value_to_pixel(self.upper_value.value - self.lower_value.value) - 2 * self._handle_width) self._value_to_pixel(self.upper_value.value - self.lower_value.value) - 2 * self._handle_width)
painter.drawRoundedRect(rect, 3.0, 3.0) painter.drawRoundedRect(rect, 3.0, 3.0)
def _draw_ticks(self, painter: QPainter) -> None:
painter.setPen(to_qcolor("333333"))
min_tick_distance = 25
full_height = self.height() - 2 * self._handle_width
ticks = math.floor(full_height / min_tick_distance)
actual_tick_distance = full_height / ticks
print(f"ticks {ticks}")
y = actual_tick_distance + self._handle_width
while y < full_height:
painter.drawLine(8, y, 12, y)
y = y + actual_tick_distance
def _draw_handle(self, painter: QPainter, handle: RangeSliderHandle, direction=1) -> None: def _draw_handle(self, painter: QPainter, handle: RangeSliderHandle, direction=1) -> None:
y_pixel = self._value_to_pixel(handle.value) y_pixel = self._value_to_pixel(handle.value)
@@ -144,9 +128,11 @@ class RangeSlider(QWidget):
if self._is_on_handle(self.lower_value, pos.y(), direction=1): if self._is_on_handle(self.lower_value, pos.y(), direction=1):
self.selected_handle = self.lower_value self.selected_handle = self.lower_value
self.selection_drag_range = (self.min_value, self.upper_value.value) self.selection_drag_range = (self.min_value, self.upper_value.value)
self.drag_y_offset_in_handle = self.selected_handle.value - self._pixel_to_value(pos.y())
if self._is_on_handle(self.upper_value, pos.y(), direction=-1): if self._is_on_handle(self.upper_value, pos.y(), direction=-1):
self.selected_handle = self.upper_value self.selected_handle = self.upper_value
self.selection_drag_range = (self.lower_value.value, self.max_value) self.selection_drag_range = (self.lower_value.value, self.max_value)
self.drag_y_offset_in_handle = self.selected_handle.value - self._pixel_to_value(pos.y())
def mouseReleaseEvent(self, event: PySide6.QtGui.QMouseEvent) -> None: def mouseReleaseEvent(self, event: PySide6.QtGui.QMouseEvent) -> None:
self.selected_handle = None self.selected_handle = None
@@ -154,7 +140,7 @@ class RangeSlider(QWidget):
def mouseMoveEvent(self, e: PySide6.QtGui.QMouseEvent) -> None: def mouseMoveEvent(self, e: PySide6.QtGui.QMouseEvent) -> None:
if self.selected_handle != None: if self.selected_handle != None:
pos: QPoint = e.pos() pos: QPoint = e.pos()
value = self._pixel_to_value(pos.y()) value = self._pixel_to_value(pos.y()) + self.drag_y_offset_in_handle
if self.selection_drag_range[0] <= value <= self.selection_drag_range[1]: if self.selection_drag_range[0] <= value <= self.selection_drag_range[1]:
self.selected_handle.value = value self.selected_handle.value = value
# print("%s, %s" %(self.lower_value.value, self.upper_value.value)) # print("%s, %s" %(self.lower_value.value, self.upper_value.value))