viewertexteditor: improve gizmo transform usage
This commit is contained in:
@@ -456,8 +456,6 @@ void ViewerDisplayWidget::OnPaint()
|
||||
QPainter pixp(&pm);
|
||||
text_edit_->Paint(&pixp);
|
||||
|
||||
QTransform gizmo_transform = GenerateDisplayTransform();
|
||||
p.setTransform(gizmo_transform);
|
||||
p.drawPixmap(text_edit_pos_, pm);
|
||||
}
|
||||
}
|
||||
@@ -697,8 +695,10 @@ NodeGizmo *ViewerDisplayWidget::TryGizmoPress(const NodeValueRow &row, const QPo
|
||||
|
||||
void ViewerDisplayWidget::OpenTextGizmo(TextGizmo *text, QMouseEvent *event)
|
||||
{
|
||||
text_transform_ = GenerateGizmoTransform();
|
||||
|
||||
// Create text editor
|
||||
text_edit_ = new ViewerTextEditor(1.0, this);
|
||||
text_edit_ = new ViewerTextEditor(text_transform_.m11(), this);
|
||||
|
||||
// Set text editor's gizmo property for later use
|
||||
text_edit_->setProperty("gizmo", reinterpret_cast<quintptr>(text));
|
||||
@@ -737,8 +737,8 @@ void ViewerDisplayWidget::OpenTextGizmo(TextGizmo *text, QMouseEvent *event)
|
||||
text_toolbar_->setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint);
|
||||
text_edit_->ConnectToolBar(text_toolbar_);
|
||||
|
||||
QTransform display_untransform = GenerateDisplayTransform().inverted();
|
||||
text_toolbar_->move(mapToGlobal(display_untransform.map(text_edit_pos_).toPoint()));
|
||||
text_transform_inverted_ = text_transform_.inverted();
|
||||
text_toolbar_->move(mapToGlobal(text_transform_inverted_.map(text_edit_pos_).toPoint()));
|
||||
text_toolbar_->show();
|
||||
|
||||
inner_widget()->setFocusPolicy(Qt::StrongFocus);
|
||||
@@ -748,7 +748,7 @@ void ViewerDisplayWidget::OpenTextGizmo(TextGizmo *text, QMouseEvent *event)
|
||||
|
||||
// Start text cursor where the user clicked
|
||||
if (event) {
|
||||
QPoint click_pos = display_untransform.map(event->pos()) - text_edit_pos_.toPoint();
|
||||
QPoint click_pos = text_transform_inverted_.map(event->pos()) - text_edit_pos_.toPoint();
|
||||
text_edit_->setTextCursor(text_edit_->cursorForPosition(click_pos));
|
||||
}
|
||||
|
||||
@@ -1099,11 +1099,10 @@ void ViewerDisplayWidget::ForwardDragEventToTextEdit(T *e)
|
||||
bool ViewerDisplayWidget::ForwardMouseEventToTextEdit(QMouseEvent *event, bool check_if_outside)
|
||||
{
|
||||
// Transform screen mouse coords to world mouse coords
|
||||
QTransform t = GenerateDisplayTransform().inverted();
|
||||
QPointF local_pos = t.map(event->localPos()) - text_edit_pos_;
|
||||
QPointF local_pos = GetVirtualPosForTextEdit(event->localPos());
|
||||
|
||||
if (check_if_outside) {
|
||||
if (local_pos.x() < 0 || local_pos.x() >= text_edit_->width() || local_pos.y() < 0 || local_pos.y() >= height()) {
|
||||
if (local_pos.x() < 0 || local_pos.x() >= text_edit_->width() || local_pos.y() < 0 || local_pos.y() >= text_edit_->height()) {
|
||||
CloseTextEditor();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -246,6 +246,12 @@ private:
|
||||
QTransform GenerateDisplayTransform();
|
||||
|
||||
QTransform GenerateGizmoTransform(NodeTraverser >, const TimeRange &range);
|
||||
QTransform GenerateGizmoTransform()
|
||||
{
|
||||
NodeTraverser t;
|
||||
t.SetCacheVideoParams(gizmo_params_);
|
||||
return GenerateGizmoTransform(t, GenerateGizmoTime());
|
||||
}
|
||||
|
||||
TimeRange GenerateGizmoTime()
|
||||
{
|
||||
@@ -269,6 +275,11 @@ private:
|
||||
|
||||
void DrawSubtitleTracks();
|
||||
|
||||
QPointF GetVirtualPosForTextEdit(const QPointF &p)
|
||||
{
|
||||
return text_transform_inverted_.map(p) - text_edit_pos_;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void ForwardDragEventToTextEdit(T *event);
|
||||
|
||||
@@ -392,6 +403,8 @@ private:
|
||||
QPointF text_edit_pos_;
|
||||
ViewerTextEditor *text_edit_;
|
||||
ViewerTextEditorToolBar *text_toolbar_;
|
||||
QTransform text_transform_;
|
||||
QTransform text_transform_inverted_;
|
||||
|
||||
private slots:
|
||||
void UpdateFromQueue();
|
||||
|
||||
Reference in New Issue
Block a user