qreal Layout::margin(Plasma::MarginEdge edge) const { qreal m = 0; switch (edge) { case LeftMargin: getContentsMargins(&m,0,0,0); case TopMargin: getContentsMargins(0,&m,0,0); case RightMargin: getContentsMargins(0,0,&m,0); case BottomMargin: getContentsMargins(0,0,0,&m); } return m; } QRectF Layout::adjustToMargins(const QRectF &rect) const { QRectF r(rect); qreal leftMargin,topMargin,rightMargin,bottomMargin; getContentsMargins(&leftMargin,&topMargin,&rightMargin,&bottomMargin); if (r.x() <= leftMargin) { r.setX(leftMargin); } if (r.y() <= topMargin) { r.setY(topMargin); } QPointF tl = topLeft(); qreal maxWidth = geometry().size().width() + tl.x() - leftMargin - rightMargin; if (r.width() > maxWidth) { r.setWidth(maxWidth); } qreal maxHeight = geometry().size().height() + tl.y() - topMargin - bottomMargin; if (r.height() > maxHeight) { r.setHeight(maxHeight); } return r; }