65 lines
2.2 KiB
C++
65 lines
2.2 KiB
C++
#include "rm_math.h"
|
|
#include <qmath.h>
|
|
|
|
float QAspectScaleFit(QSize sourceSize, QRect destRect)
|
|
{
|
|
QSize destSize = destRect.size();
|
|
float scaleW = (float)destSize.width() / (float)sourceSize.width();
|
|
float scaleH = (float)destSize.height() / (float)sourceSize.height();
|
|
return qMin(scaleW, scaleH);
|
|
}
|
|
QRect QRectFRound(QRectF r)
|
|
{
|
|
double xmin = floor(r.left());
|
|
double ymin = floor(r.top());
|
|
|
|
double width = ceil(r.width() + (r.left()-xmin));
|
|
double height = ceil(r.height() + (r.top()-ymin));
|
|
return QRect(xmin,ymin,width,height);
|
|
}
|
|
|
|
// Fit
|
|
QRect QRectAspectFitRect(QSize sourceSize, QRect destRect)
|
|
{
|
|
QSize destSize = destRect.size();
|
|
float destScale = QAspectScaleFit(sourceSize, destRect);
|
|
|
|
float newWidth = (float)sourceSize.width() * destScale;
|
|
float newHeight = (float)sourceSize.height() * destScale;
|
|
|
|
float dWidth = (((float)destSize.width() - newWidth) / 2.0f);
|
|
float dHeight = (((float)destSize.height() - newHeight) / 2.0f);
|
|
|
|
QRect rect = QRect(dWidth + destRect.left(), dHeight + destRect.top(), newWidth, newHeight);
|
|
return rect;
|
|
}
|
|
QRect QRectCenter(QSize sourceSize, QRect destRect)
|
|
{
|
|
int xo = (destRect.width() - sourceSize.width()) / 2;
|
|
int yo = (destRect.height() - sourceSize.height()) / 2;
|
|
return QRect(destRect.left()+xo,destRect.top()+yo,sourceSize.width(),sourceSize.height());
|
|
}
|
|
|
|
QRect QRectAspectFillRect(QSize sourceSize, QRect destRect)
|
|
{
|
|
QSize destSize = destRect.size();
|
|
float destScale = QAspectScaleFill(sourceSize, destRect);
|
|
|
|
float newWidth = (float)sourceSize.width() * destScale;
|
|
float newHeight = (float)sourceSize.height() * destScale;
|
|
|
|
float dWidth = (((float)destSize.width() - newWidth) / 2.0f);
|
|
float dHeight = (((float)destSize.height() - newHeight) / 2.0f);
|
|
|
|
// l,t,r,b
|
|
QRect rect = QRect(dWidth + destRect.left(), dHeight + destRect.top(), newWidth, newHeight);
|
|
return rect;
|
|
}
|
|
float QAspectScaleFill(QSize sourceSize, QRect destRect)
|
|
{
|
|
QSize destSize = destRect.size();
|
|
float scaleW = (float)destSize.width() / (float)sourceSize.width();
|
|
float scaleH = (float)destSize.height() / (float)sourceSize.height();
|
|
return qMax(scaleW, scaleH);
|
|
}
|