75 , m_currentinitialScale(0) |
75 , m_currentinitialScale(0) |
76 , m_previousViewPortwidth(size().toSize().width()) |
76 , m_previousViewPortwidth(size().toSize().width()) |
77 , m_bitmapImage(NULL) |
77 , m_bitmapImage(NULL) |
78 , m_checkeredBoxPixmap(NULL) |
78 , m_checkeredBoxPixmap(NULL) |
79 { |
79 { |
80 qDebug() << "GWebContentViewWidget::GWebContentViewWidget: page=" << pg; |
80 setParent(parent); |
81 setParent(parent); |
|
82 if ( pg ) { |
81 if ( pg ) { |
83 setPage(pg); |
82 setPage(pg); |
84 } |
83 } |
85 #ifdef ENABLE_PERF_TRACE |
84 #ifdef ENABLE_PERF_TRACE |
86 WrtPerfTracer::tracer()->initPage(pg); |
85 WrtPerfTracer::tracer()->initPage(pg); |
87 #endif //ENABLE_PERF_TRACE |
86 #endif //ENABLE_PERF_TRACE |
88 |
87 |
89 m_currentinitialScale = zoomFactor(); |
88 m_currentinitialScale = zoomFactor(); |
90 //connect(this->page()->mainFrame(), SIGNAL(initialLayoutCompleted()), this, SLOT(onInitLayout())); |
89 |
91 #ifndef NO_QSTM_GESTURE |
90 #ifndef NO_QSTM_GESTURE |
92 m_touchNavigation = new WebTouchNavigation(this); |
91 m_touchNavigation = new WebTouchNavigation(this); |
93 #endif |
92 #endif |
94 // Fixes missing radio button problem with certain themes |
93 // Fixes missing radio button problem with certain themes |
95 QPalette pal = palette(); |
94 QPalette pal = palette(); |
119 |
118 |
120 void GWebContentViewWidget::setCheckeredPixmap() |
119 void GWebContentViewWidget::setCheckeredPixmap() |
121 { |
120 { |
122 delete m_checkeredBoxPixmap; |
121 delete m_checkeredBoxPixmap; |
123 m_checkeredBoxPixmap = NULL; |
122 m_checkeredBoxPixmap = NULL; |
124 int checkerPixmapSizeX = size().toSize().width(); |
|
125 int checkerPixmapSizeY = size().toSize().height() + 50; |
|
126 m_checkeredBoxPixmap = new QPixmap(checkerSize, checkerSize); |
123 m_checkeredBoxPixmap = new QPixmap(checkerSize, checkerSize); |
127 QPainter painter(m_checkeredBoxPixmap); |
124 QPainter painter(m_checkeredBoxPixmap); |
128 painter.fillRect(0, 0, checkerSize, checkerSize, QColor(checkerColor1)); |
125 painter.fillRect(0, 0, checkerSize, checkerSize, QColor(checkerColor1)); |
129 painter.fillRect(0, checkerSize/2, checkerSize/2, checkerSize/2, QColor(checkerColor2)); |
126 painter.fillRect(0, checkerSize/2, checkerSize/2, checkerSize/2, QColor(checkerColor2)); |
130 painter.fillRect(checkerSize/2, 0, checkerSize/2, checkerSize/2, QColor(checkerColor2)); |
127 painter.fillRect(checkerSize/2, 0, checkerSize/2, checkerSize/2, QColor(checkerColor2)); |
150 m_bitmapImage = NULL; |
147 m_bitmapImage = NULL; |
151 } |
148 } |
152 } |
149 } |
153 |
150 |
154 void GWebContentViewWidget::updateFrozenImage() { |
151 void GWebContentViewWidget::updateFrozenImage() { |
155 // Take a snapshot for to be displayed while in frozen state. |
152 // Take a snapshot to be displayed while in frozen state. |
156 QStyleOptionGraphicsItem opt; |
153 |
157 opt.levelOfDetail = 1.0; |
154 QStyleOptionGraphicsItem option; |
158 opt.exposedRect = QRectF(QPointF(0,0), size()); |
155 option.levelOfDetail = 1.0; |
159 |
156 option.exposedRect = QRectF(QPointF(0,0), size()); |
160 m_frozenPixmap = new QPixmap(opt.exposedRect.size().toSize()); |
157 |
161 QPainter painter(m_frozenPixmap); |
158 // Discard existing pixmap. |
162 paint(&painter, &opt); |
159 delete m_frozenPixmap; |
163 |
160 m_frozenPixmap = 0; |
164 if(!isEnabled()) { |
161 |
165 // Disabled, apply whitewash. |
162 // Paint the window into a new pixmap (m_frozenPixmap must be 0 here for this to work). |
166 |
163 QPixmap *frozenPixmap = new QPixmap(option.exposedRect.size().toSize()); |
167 painter.setOpacity(ChromeEffect::disabledOpacity); |
164 QPainter painter(frozenPixmap); |
168 painter.fillRect(opt.exposedRect, ChromeEffect::disabledColor); |
165 paint(&painter, &option); |
169 } |
|
170 painter.end(); |
166 painter.end(); |
|
167 |
|
168 // Now point m_frozenPixmap at the new pixmap. |
|
169 m_frozenPixmap = frozenPixmap; |
171 } |
170 } |
172 |
171 |
173 QImage GWebContentViewWidget::getPageSnapshot() |
172 QImage GWebContentViewWidget::getPageSnapshot() |
174 { |
173 { |
175 QImage img(size().toSize(), QImage::Format_RGB32); |
174 QImage img(size().toSize(), QImage::Format_RGB32); |
199 void GWebContentViewWidget::updateViewportSize(::QGraphicsSceneResizeEvent* e) |
198 void GWebContentViewWidget::updateViewportSize(::QGraphicsSceneResizeEvent* e) |
200 { |
199 { |
201 //if there is change in mode (like landscape, potraite relayout the content) |
200 //if there is change in mode (like landscape, potraite relayout the content) |
202 if (e->newSize().width() == e->oldSize().width()) |
201 if (e->newSize().width() == e->oldSize().width()) |
203 return; |
202 return; |
|
203 |
|
204 //if page is empty do not update |
|
205 if (page()->currentFrame()->url().isEmpty()) |
|
206 return; |
|
207 |
204 m_isResize = true; |
208 m_isResize = true; |
205 setViewportSize(); |
209 setViewportSize(); |
206 m_isResize = false; |
210 m_isResize = false; |
207 } |
211 } |
208 |
212 |
224 return QGraphicsWebView::event(e); |
228 return QGraphicsWebView::event(e); |
225 } |
229 } |
226 |
230 |
227 void GWebContentViewWidget::resizeEvent(QGraphicsSceneResizeEvent* e) |
231 void GWebContentViewWidget::resizeEvent(QGraphicsSceneResizeEvent* e) |
228 { |
232 { |
229 |
|
230 // set the fixed text layout size for text wrapping |
233 // set the fixed text layout size for text wrapping |
231 #if defined CWRTINTERNALWEBKIT |
234 #if defined CWRTINTERNALWEBKIT |
232 if (page()) { |
235 if (page()) { |
233 p->m_webPage->settings()->setMaximumTextColumnWidth(e->newSize().width() - 6); |
236 p->m_webPage->settings()->setMaximumTextColumnWidth(e->newSize().width() - 6); |
234 } |
237 } |
255 page()->setViewportSize(s); |
258 page()->setViewportSize(s); |
256 } |
259 } |
257 |
260 |
258 updateViewportSize(e); |
261 updateViewportSize(e); |
259 |
262 |
260 if(frozen()) |
263 if(frozen()) { |
261 updateFrozenImage(); |
264 updateFrozenImage(); |
262 } |
265 // if(m_frozenPixmap && (m_frozenPixmap->size() != this->size())) { |
263 |
266 // QTimer::singleShot(50, this, SLOT(updateFrozenImage())); |
264 void GWebContentViewWidget::contextMenuEvent(::QGraphicsSceneContextMenuEvent *event) { |
267 // } |
265 QWebHitTestResult hitTest = page()->currentFrame()->hitTestContent(event->pos().toPoint()); |
268 } |
266 qDebug() << "GWebContentViewWidget::contextMenuEvent:" |
269 } |
267 << "\n\t pos=" << hitTest.pos() |
270 |
268 << "\n\t linkUrl=" << hitTest.linkUrl() |
271 void GWebContentViewWidget::onLongPressEvent(QPoint pos) { |
269 << "\n\t imageUrl=" << hitTest.imageUrl(); |
272 QWebHitTestResult hitTest = page()->currentFrame()->hitTestContent(pos); |
270 |
273 //qDebug() << "GWebContentViewWidget::contextMenuEvent:" |
271 WebViewEventContext *context = |
274 // << "\n\t pos=" << hitTest.pos() |
272 new WebViewEventContext(view()->type(), hitTest); |
275 // << "\n\t linkUrl=" << hitTest.linkUrl() |
|
276 // << "\n\t imageUrl=" << hitTest.imageUrl(); |
|
277 |
|
278 ::WebViewEventContext *context = |
|
279 new ::WebViewEventContext(view()->type(), hitTest); |
273 |
280 |
274 if (m_webContentView && m_webContentView->currentPageIsSuperPage()) { |
281 if (m_webContentView && m_webContentView->currentPageIsSuperPage()) { |
275 // Let the superpage handle the event. |
282 // Let the superpage handle the event. |
276 m_webContentView->currentSuperPage()->onContextEvent(context); |
283 m_webContentView->currentSuperPage()->onContextEvent(context); |
277 } |
284 } |
278 else { |
285 else { |
279 // Send the event directly. |
286 // Send the event directly. |
280 emit contextEvent(context); |
287 emit contextEvent(context); |
281 } |
288 } |
|
289 } |
|
290 |
|
291 void GWebContentViewWidget::contextMenuEvent(::QGraphicsSceneContextMenuEvent *event) { |
|
292 // Ignore. The touch navigation code handles long presses. |
282 event->accept(); |
293 event->accept(); |
283 } |
294 } |
284 |
295 |
285 void GWebContentViewWidget::setZoomFactor(qreal zoom) |
296 void GWebContentViewWidget::setZoomFactor(qreal zoom) |
286 { |
297 { |
290 |
301 |
291 setPageZoomFactor(zoom); |
302 setPageZoomFactor(zoom); |
292 } |
303 } |
293 |
304 |
294 void GWebContentViewWidget::setPageZoomFactor(qreal zoom) |
305 void GWebContentViewWidget::setPageZoomFactor(qreal zoom) |
295 { |
306 { |
296 //not zooming if it's bookmark or historyview or not a page |
307 //not zooming if it's bookmark or historyview or not a page |
297 if (!page() || |
308 if (!page() || |
298 (m_webContentView->type() == "webView" && |
309 (m_webContentView->type() == "webView" && |
299 m_webContentView->currentPageIsSuperPage()) ) |
310 m_webContentView->currentPageIsSuperPage()) ) |
300 { |
311 { |
529 |
544 |
530 void GWebContentViewWidget::setPage(QWebPage* pg) |
545 void GWebContentViewWidget::setPage(QWebPage* pg) |
531 { |
546 { |
532 if (m_wrtPage == pg) return; |
547 if (m_wrtPage == pg) return; |
533 |
548 |
534 qDebug() << "GWebContentViewWidget::setPage: " << pg; |
|
535 if (m_wrtPage) { |
549 if (m_wrtPage) { |
536 disconnect(page()->mainFrame(), 0, this, 0); |
550 disconnect(page()->mainFrame(), 0, this, 0); |
537 m_wrtPage->setView(0); |
551 m_wrtPage->setView(0); |
538 } |
552 } |
539 /* Reset the webview page as well - for its internal clean up */ |
553 /* Reset the webview page as well - for its internal clean up */ |
584 //calculating the center of the widget |
598 //calculating the center of the widget |
585 QPoint widgetCenter = rect().center().toPoint(); |
599 QPoint widgetCenter = rect().center().toPoint(); |
586 //find the content size before applying zoom |
600 //find the content size before applying zoom |
587 QSize docSizeBeforeZoom = page()->mainFrame()->contentsSize(); |
601 QSize docSizeBeforeZoom = page()->mainFrame()->contentsSize(); |
588 |
602 |
589 qDebug()<<"setPageCenterZoomFactor() : "<<zoom; |
|
590 setZoomFactor(zoom); |
603 setZoomFactor(zoom); |
591 //after applying zoom calculate the document size and document center point |
604 //after applying zoom calculate the document size and document center point |
592 QSize docSizeAfterZoom = page()->mainFrame()->contentsSize(); |
605 QSize docSizeAfterZoom = page()->mainFrame()->contentsSize(); |
593 QPoint docPoint = widgetCenter + page()->mainFrame()->scrollPosition(); |
606 QPoint docPoint = widgetCenter + page()->mainFrame()->scrollPosition(); |
594 |
607 |