diff --git a/ui/edge_item.py b/ui/edge_item.py index 1d47817..b9f6bee 100644 --- a/ui/edge_item.py +++ b/ui/edge_item.py @@ -3,6 +3,7 @@ from PySide6.QtGui import QPainterPath, QPen, QColor from core.graph import Edge from core.port_types import PORT_STYLES, PortType +import math class EdgeItem(QGraphicsPathItem): def __init__(self, edge=None, source_port=None, target_port=None): @@ -51,8 +52,11 @@ def set_positions(self, source: QPointF, target: QPointF): self.target_pos = target self.update_path() - def set_target_pos(self, pos: QPointF): - self.target_pos = pos + def set_target_pos(self, pos: QPointF, is_port_input): + if is_port_input: + self.source_pos = pos + else: + self.target_pos = pos self.update_path() @@ -62,10 +66,11 @@ def update_path(self): dx = self.target_pos.x() - self.source_pos.x() dy = self.target_pos.y() - self.source_pos.y() - - ctrl1_x = self.source_pos.x() + abs(dx) * 0.5 + d_str = math.sqrt(dx ** 2 + dy ** 2) * 1.35 + + ctrl1_x = self.source_pos.x() + min(d_str, max(dx, pow(abs(dx), 0.8) + 250)) * 0.5 ctrl1_y = self.source_pos.y() - ctrl2_x = self.target_pos.x() - abs(dx) * 0.5 + ctrl2_x = self.target_pos.x() - min(d_str, max(dx, pow(abs(dx), 0.8) + 250)) * 0.5 ctrl2_y = self.target_pos.y() path.cubicTo( @@ -73,5 +78,5 @@ def update_path(self): QPointF(ctrl2_x, ctrl2_y), self.target_pos ) - + self.setPath(path) diff --git a/ui/graph_scene.py b/ui/graph_scene.py index 9e16334..ae04967 100644 --- a/ui/graph_scene.py +++ b/ui/graph_scene.py @@ -169,5 +169,5 @@ def update_edges_for_node(self, node_item): def mouseMoveEvent(self, event): if self.drag_edge: - self.drag_edge.set_target_pos(event.scenePos()) + self.drag_edge.set_target_pos(event.scenePos(), self.drag_edge.source_port.is_input) super().mouseMoveEvent(event) diff --git a/ui/graph_view.py b/ui/graph_view.py index 3e3c539..78b0802 100644 --- a/ui/graph_view.py +++ b/ui/graph_view.py @@ -554,6 +554,8 @@ def _init_zoom_widget(self): self.zoom_in_btn.setFixedSize(28, 28) self.zoom_label = ZoomLabel("100%") + self.zoom_label.setFixedWidth(32) + self.zoom_label.setAlignment(Qt.AlignHCenter) self.zoom_slider = QSlider(Qt.Horizontal) self.zoom_slider.setRange(20, 300)