40 \brief Draws the background. |
40 \brief Draws the background. |
41 |
41 |
42 \internal |
42 \internal |
43 */ |
43 */ |
44 |
44 |
45 HbBackgroundItem::HbBackgroundItem(HbMainWindow *mainWindow, QGraphicsWidget *parent) : |
45 HbBackgroundItem::HbBackgroundItem(HbMainWindow *mainWindow, QGraphicsWidget *parent) |
46 HbWidget(parent), |
46 : HbWidgetBase(parent), |
47 mMainWindow(mainWindow), |
47 mMainWindow(mainWindow), |
48 mImageMode(Hb::ScaleBackgroundToFit) |
48 mImageMode(Hb::ScaleBackgroundToFit) |
49 { |
49 { |
50 setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); |
50 setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); |
|
51 |
|
52 // paint() will be called from HbMainWindow's drawBackground (which is more |
|
53 // efficient due to the clipping it sets) so do not let the graphicsview |
|
54 // call it directly. |
|
55 setFlag(QGraphicsItem::ItemHasNoContents, true); |
|
56 |
51 mPrtImageName = defaultImageName(Qt::Vertical); |
57 mPrtImageName = defaultImageName(Qt::Vertical); |
52 mLscImageName = defaultImageName(Qt::Horizontal); |
58 mLscImageName = defaultImageName(Qt::Horizontal); |
53 updateBackgroundImage(); |
59 updateBackgroundImage(); |
54 } |
|
55 |
|
56 HbBackgroundItem::~HbBackgroundItem() |
|
57 { |
|
58 } |
60 } |
59 |
61 |
60 void HbBackgroundItem::setImageName(Qt::Orientation orientation, const QString &name) |
62 void HbBackgroundItem::setImageName(Qt::Orientation orientation, const QString &name) |
61 { |
63 { |
62 bool changed = false; |
64 bool changed = false; |
101 return mImageMode; |
103 return mImageMode; |
102 } |
104 } |
103 |
105 |
104 void HbBackgroundItem::updateBackgroundImage() |
106 void HbBackgroundItem::updateBackgroundImage() |
105 { |
107 { |
106 prepareGeometryChange(); |
|
107 if (mMainWindow) { |
108 if (mMainWindow) { |
108 QSizeF size(HbDeviceProfile::profile(mMainWindow).logicalSize()); |
109 QSizeF size(HbDeviceProfile::profile(mMainWindow).logicalSize()); |
109 mBoundingRect.setWidth(size.width()); |
110 mBoundingRect.setWidth(size.width()); |
110 mBoundingRect.setHeight(size.height()); |
111 mBoundingRect.setHeight(size.height()); |
111 if (mMainWindow->orientation() == Qt::Vertical) { |
112 if (mMainWindow->orientation() == Qt::Vertical) { |
120 || (imageSize.width() <= size.width() && imageSize.height() <= size.height())) { |
121 || (imageSize.width() <= size.width() && imageSize.height() <= size.height())) { |
121 size = imageSize; |
122 size = imageSize; |
122 } |
123 } |
123 } |
124 } |
124 mBackground.setSize(size); |
125 mBackground.setSize(size); |
|
126 if (mMainWindow->scene()) { |
|
127 mMainWindow->scene()->invalidate(boundingRect()); |
|
128 } |
125 } |
129 } |
126 } |
130 } |
127 |
131 |
128 void HbBackgroundItem::resizeEvent(QGraphicsSceneResizeEvent *event) |
132 void HbBackgroundItem::resizeEvent(QGraphicsSceneResizeEvent *event) |
129 { |
133 { |
130 HbWidget::resizeEvent(event); |
134 HbWidgetBase::resizeEvent(event); |
131 |
135 |
132 // RnD feature for resizing the window by dragging |
136 // RnD feature for resizing the window by dragging |
133 if (HbMainWindowPrivate::dragToResizeEnabled) { |
137 if (HbMainWindowPrivate::dragToResizeEnabled) { |
134 prepareGeometryChange(); |
|
135 if (mMainWindow) { |
138 if (mMainWindow) { |
136 QSizeF size(event->newSize()); |
139 QSizeF size(event->newSize()); |
137 mBoundingRect.setWidth(size.width()); |
140 mBoundingRect.setWidth(size.width()); |
138 mBoundingRect.setHeight(size.height()); |
141 mBoundingRect.setHeight(size.height()); |
139 mBackground.setSize(size); |
142 mBackground.setSize(size); |
|
143 if (mMainWindow->scene()) { |
|
144 mMainWindow->scene()->invalidate(mBoundingRect); |
|
145 } |
140 } |
146 } |
141 } |
147 } |
142 } |
148 } |
143 |
149 |
144 bool HbBackgroundItem::event(QEvent *e) |
150 bool HbBackgroundItem::event(QEvent *e) |
145 { |
151 { |
146 if (e->type() == QEvent::Polish) { |
152 if (e->type() == HbEvent::DeviceProfileChanged) { |
147 // No need for any real polishing. |
153 updateBackgroundImage(); |
148 static_cast<HbWidgetPrivate *>(d_ptr)->polished = true; |
154 } else if (e->type() == QEvent::FontChange || |
|
155 e->type() == QEvent::PaletteChange || |
|
156 e->type() == QEvent::ParentChange || |
|
157 e->type() == QEvent::Polish) { |
149 return true; |
158 return true; |
150 } else if (e->type() == HbEvent::DeviceProfileChanged) { |
|
151 updateBackgroundImage(); |
|
152 } |
159 } |
153 return HbWidget::event(e); |
160 return HbWidgetBase::event(e); |
154 } |
161 } |
155 |
162 |
156 QRectF HbBackgroundItem::boundingRect() const |
163 QRectF HbBackgroundItem::boundingRect() const |
157 { |
164 { |
158 return mBoundingRect; |
165 return mBoundingRect; |