Home | History | Annotate | Download | only in QtLauncher
      1 /*
      2  * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
      3  * Copyright (C) 2009 Girish Ramakrishnan <girish (at) forwardbias.in>
      4  * Copyright (C) 2006 George Staikos <staikos (at) kde.org>
      5  * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org>
      6  * Copyright (C) 2006 Zack Rusin <zack (at) kde.org>
      7  * Copyright (C) 2006 Simon Hausmann <hausmann (at) kde.org>
      8  *
      9  * All rights reserved.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions and the following disclaimer.
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in the
     18  *    documentation and/or other materials provided with the distribution.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     21  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     28  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     30  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 #include "webview.h"
     34 
     35 #include <QtGui>
     36 #include <QGraphicsScene>
     37 
     38 WebViewGraphicsBased::WebViewGraphicsBased(QWidget* parent)
     39     : QGraphicsView(parent)
     40     , m_item(new GraphicsWebView)
     41     , m_numPaintsTotal(0)
     42     , m_numPaintsSinceLastMeasure(0)
     43     , m_measureFps(false)
     44 {
     45     setScene(new QGraphicsScene(this));
     46     scene()->addItem(m_item);
     47 
     48     setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     49     setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     50 
     51 }
     52 
     53 void WebViewGraphicsBased::resizeEvent(QResizeEvent* event)
     54 {
     55     QGraphicsView::resizeEvent(event);
     56     QRectF rect(QPoint(0, 0), event->size());
     57     m_item->setGeometry(rect);
     58 }
     59 
     60 void WebViewGraphicsBased::enableFrameRateMeasurement()
     61 {
     62     m_measureFps = true;
     63     m_lastConsultTime = m_startTime = QTime::currentTime();
     64     QTimer* updateTimer = new QTimer(this);
     65     updateTimer->setInterval(1000);
     66     connect(updateTimer, SIGNAL(timeout()), this, SLOT(updateFrameRate()));
     67     updateTimer->start();
     68 }
     69 
     70 void WebViewGraphicsBased::updateFrameRate()
     71 {
     72     QTime now = QTime::currentTime();
     73 
     74     int interval = m_lastConsultTime.msecsTo(now);
     75     int total = m_startTime.msecsTo(now);
     76 
     77     int average = total ? m_numPaintsTotal * 1000 / total : 0;
     78     int current = interval ? m_numPaintsSinceLastMeasure * 1000 / interval : 0;
     79 
     80     qDebug("[FPS] average: %d, current: %d", average, current);
     81 
     82     m_lastConsultTime = now;
     83     m_numPaintsSinceLastMeasure = 0;
     84 }
     85 
     86 void WebViewGraphicsBased::paintEvent(QPaintEvent* event)
     87 {
     88     QGraphicsView::paintEvent(event);
     89     if (!m_measureFps)
     90         return;
     91     m_numPaintsSinceLastMeasure++;
     92     m_numPaintsTotal++;
     93 }
     94 
     95 static QMenu* createContextMenu(QWebPage* page, QPoint position)
     96 {
     97     QMenu* menu = page->createStandardContextMenu();
     98 
     99     QWebHitTestResult r = page->mainFrame()->hitTestContent(position);
    100 
    101     if (!r.linkUrl().isEmpty()) {
    102         WebPage* webPage = qobject_cast<WebPage*>(page);
    103         QAction* newTabAction = menu->addAction("Open in Default &Browser", webPage, SLOT(openUrlInDefaultBrowser()));
    104         newTabAction->setData(r.linkUrl());
    105         menu->insertAction(menu->actions().at(2), newTabAction);
    106     }
    107     return menu;
    108 }
    109 
    110 void GraphicsWebView::mousePressEvent(QGraphicsSceneMouseEvent* event)
    111 {
    112     setProperty("mouseButtons", QVariant::fromValue(int(event->buttons())));
    113     setProperty("keyboardModifiers", QVariant::fromValue(int(event->modifiers())));
    114 
    115     QGraphicsWebView::mousePressEvent(event);
    116 }
    117 
    118 void WebViewTraditional::mousePressEvent(QMouseEvent* event)
    119 {
    120     setProperty("mouseButtons", QVariant::fromValue(int(event->buttons())));
    121     setProperty("keyboardModifiers", QVariant::fromValue(int(event->modifiers())));
    122 
    123     QWebView::mousePressEvent(event);
    124 }
    125 
    126 void GraphicsWebView::contextMenuEvent(QGraphicsSceneContextMenuEvent* event)
    127 {
    128     QMenu* menu = createContextMenu(page(), event->pos().toPoint());
    129     menu->exec(mapToScene(event->pos()).toPoint());
    130     delete menu;
    131 }
    132 
    133 void WebViewTraditional::contextMenuEvent(QContextMenuEvent* event)
    134 {
    135     QMenu* menu = createContextMenu(page(), event->pos());
    136     menu->exec(mapToGlobal(event->pos()));
    137     delete menu;
    138 }
    139 
    140