viewer: allow adding objects with a rect

This commit is contained in:
itsmattkc
2022-05-12 13:40:11 -07:00
parent 18d10f6c8d
commit 1def68f1a4
6 changed files with 167 additions and 62 deletions
+32 -3
View File
@@ -67,9 +67,10 @@ ViewerDisplayWidget::ViewerDisplayWidget(QWidget *parent) :
show_fps_(false),
frames_skipped_(0),
show_widget_background_(false),
push_mode_(kPushNull)
push_mode_(kPushNull),
add_band_(nullptr)
{
connect(Core::instance(), &Core::ToolChanged, this, &ViewerDisplayWidget::UpdateCursor);
connect(Core::instance(), &Core::ToolChanged, this, &ViewerDisplayWidget::ToolChanged);
connect(this, &ViewerDisplayWidget::InnerWidgetMouseMove, this, &ViewerDisplayWidget::EmitColorAtCursor);
@@ -105,6 +106,8 @@ void ViewerDisplayWidget::UpdateCursor()
{
if (Core::instance()->tool() == Tool::kHand) {
setCursor(Qt::OpenHandCursor);
} else if (Core::instance()->tool() == Tool::kAdd) {
setCursor(Qt::CrossCursor);
} else {
unsetCursor();
}
@@ -136,6 +139,11 @@ void ViewerDisplayWidget::SetBlank()
update();
}
void ViewerDisplayWidget::ToolChanged()
{
UpdateCursor();
}
void ViewerDisplayWidget::SetDeinterlacing(bool e)
{
deinterlace_ = e;
@@ -235,7 +243,16 @@ void ViewerDisplayWidget::IncrementSkippedFrames()
void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton && gizmos_
if (event->button() == Qt::LeftButton && Core::instance()->tool() == Tool::kAdd
&& (Core::instance()->GetSelectedAddableObject() == Tool::kAddableShape || Core::instance()->GetSelectedAddableObject() == Tool::kAddableTitle)) {
add_band_start_ = event->pos();
add_band_ = new QRubberBand(QRubberBand::Rectangle, this);
add_band_->setGeometry(QRect(add_band_start_, add_band_start_));
add_band_->show();
} else if (event->button() == Qt::LeftButton && gizmos_
&& (current_gizmo_ = TryGizmoPress(gizmo_db_, TransformViewerSpaceToBufferSpace(event->pos())))) {
// Handle gizmo click
@@ -274,6 +291,10 @@ void ViewerDisplayWidget::mouseMoveEvent(QMouseEvent *event)
hand_last_drag_pos_ = event->pos();
} else if (add_band_) {
add_band_->setGeometry(QRect(event->pos(), add_band_start_).normalized());
} else if (current_gizmo_) {
// Signal movement
@@ -324,6 +345,14 @@ void ViewerDisplayWidget::mouseReleaseEvent(QMouseEvent *event)
hand_dragging_ = false;
UpdateCursor();
} else if (add_band_) {
QRectF r = GenerateGizmoTransform().inverted().mapRect(add_band_->geometry());
emit CreateAddableAt(r);
add_band_->deleteLater();
add_band_ = nullptr;
} else if (current_gizmo_) {
// Handle gizmo