7 #include "FrameGraphicsItem.h"
8 #include "FrameGraphicsItem_p.h"
11 #include "MarbleDebug.h"
16 #include <QPainterPath>
17 #include <QPixmapCache>
19 #include <qdrawutil.h>
23 FrameGraphicsItem::FrameGraphicsItem( MarbleGraphicsItem *parent )
24 : ScreenGraphicsItem(new FrameGraphicsItemPrivate(this, parent))
26 Q_D(FrameGraphicsItem);
30 FrameGraphicsItem::FrameGraphicsItem(FrameGraphicsItemPrivate *dd)
31 : ScreenGraphicsItem(dd)
33 Q_D(FrameGraphicsItem);
37 FrameGraphicsItem::~FrameGraphicsItem()
41 FrameGraphicsItem::FrameType FrameGraphicsItem::frame()
const
43 Q_D(
const FrameGraphicsItem);
47 void FrameGraphicsItem::setFrame( FrameType type )
49 Q_D(FrameGraphicsItem);
51 setPadding( padding() );
54 qreal FrameGraphicsItem::margin()
const
56 Q_D(
const FrameGraphicsItem);
60 void FrameGraphicsItem::setMargin( qreal margin )
62 Q_D(FrameGraphicsItem);
68 qreal FrameGraphicsItem::marginTop()
const
70 Q_D(
const FrameGraphicsItem);
71 return d->m_marginTop;
74 void FrameGraphicsItem::setMarginTop( qreal marginTop )
76 Q_D(FrameGraphicsItem);
77 d->m_marginTop = marginTop;
82 qreal FrameGraphicsItem::marginBottom()
const
84 Q_D(
const FrameGraphicsItem);
85 return d->m_marginBottom;
88 void FrameGraphicsItem::setMarginBottom( qreal marginBottom )
90 Q_D(FrameGraphicsItem);
91 d->m_marginBottom = marginBottom;
96 qreal FrameGraphicsItem::marginLeft()
const
98 Q_D(
const FrameGraphicsItem);
99 return d->m_marginLeft;
102 void FrameGraphicsItem::setMarginLeft( qreal marginLeft )
104 Q_D(FrameGraphicsItem);
105 d->m_marginLeft = marginLeft;
110 qreal FrameGraphicsItem::marginRight()
const
112 Q_D(
const FrameGraphicsItem);
113 return d->m_marginRight;
116 void FrameGraphicsItem::setMarginRight( qreal marginRight )
118 Q_D(FrameGraphicsItem);
119 d->m_marginRight = marginRight;
124 qreal FrameGraphicsItem::borderWidth()
const
126 Q_D(
const FrameGraphicsItem);
127 return d->m_borderWidth;
130 void FrameGraphicsItem::setBorderWidth( qreal width )
132 Q_D(FrameGraphicsItem);
133 d->m_borderWidth = width;
138 qreal FrameGraphicsItem::padding()
const
140 Q_D(
const FrameGraphicsItem);
144 void FrameGraphicsItem::setPadding( qreal width )
146 Q_D(FrameGraphicsItem);
148 d->m_padding = width;
153 QBrush FrameGraphicsItem::borderBrush()
const
155 Q_D(
const FrameGraphicsItem);
156 return d->m_borderBrush;
159 void FrameGraphicsItem::setBorderBrush(
const QBrush &brush )
161 Q_D(FrameGraphicsItem);
162 d->m_borderBrush = brush;
168 Q_D(
const FrameGraphicsItem);
169 return d->m_borderStyle;
172 void FrameGraphicsItem::setBorderStyle(
Qt::PenStyle style )
174 Q_D(FrameGraphicsItem);
175 d->m_borderStyle = style;
179 QBrush FrameGraphicsItem::background()
const
181 Q_D(
const FrameGraphicsItem);
182 return d->m_backgroundBrush;
185 void FrameGraphicsItem::setBackground(
const QBrush &background )
187 Q_D(FrameGraphicsItem);
188 d->m_backgroundBrush = background;
192 QRectF FrameGraphicsItem::contentRect()
const
194 Q_D(
const FrameGraphicsItem);
195 qreal marginTop = ( d->m_marginTop == 0.0 ) ? d->m_margin : d->m_marginTop;
196 qreal marginLeft = ( d->m_marginLeft == 0.0 ) ? d->m_margin : d->m_marginLeft;
199 marginTop + d->m_padding,
200 d->m_contentSize.width(),
201 d->m_contentSize.height() );
206 QSizeF FrameGraphicsItem::contentSize()
const
208 Q_D(
const FrameGraphicsItem);
209 return d->m_contentSize;
212 QRectF FrameGraphicsItem::paintedRect()
const
214 Q_D(
const FrameGraphicsItem);
215 qreal marginTop = ( d->m_marginTop == 0.0 ) ? d->m_margin : d->m_marginTop;
216 qreal marginBottom = ( d->m_marginBottom == 0.0 ) ? d->m_margin : d->m_marginBottom;
217 qreal marginLeft = ( d->m_marginLeft == 0.0 ) ? d->m_margin : d->m_marginLeft;
218 qreal marginRight = ( d->m_marginRight == 0.0 ) ? d->m_margin : d->m_marginRight;
220 QSizeF size = this->size();
223 size.
width() - ( marginLeft + marginRight ),
224 size.
height() - ( marginTop + marginBottom ) );
228 void FrameGraphicsItem::setContentSize(
const QSizeF& size )
230 Q_D(FrameGraphicsItem);
231 d->m_contentSize = size;
237 Q_D(
const FrameGraphicsItem);
239 if ( d->m_frame == RectFrame || d->m_frame == ShadowFrame ) {
240 QRectF renderedRect = paintedRect();
243 else if ( d->m_frame == RoundedRectFrame ) {
244 QSizeF paintedSize = paintedRect().size();
251 void FrameGraphicsItem::paintBackground(
QPainter *painter )
253 Q_D(FrameGraphicsItem);
255 painter->
setPen(
QPen( d->m_borderBrush, d->m_borderWidth, d->m_borderStyle ) );
256 painter->
setBrush( d->m_backgroundBrush );
257 painter->
drawPath( backgroundShape() );
262 void FrameGraphicsItem::paint(
QPainter *painter )
264 Q_D(FrameGraphicsItem);
268 if ( frame() == ShadowFrame )
272 shadow =
QPixmap(QStringLiteral(
":/marble/frames/shadowframe.png"));
275 qDrawBorderPixmap( painter,
QRect(
QPoint( 0, 0 ), size().toSize() ),
276 QMargins( 10, 10, 10, 10 ), shadow );
279 painter->
translate( paintedRect().topLeft() );
280 paintBackground( painter );
281 painter->
translate( d->m_padding, d->m_padding );
282 paintContent( painter );
286 void FrameGraphicsItem::paintContent(
QPainter *painter )