67 lines
1.8 KiB
C++
67 lines
1.8 KiB
C++
#include "rm_widget_zoom_pos.h"
|
|
|
|
#include <QPainter>
|
|
#include "../rm_include.h"
|
|
#include "../core/rm_math.h"
|
|
|
|
RMWidgetZoomPos::RMWidgetZoomPos(QWidget *parent) : QWidget(parent)
|
|
{
|
|
_x = 0.25;
|
|
_y = 0.25;
|
|
_startX = 0.25;
|
|
_startY = 0.25;
|
|
}
|
|
#if (USE_ZOOM_WH_RATIO)
|
|
void RMWidgetZoomPos::paintEvent(QPaintEvent *event)
|
|
{
|
|
Q_UNUSED(event);
|
|
|
|
QPen pen(Qt::red);
|
|
_painter.begin(this);
|
|
_painter.setPen(pen);
|
|
_painter.setRenderHint(QPainter::Antialiasing, false);
|
|
|
|
// ROI 는 영상/화면 비율과 관계없으나 표시 영역은 관계가 있음.
|
|
// 사용할 수 있는 넓이 = height * WHR (width/height ratio)
|
|
int widthDiff = (size().width() - (int)(((double)size().height()) * _whr));
|
|
//QRect max = QRect(widthDiff,0,size.width()-widthDiff,size().height());
|
|
|
|
QSize s = QSize((size().width() - widthDiff) / 2,size().height() / 2);
|
|
|
|
// ROI 로 계산한 영역
|
|
QRect box = QRect(_x * size().width() + (widthDiff / 2),_y * size().height(),s.width(),s.height());
|
|
|
|
if(box.right() >= (size().width() - (widthDiff / 2)))
|
|
{
|
|
box = QRect(box.x() -(widthDiff / 2),box.y(),box.width(),box.height());
|
|
}
|
|
|
|
// 비디오 영역도 처리
|
|
//box = QRectAspect(box,_whr);
|
|
|
|
_painter.drawRect(box);
|
|
_painter.end();
|
|
}
|
|
#else
|
|
void RMWidgetZoomPos::paintEvent(QPaintEvent *event)
|
|
{
|
|
Q_UNUSED(event);
|
|
|
|
QPen pen(Qt::red);
|
|
_painter.begin(this);
|
|
_painter.setPen(pen);
|
|
_painter.setRenderHint(QPainter::Antialiasing, false);
|
|
QSize s = size() / 2;
|
|
QRect box = QRect(_x * size().width(),_y * size().height(),s.width(),s.height());
|
|
_painter.drawRect(box);
|
|
_painter.end();
|
|
}
|
|
#endif // #if (USE_ZOOM_WH_RATIO)
|
|
void RMWidgetZoomPos::setPos(float x, float y)
|
|
{
|
|
//qInfo() << whr;
|
|
_x = MIN(MAX(_startX + x,0),0.5);
|
|
_y = MIN(MAX(_startY + y,0),0.5);
|
|
update();
|
|
}
|