void QgsComposerItem::setItemPosition( double x, double y, double width, double height, ItemPositionMode itemPoint, bool posIncludesFrame, int page ) { double upperLeftX = x; double upperLeftY = y; if ( page > 0 ) { double h = composition()->paperHeight() + composition()->spaceBetweenPages(); upperLeftY += ( page - 1 ) * h; } //store the item position mode mLastUsedPositionMode = itemPoint; //adjust x-coordinate if placement is not done to a left point if ( itemPoint == UpperMiddle || itemPoint == Middle || itemPoint == LowerMiddle ) { upperLeftX -= width / 2.0; } else if ( itemPoint == UpperRight || itemPoint == MiddleRight || itemPoint == LowerRight ) { upperLeftX -= width; } //adjust y-coordinate if placement is not done to an upper point if ( itemPoint == MiddleLeft || itemPoint == Middle || itemPoint == MiddleRight ) { upperLeftY -= height / 2.0; } else if ( itemPoint == LowerLeft || itemPoint == LowerMiddle || itemPoint == LowerRight ) { upperLeftY -= height; } if ( posIncludesFrame ) { //adjust position to account for frame size if ( mItemRotation == 0 ) { upperLeftX += estimatedFrameBleed(); upperLeftY += estimatedFrameBleed(); } else { //adjust position for item rotation QLineF lineToItemOrigin = QLineF( 0, 0, estimatedFrameBleed(), estimatedFrameBleed() ); lineToItemOrigin.setAngle( -45 - mItemRotation ); upperLeftX += lineToItemOrigin.x2(); upperLeftY += lineToItemOrigin.y2(); } width -= 2 * estimatedFrameBleed(); height -= 2 * estimatedFrameBleed(); } setSceneRect( QRectF( upperLeftX, upperLeftY, width, height ) ); }
QRectF QgsComposerItem::rectWithFrame() const { double frameBleed = estimatedFrameBleed(); return rect().adjusted( -frameBleed, -frameBleed, frameBleed, frameBleed ); }