first commit
This commit is contained in:
64
project/fm_viewer/core/rm_math.cpp
Normal file
64
project/fm_viewer/core/rm_math.cpp
Normal file
@@ -0,0 +1,64 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user