#include "ImageWidget.h"
#include "ui_ImageWidget.h"
#include <QPainter>

ImageWidget::ImageWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::ImageWidget),
    isDragging(false),
    imageOffset(0, 0)
{
    ui->setupUi(this);
}

ImageWidget::~ImageWidget()
{
    delete ui;
}

void ImageWidget::setPixmap(const QPixmap& newPixmap) {
    this->pixmap = newPixmap;
    imageOffset = QPoint(0, 0); // 重置图片偏移量为(0, 0)
    update(); // 触发重绘
}

void ImageWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    if (!pixmap.isNull()) {
        // 计算图片左上角坐标,使得图片中心与控件中心对齐
        int centerX = width() / 2;
        int centerY = height() / 2;
        int pixmapCenterX = pixmap.width() / 2;
        int pixmapCenterY = pixmap.height() / 2;
        int x = centerX - pixmapCenterX + imageOffset.x();
        int y = centerY - pixmapCenterY + imageOffset.y();
        painter.drawPixmap(x, y, pixmap);
    }
}

void ImageWidget::mousePressEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        lastMousePos = event->pos(); // 记录鼠标按下时的位置
        isDragging = true; // 设置正在拖动的标志
    }
}

void ImageWidget::mouseMoveEvent(QMouseEvent *event) {
    if (isDragging && (event->buttons() & Qt::LeftButton)) {
        QPoint delta = event->pos() - lastMousePos; // 计算鼠标移动的偏移量
        imageOffset += delta; // 更新图片的偏移量
        lastMousePos = event->pos(); // 更新鼠标位置
        update();
    }
}

void ImageWidget::mouseReleaseEvent(QMouseEvent *event) {
    if (event->button() == Qt::LeftButton) {
        isDragging = false; // 重置正在拖动的标志
    }
}