ginebra2/ContentViews/GWebContentViewWidget.cpp
changeset 6 1c3b8676e58c
parent 5 0f2326c2a325
child 10 232fbd5a2dcb
equal deleted inserted replaced
5:0f2326c2a325 6:1c3b8676e58c
    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       {
   498             painter->restore();
   509             painter->restore();
   499         }
   510         }
   500 
   511 
   501     }
   512     }
   502 
   513 
       
   514     if(!isEnabled()) {
       
   515         // Disabled, apply whitewash.
       
   516         ChromeEffect::paintDisabledRect(painter, option->exposedRect);
       
   517     }
   503 #ifdef ENABLE_PERF_TRACE
   518 #ifdef ENABLE_PERF_TRACE
   504     PERF_DEBUG() << "GWebContentViewWidget::paint__end: " <<
   519     PERF_DEBUG() << "GWebContentViewWidget::paint__end: " <<
   505         WrtPerfTracer::tracer()->elapsedTime(st) << "\n";
   520         WrtPerfTracer::tracer()->elapsedTime(st) << "\n";
   506 #endif
   521 #endif
   507 }
   522 }
   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