Skip to content

Commit fddd047

Browse files
committed
Updating region widget selection, and fixing cancel effect which broke QDragManager
1 parent 55f6103 commit fddd047

File tree

2 files changed

+32
-25
lines changed

2 files changed

+32
-25
lines changed

src/windows/process_effect.py

+20-20
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def __init__(self, clip_id, effect_name, effect_params):
195195
# flag to close the clip processing thread
196196
self.cancel_clip_processing = False
197197
self.effect = None
198-
198+
199199
def spinner_value_changed(self, widget, param, value):
200200
"""Spinner value change callback"""
201201
self.context[param["setting"]] = value
@@ -250,20 +250,21 @@ def rect_select_clicked(self, widget, param):
250250
viewPortSize = win.viewport_rect
251251

252252
# Get QImage of region
253-
region_qimage = win.videoPreview.region_qimage
253+
if win.videoPreview.region_qimage:
254+
region_qimage = win.videoPreview.region_qimage
254255

255-
# Resize QImage to match button size
256-
resized_qimage = region_qimage.scaled(widget.size(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
256+
# Resize QImage to match button size
257+
resized_qimage = region_qimage.scaled(widget.size(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
257258

258-
# Draw Qimage onto QPushButton (to display region selection to user)
259-
palette = widget.palette()
260-
palette.setBrush(widget.backgroundRole(), QBrush(resized_qimage))
261-
widget.setFlat(True)
262-
widget.setAutoFillBackground(True)
263-
widget.setPalette(palette)
259+
# Draw Qimage onto QPushButton (to display region selection to user)
260+
palette = widget.palette()
261+
palette.setBrush(widget.backgroundRole(), QBrush(resized_qimage))
262+
widget.setFlat(True)
263+
widget.setAutoFillBackground(True)
264+
widget.setPalette(palette)
264265

265-
# Remove button text (so region QImage is more visible)
266-
widget.setText("")
266+
# Remove button text (so region QImage is more visible)
267+
widget.setText("")
267268

268269
# If data found, add to context
269270
if topLeft and bottomRight:
@@ -326,18 +327,17 @@ def accept(self):
326327
# if the cancel button was pressed, close the processing thread
327328
if(self.cancel_clip_processing):
328329
processing.CancelProcessing()
330+
break
329331

330332
if(not self.cancel_clip_processing):
331-
333+
332334
# Load processed data into effect
333335
self.effect = openshot.EffectInfo().CreateEffect(self.effect_name)
334336
self.effect.SetJson( '{"protobuf_data_path": "%s"}' % protobufPath )
335337
self.effect.Id(ID)
336-
337-
print("Applied effect: %s to clip: %s" % (self.effect_name, self.clip_instance.Id()))
338338

339-
# Accept dialog
340-
super(ProcessEffect, self).accept()
339+
# Accept dialog
340+
super(ProcessEffect, self).accept()
341341

342342
def reject(self):
343343
# Cancel dialog
@@ -364,7 +364,7 @@ def generateJson(self, protobufPath):
364364
trackerType = self.context["tracker-type"]
365365
jsonString += ',"tracker_type": "%s"' % trackerType
366366

367-
# Get bounding box coordinates
367+
# Get bounding box coordinates
368368
tracker_dict = self.context["region"]
369369
bbox = (tracker_dict["x"],tracker_dict["y"],tracker_dict["width"],tracker_dict["height"])
370370
jsonString += ',"bbox": {"x": %d, "y": %d, "w": %d, "h": %d}' % (bbox)
@@ -380,7 +380,7 @@ def generateJson(self, protobufPath):
380380

381381
modelConfigPath = self.context["model-config"]
382382
jsonString += ', "model_configuration": "%s"' % modelConfigPath
383-
383+
384384
classNamesPath = self.context["class-names"]
385385
jsonString += ', "classes_file": "%s"' % classNamesPath
386386

@@ -389,4 +389,4 @@ def generateJson(self, protobufPath):
389389

390390
# Finish JSON string
391391
jsonString+='}'
392-
return jsonString
392+
return jsonString

src/windows/video_widget.py

+12-5
Original file line numberDiff line numberDiff line change
@@ -367,9 +367,6 @@ def mouseReleaseEvent(self, event):
367367
# Save region image data (as QImage)
368368
# This can be used other widgets to display the selected region
369369
if self.region_enabled:
370-
# Find centered viewport
371-
viewport_rect = self.centeredViewport(self.width(), self.height())
372-
373370
# Get region coordinates
374371
region_rect = QRectF(self.regionTopLeftHandle.x(), self.regionTopLeftHandle.y(),
375372
self.regionBottomRightHandle.x() - self.regionTopLeftHandle.x(),
@@ -378,9 +375,19 @@ def mouseReleaseEvent(self, event):
378375
# Map region (due to zooming)
379376
mapped_region_rect = self.region_transform.mapToPolygon(region_rect.toRect()).boundingRect()
380377

381-
# Create QImage from videoPreview widget
382-
self.region_qimage = QImage(mapped_region_rect.width(), mapped_region_rect.height(), QImage.Format_ARGB32)
378+
# Render a scaled version of the region (as a QImage)
379+
# TODO: Grab higher quality pixmap from the QWidget, as this method seems to be 1/2 resolution
380+
# of the original QWidget video element.
381+
scale = 3.0
382+
383+
# Map rect to transform (for scaling video elements)
384+
mapped_region_rect = QRect(mapped_region_rect.x(), mapped_region_rect.y(), mapped_region_rect.width() * scale, mapped_region_rect.height() * scale)
385+
386+
# Render QWidget onto scaled QImage
387+
self.region_qimage = QImage(mapped_region_rect.width(), mapped_region_rect.height(), QImage.Format_RGBA8888)
383388
region_painter = QPainter(self.region_qimage)
389+
region_painter.setRenderHints(QPainter.Antialiasing | QPainter.SmoothPixmapTransform | QPainter.TextAntialiasing, True)
390+
region_painter.scale(scale, scale)
384391
self.render(region_painter, QPoint(0,0), QRegion(mapped_region_rect, QRegion.Rectangle))
385392
region_painter.end()
386393

0 commit comments

Comments
 (0)