Skip to content

Commit 4179022

Browse files
committed
Added support for rotation transform to the bounding-box and to the transform handler for the tracker effect
1 parent 0d348bb commit 4179022

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/windows/video_widget.py

+18-7
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,20 @@ def changed(self, action):
7373

7474

7575
def drawTransformHandler(self, painter, sx, sy, source_width, source_height, origin_x, origin_y,
76-
x1=None, y1=None, x2=None, y2=None):
76+
x1=None, y1=None, x2=None, y2=None, rotation = None):
7777
# Draw transform corners and center origin circle
7878
# Corner size
7979
cs = 14.0
8080
os = 12.0
8181

82+
# Rotate the transform handler
83+
if rotation:
84+
bbox_center_x = (((x1*source_width + x2*source_width) / 2.0) ) - ( (os/2) /sx)
85+
bbox_center_y = (((y1*source_height + y2*source_height) / 2.0) ) - ( (os/2) /sy)
86+
painter.translate(bbox_center_x, bbox_center_y)
87+
painter.rotate(rotation)
88+
painter.translate(-bbox_center_x, -bbox_center_y)
89+
8290
if(x1 and y1 and x2 and y2):
8391
# Calculate bounds of clip
8492
self.clipBounds = QRectF(QPointF(x1*source_width, y1*source_height), QPointF(x2*source_width, y2*source_height))
@@ -300,8 +308,9 @@ def paintEvent(self, event, *args):
300308
y1 = raw_properties_effect.get('y1').get('value')
301309
x2 = raw_properties_effect.get('x2').get('value')
302310
y2 = raw_properties_effect.get('y2').get('value')
311+
rotation_effect = raw_properties_effect.get('rotation').get('value')
303312
self.drawTransformHandler(painter, sx, sy, source_width, source_height, origin_x, origin_y,
304-
x1, y1, x2, y2)
313+
x1, y1, x2, y2, rotation_effect)
305314
else:
306315
self.drawTransformHandler(painter, sx, sy, source_width, source_height, origin_x, origin_y)
307316

@@ -605,7 +614,6 @@ def mouseMoveEvent(self, event):
605614
origin_y = 0.0
606615
if origin_y > 1.0:
607616
origin_y = 1.0
608-
609617
# Update keyframe value (or create new one)
610618
self.updateClipProperty(self.transforming_clip.id, clip_frame_number, 'origin_x', origin_x, refresh=False)
611619
self.updateClipProperty(self.transforming_clip.id, clip_frame_number, 'origin_y', origin_y)
@@ -951,7 +959,7 @@ def mouseMoveEvent(self, event):
951959
elif self.transform_mode == 'scale_bottom':
952960
scale_y += (event.pos().y() - self.mouse_position.y()) / (self.clipBounds.height() / 2.0)
953961
elif self.transform_mode == 'scale_left':
954-
scale_x -= (event.pos().x() - self.mouse_position.x()) / (self.clipBounds.width() / 2.0)
962+
scale_x -= (event.pos().x() - self.mouse_position.x()) / (self.clipBounds.width() / 2.0)
955963
elif self.transform_mode == 'scale_right':
956964
scale_x += (event.pos().x() - self.mouse_position.x()) / (self.clipBounds.width() / 2.0)
957965

@@ -1040,14 +1048,17 @@ def updateEffectProperty(self, effect_id, frame_number, property_key, new_value,
10401048

10411049
# Reduce # of clip properties we are saving (performance boost)
10421050
# raw_properties = {property_key: raw_properties.get(property_key)}
1051+
10431052
raw_properties_string = json.dumps(raw_properties)
10441053

10451054
self.transforming_effect_object.SetJson(frame_number, raw_properties_string)
10461055

1047-
if refresh:
1056+
if effect_updated:
10481057
c.save()
1049-
# Update the preview
1050-
get_app().window.refreshFrameSignal.emit()
1058+
if refresh:
1059+
get_app().window.refreshFrameSignal.emit()
1060+
1061+
self.transforming_effect_object.SetJson(frame_number, raw_properties_string)
10511062

10521063
def refreshTriggered(self):
10531064
"""Signal to refresh viewport (i.e. a property might have changed that effects the preview)"""

0 commit comments

Comments
 (0)