viewer: rewrote pixel sampling coordinate system

Fixes #1395
This commit is contained in:
itsmattkc
2020-11-22 21:25:10 +11:00
parent cb5c48bd06
commit 3cf4d58716
4 changed files with 41 additions and 22 deletions
@@ -55,6 +55,10 @@ ManagedDisplayWidget::ManagedDisplayWidget(QWidget *parent) :
&ManagedDisplayWidgetOpenGL::frameSwapped,
this, &ManagedDisplayWidget::frameSwapped, Qt::DirectConnection);
connect(static_cast<ManagedDisplayWidgetOpenGL*>(inner_widget_),
&ManagedDisplayWidgetOpenGL::OnMouseMove,
this, &ManagedDisplayWidget::InnerWidgetMouseMove);
// Create OpenGL renderer
attached_renderer_ = new OpenGLRenderer(this);
} else {
@@ -21,6 +21,7 @@
#ifndef MANAGEDDISPLAYOBJECT_H
#define MANAGEDDISPLAYOBJECT_H
#include <QMouseEvent>
#include <QOpenGLContext>
#include <QOpenGLWidget>
@@ -46,6 +47,8 @@ signals:
void OnDestroy();
void OnMouseMove(QMouseEvent* e);
protected:
virtual void initializeGL() override
{
@@ -60,6 +63,13 @@ protected:
emit OnPaint();
}
virtual void mouseMoveEvent(QMouseEvent* e) override
{
emit OnMouseMove(e);
QOpenGLWidget::mouseMoveEvent(e);
}
private slots:
void DestroyListener()
{
@@ -144,6 +154,8 @@ signals:
void frameSwapped();
void InnerWidgetMouseMove(QMouseEvent* event);
protected:
/**
* @brief Provides access to the color processor (nullptr if none is set)
+22 -22
View File
@@ -49,6 +49,8 @@ ViewerDisplayWidget::ViewerDisplayWidget(QWidget *parent) :
{
connect(Core::instance(), &Core::ToolChanged, this, &ViewerDisplayWidget::UpdateCursor);
connect(this, &ViewerDisplayWidget::InnerWidgetMouseMove, this, &ViewerDisplayWidget::EmitColorAtCursor);
// Initializes cursor based on tool
UpdateCursor();
}
@@ -84,7 +86,7 @@ void ViewerDisplayWidget::UpdateCursor()
void ViewerDisplayWidget::SetSignalCursorColorEnabled(bool e)
{
signal_cursor_color_ = e;
setMouseTracking(e);
inner_widget()->setMouseTracking(e);
}
void ViewerDisplayWidget::SetImage(FramePtr in_buffer)
@@ -211,27 +213,6 @@ void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event)
void ViewerDisplayWidget::mouseMoveEvent(QMouseEvent *event)
{
// Do this no matter what, emits signal to any pixel samplers
if (signal_cursor_color_) {
Color reference, display;
if (last_loaded_buffer_) {
QVector3D pixel_pos(static_cast<float>(event->x()) / static_cast<float>(width()) * 2.0f - 1.0f,
static_cast<float>(event->y()) / static_cast<float>(height()) * 2.0f - 1.0f,
0);
pixel_pos = GenerateWorldTransform().inverted() * pixel_pos;
int frame_x = qRound((pixel_pos.x() + 1.0f) * 0.5f * last_loaded_buffer_->width());
int frame_y = qRound((pixel_pos.y() + 1.0f) * 0.5f * last_loaded_buffer_->height());
reference = last_loaded_buffer_->get_pixel(frame_x, frame_y);
display = color_service()->ConvertColor(reference);
}
emit CursorColor(reference, display);
}
// Handle hand dragging
if (hand_dragging_) {
@@ -444,4 +425,23 @@ QTransform ViewerDisplayWidget::GenerateGizmoTransform()
return gizmo_transform;
}
void ViewerDisplayWidget::EmitColorAtCursor(QMouseEvent *e)
{
// Do this no matter what, emits signal to any pixel samplers
if (signal_cursor_color_) {
Color reference, display;
if (last_loaded_buffer_) {
QPointF pixel_pos = GenerateGizmoTransform().inverted().map(e->pos());
pixel_pos /= last_loaded_buffer_->video_params().divider();
reference = last_loaded_buffer_->get_pixel(qRound(pixel_pos.x()), qRound(pixel_pos.y()));
display = color_service()->ConvertColor(reference);
}
emit CursorColor(reference, display);
}
}
}
+3
View File
@@ -246,6 +246,9 @@ private:
bool deinterlace_;
private slots:
void EmitColorAtCursor(QMouseEvent* e);
};
}