#include "rm_math.h" #include 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); }