Move variable declarations closer to its uses
Prefer using QSize than width and height separately, so we can pass it
around directly and use isEmpty
Remove duplicated code in the central piece drawing
This commit is contained in:
Aleix Pol 2014-07-14 16:49:12 +02:00
parent ae56796cb9
commit 33aa8e406d

View File

@ -795,8 +795,6 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
{ {
//qDebug() << "generating background"; //qDebug() << "generating background";
const QSize size = frameSize(frame).toSize(); const QSize size = frameSize(frame).toSize();
const int topOffset = 0;
const int leftOffset = 0;
if (!size.isValid()) { if (!size.isValid()) {
#ifndef NDEBUG #ifndef NDEBUG
@ -809,12 +807,7 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
return; return;
} }
const int contentWidth = size.width() - frame->leftWidth - frame->rightWidth; const QSize contentSize(size.width() - frame->leftWidth - frame->rightWidth, size.height() - frame->topHeight - frame->bottomHeight);
const int contentHeight = size.height() - frame->topHeight - frame->bottomHeight;
int contentTop = 0;
int contentLeft = 0;
int rightOffset = contentWidth;
int bottomOffset = contentHeight;
frame->cachedBackground = QPixmap(size); frame->cachedBackground = QPixmap(size);
frame->cachedBackground.fill(Qt::transparent); frame->cachedBackground.fill(Qt::transparent);
@ -823,34 +816,29 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
p.setRenderHint(QPainter::SmoothPixmapTransform); p.setRenderHint(QPainter::SmoothPixmapTransform);
//CENTER //CENTER
if (frame->tileCenter) { if (!contentSize.isEmpty()) {
if (contentHeight > 0 && contentWidth > 0) { const QString centerElementId = prefix % "center";
QSize centerTileSize = q->elementSize(prefix % "center"); if (frame->tileCenter) {
QSize centerTileSize = q->elementSize(centerElementId);
QPixmap center(centerTileSize); QPixmap center(centerTileSize);
center.fill(Qt::transparent); center.fill(Qt::transparent);
{ QPainter centerPainter(&center);
QPainter centerPainter(&center); centerPainter.setCompositionMode(QPainter::CompositionMode_Source);
centerPainter.setCompositionMode(QPainter::CompositionMode_Source); q->paint(&centerPainter, QRect(QPoint(0, 0), centerTileSize),centerElementId);
q->paint(&centerPainter, QRect(QPoint(0, 0), centerTileSize), prefix % "center");
}
if (frame->composeOverBorder) { if (frame->composeOverBorder) {
p.drawTiledPixmap(QRect(QPoint(0, 0), size), center); p.drawTiledPixmap(QRect(QPoint(0, 0), size), center);
} else { } else {
p.drawTiledPixmap(QRect(frame->leftWidth, frame->topHeight, p.drawTiledPixmap(QRect(QPoint(frame->leftWidth, frame->topHeight), contentSize), center);
contentWidth, contentHeight), center);
} }
} } else {
} else {
if (contentHeight > 0 && contentWidth > 0) {
if (frame->composeOverBorder) { if (frame->composeOverBorder) {
q->paint(&p, QRect(QPoint(0, 0), size), q->paint(&p, QRect(QPoint(0, 0), size),
prefix % "center"); centerElementId);
} else { } else {
q->paint(&p, QRect(frame->leftWidth, frame->topHeight, q->paint(&p, QRect(QPoint(frame->leftWidth, frame->topHeight), contentSize),
contentWidth, contentHeight), centerElementId);
prefix % "center");
} }
} }
} }
@ -861,6 +849,10 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
p.setCompositionMode(QPainter::CompositionMode_SourceOver); p.setCompositionMode(QPainter::CompositionMode_SourceOver);
} }
int contentTop = 0;
int contentLeft = 0;
int rightOffset = contentSize.width();
int bottomOffset = contentSize.height();
if (frame->enabledBorders & FrameSvg::LeftBorder && q->hasElement(prefix % "left")) { if (frame->enabledBorders & FrameSvg::LeftBorder && q->hasElement(prefix % "left")) {
rightOffset += frame->leftWidth; rightOffset += frame->leftWidth;
} }
@ -875,6 +867,8 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
contentLeft = frame->leftWidth; contentLeft = frame->leftWidth;
} }
const int topOffset = 0;
const int leftOffset = 0;
paintCorner(p, frame, FrameSvg::LeftBorder|FrameSvg::TopBorder, QRect(leftOffset, topOffset, frame->leftWidth, frame->topHeight)); paintCorner(p, frame, FrameSvg::LeftBorder|FrameSvg::TopBorder, QRect(leftOffset, topOffset, frame->leftWidth, frame->topHeight));
paintCorner(p, frame, FrameSvg::RightBorder|FrameSvg::TopBorder, QRect(rightOffset, topOffset, frame->rightWidth, frame->topHeight)); paintCorner(p, frame, FrameSvg::RightBorder|FrameSvg::TopBorder, QRect(rightOffset, topOffset, frame->rightWidth, frame->topHeight));
paintCorner(p, frame, FrameSvg::LeftBorder|FrameSvg::BottomBorder, QRect(leftOffset, bottomOffset, frame->leftWidth, frame->bottomHeight)); paintCorner(p, frame, FrameSvg::LeftBorder|FrameSvg::BottomBorder, QRect(leftOffset, bottomOffset, frame->leftWidth, frame->bottomHeight));
@ -882,12 +876,12 @@ void FrameSvgPrivate::generateFrameBackground(FrameData *frame)
// Sides // Sides
const int leftHeight = q->elementSize(prefix % "left").height(); const int leftHeight = q->elementSize(prefix % "left").height();
paintBorder(p, frame, FrameSvg::LeftBorder, QSize(frame->leftWidth, leftHeight), QRect(leftOffset, contentTop, frame->leftWidth, contentHeight)); paintBorder(p, frame, FrameSvg::LeftBorder, QSize(frame->leftWidth, leftHeight), QRect(leftOffset, contentTop, frame->leftWidth, contentSize.height()));
paintBorder(p, frame, FrameSvg::RightBorder, QSize(frame->rightWidth, leftHeight), QRect(rightOffset, contentTop, frame->rightWidth, contentHeight)); paintBorder(p, frame, FrameSvg::RightBorder, QSize(frame->rightWidth, leftHeight), QRect(rightOffset, contentTop, frame->rightWidth, contentSize.height()));
const int topWidth = q->elementSize(prefix % "top").width(); const int topWidth = q->elementSize(prefix % "top").width();
paintBorder(p, frame, FrameSvg::TopBorder, QSize(topWidth, frame->topHeight), QRect(contentLeft, topOffset, contentWidth, frame->topHeight)); paintBorder(p, frame, FrameSvg::TopBorder, QSize(topWidth, frame->topHeight), QRect(contentLeft, topOffset, contentSize.width(), frame->topHeight));
paintBorder(p, frame, FrameSvg::BottomBorder, QSize(topWidth, frame->bottomHeight), QRect(contentLeft, bottomOffset, contentWidth, frame->bottomHeight)); paintBorder(p, frame, FrameSvg::BottomBorder, QSize(topWidth, frame->bottomHeight), QRect(contentLeft, bottomOffset, contentSize.width(), frame->bottomHeight));
} }
void FrameSvgPrivate::paintBorder(QPainter& p, FrameData* frame, const FrameSvg::EnabledBorders borders, const QSize& size, const QRect& output) const void FrameSvgPrivate::paintBorder(QPainter& p, FrameData* frame, const FrameSvg::EnabledBorders borders, const QSize& size, const QRect& output) const