From 1a3c56a3326b75e8f50432bdfe1603502f0d1546 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Sat, 28 Sep 2013 21:25:42 +0200 Subject: [PATCH] Work on zoom. --- .../mini-kfaenza/actions/32/zoom-fit-best.png | Bin 42 -> 1358 bytes src/gui/basewebview.cpp | 15 +++- src/gui/basewebview.h | 4 +- src/gui/webbrowser.cpp | 83 ++++++++++++------ src/gui/webbrowser.h | 13 +++ 5 files changed, 83 insertions(+), 32 deletions(-) diff --git a/resources/graphics/themes/mini-kfaenza/actions/32/zoom-fit-best.png b/resources/graphics/themes/mini-kfaenza/actions/32/zoom-fit-best.png index d01b23b9b3e2d86deb39f1b91697809e7127e523..8626160298404f80de93476f23dda305d3efa9af 100644 GIT binary patch literal 1358 zcmV-U1+n^xP)3*3?WKvE7848!G_)m=qM!r_e`>W7 zQX51R<;I~GE(o}A0*Mm`!~t>O#0f53K*|Ay1B#l`NQH_-91s?2s#JDJ1aXqaiEP=i zW9)c$rw7}}O%un^gnrUUqusaf`{uoww{L_}ivJVN(nJX10QB-_n*+HRZ8WYLI?qDl~VTDw(SQtJ0}fAuD^s3vl4Is{^IypDDgRD z@qy+0##r!%KdpZ+zGNMx%O0rUYQr9B|mFcKFpUhFt~_H27J8dYb`ocW`zt!=QUr{~e( z!-s!9cI?>5lP6D7M~)n6=d7l@@#U?Adzb#*Ocy(Wuqi+xy$g zmoLLW0(c9g{{8#2&CSjAfk0rZrfG6yWMsBV0b{_MwN?%w&Ye5A&*SlE*REar zbAEn)8py4%v4HsH%a@M(`~3Oy2X$R{t>x(Y_3MG!+FJLsXU`UZVk2UI8&n!0=U z?wh*0x|;s}{@(rj_irn=ce~yCty{Og4+H{DrfCumhvO7ZMzs)vLKE@>(7T$2!{PY+ z(xpq^9zTA3o6F_078Vv#u~;l!Q&Z!rudlBaLbxo;LQ2WR#6;}Eg$s}3@p!rl@`u1s zsSxcgj(>+isoe1J@a**TwA6Lozn0_a}n0~g?NyWL*5+pR4xFPoW6W)a8$c_D=N_U+r2O!r^di4S(antCE0b;Hz~6lw-9XKqV51WH1<9>gee38-}5Gc6K%FE^k?x0A`_VlWt7YHx4%8-}6jy1wP{Fl~T&g zX0sU}1em3};U~a8pp(tN8%_hyf!~!98Pb3i_@% diff --git a/src/gui/basewebview.cpp b/src/gui/basewebview.cpp index afde3fce2..53357e75d 100644 --- a/src/gui/basewebview.cpp +++ b/src/gui/basewebview.cpp @@ -44,8 +44,7 @@ void BaseWebView::createConnections() { this, SLOT(popupContextMenu(QPoint))); connect(m_actionOpenLinkNewTab,SIGNAL(triggered()), this, SLOT(openLinkInNewTab())); - connect(m_actionOpenImageNewTab, SIGNAL(triggered()), - this, SLOT(openImageInNewTab())); + connect(m_actionOpenImageNewTab, SIGNAL(triggered()), this, SLOT(openImageInNewTab())); } void BaseWebView::setupIcons() { @@ -220,6 +219,14 @@ void BaseWebView::paintEvent(QPaintEvent *event) { style()->drawControl(QStyle::CE_ShapedFrame, &style_option, &painter, this); } -void BaseWebView::setWebPageZoom(int percentage) { - setZoomFactor(percentage / 100.0); +void BaseWebView::increaseWebPageZoom() { + setZoomFactor(zoomFactor() + 0.1); +} + +void BaseWebView::decreaseWebPageZoom() { + setZoomFactor(zoomFactor() - 0.1); +} + +void BaseWebView::resetWebPageZoom() { + setZoomFactor(1.0); } diff --git a/src/gui/basewebview.h b/src/gui/basewebview.h index 011a5e0eb..2496a6c3f 100644 --- a/src/gui/basewebview.h +++ b/src/gui/basewebview.h @@ -27,7 +27,9 @@ class BaseWebView : public QWebView { void newTabRequested(); public slots: - void setWebPageZoom(int percentage = 150); + void increaseWebPageZoom(); + void decreaseWebPageZoom(); + void resetWebPageZoom(); protected slots: // Executes if loading of any page is done. diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp index d4f6d3a4e..3dbe8fd29 100644 --- a/src/gui/webbrowser.cpp +++ b/src/gui/webbrowser.cpp @@ -75,9 +75,42 @@ WebBrowser::WebBrowser(QWidget *parent) setTabOrder(m_toolBar, m_webView); createConnections(); + initializeZoomWidget(); setupIcons(); } +void WebBrowser::initializeZoomWidget() { + // Initializations. + m_zoomButtons = new QWidget(this); + QLabel *zoom_label = new QLabel(tr("Zoom "), m_zoomButtons); + QHBoxLayout *layout = new QHBoxLayout(m_zoomButtons); + QToolButton *button_decrease = new QToolButton(m_zoomButtons); + m_btnResetZoom = new QToolButton(m_zoomButtons); + QToolButton *button_increase = new QToolButton(m_zoomButtons); + + // Set texts. + button_decrease->setText("-"); + m_btnResetZoom->setText("100%"); + button_increase->setText("+"); + + // Setup layout. + layout->addWidget(zoom_label); + layout->addWidget(button_decrease); + layout->addWidget(m_btnResetZoom); + layout->addWidget(button_increase); + layout->setSpacing(2); + layout->setMargin(3); + m_zoomButtons->setLayout(layout); + + // Make connections.. + connect(button_increase, SIGNAL(clicked()), this, SLOT(increaseZoom())); + connect(button_decrease, SIGNAL(clicked()), this, SLOT(decreaseZoom())); + connect(m_btnResetZoom, SIGNAL(clicked()), this, SLOT(resetZoom())); + + m_actionZoom = new QWidgetAction(this); + m_actionZoom->setDefaultWidget(m_zoomButtons); +} + void WebBrowser::createConnections() { // When user confirms new url, then redirect to it. connect(m_txtLocation,SIGNAL(submitted(QString)), @@ -127,6 +160,25 @@ void WebBrowser::navigateToUrl(const QUrl &url) { } } +void WebBrowser::increaseZoom() { + m_webView->increaseWebPageZoom(); + m_btnResetZoom->setText( + QString("%1%").arg(QString::number(m_webView->zoomFactor() * 100, 'f', 0)) + ); +} + +void WebBrowser::decreaseZoom() { + m_webView->decreaseWebPageZoom(); + m_btnResetZoom->setText( + QString("%1%").arg(QString::number(m_webView->zoomFactor() * 100, 'f', 0)) + ); +} + +void WebBrowser::resetZoom() { + m_webView->resetWebPageZoom(); + m_btnResetZoom->setText("100%"); +} + void WebBrowser::navigateToUrl(const QString &textual_url) { // Prepare input url. QString better_url = textual_url; @@ -143,6 +195,8 @@ WebBrowser::~WebBrowser() { // Delete members. delete m_layout; + delete m_zoomButtons; + delete m_actionZoom; } WebBrowser *WebBrowser::webBrowser() { @@ -153,33 +207,7 @@ QList WebBrowser::globalMenu() { QList browser_menu; // Add needed actions into the menu. - browser_menu.append(m_actionReload); - - QWidget *wid = new QWidget(this); - QHBoxLayout *lay = new QHBoxLayout(wid); - QToolButton *but1 = new QToolButton(wid); - but1->setText("-"); - QToolButton *but2 = new QToolButton(wid); - but2->setText("100%"); - QToolButton *but3 = new QToolButton(wid); - but3->setText("+"); - lay->addWidget(new QLabel("Zoom ", wid)); - lay->addWidget(but1); - lay->addWidget(but2); - lay->addWidget(but3); - lay->setSpacing(2); - lay->setMargin(3); - wid->setLayout(lay); - // TODO: Make zooming better written, it looks good, impelement - // just webpage zoom (no text zoom for now), then move to implementing - // feed core. - - connect(but3, SIGNAL(clicked()), m_webView, SLOT(setWebPageZoom())); - - QWidgetAction *act = new QWidgetAction(this); - act->setDefaultWidget(wid); - - browser_menu.append(act); + browser_menu.append(m_actionZoom); return browser_menu; } @@ -193,6 +221,7 @@ void WebBrowser::setFocus(Qt::FocusReason reason) { } void WebBrowser::setupIcons() { + m_actionZoom->setIcon(IconThemeFactory::getInstance()->fromTheme("zoom-fit-best")); m_actionBack->setIcon(IconThemeFactory::getInstance()->fromTheme("go-previous")); m_actionForward->setIcon(IconThemeFactory::getInstance()->fromTheme("go-next")); m_actionReload->setIcon(IconThemeFactory::getInstance()->fromTheme("view-refresh")); diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h index e25d37670..23529836a 100644 --- a/src/gui/webbrowser.h +++ b/src/gui/webbrowser.h @@ -9,6 +9,8 @@ class QToolBar; +class QToolButton; +class QWidgetAction; class QVBoxLayout; class LocationLineEdit; class BaseWebView; @@ -57,10 +59,18 @@ class WebBrowser : public TabContent { void navigateToUrl(const QString &url); void navigateToUrl(const QUrl &url); + // Zoom manipulators. + void increaseZoom(); + void decreaseZoom(); + void resetZoom(); + protected: // Creates necessary connections. void createConnections(); + // Initializes all buttons and widgets, which are needed for "Zoom" menu item. + void initializeZoomWidget(); + protected slots: // Updates url (for example on location text box). void updateUrl(const QUrl &url); @@ -80,7 +90,10 @@ class WebBrowser : public TabContent { QToolBar *m_toolBar; BaseWebView *m_webView; LocationLineEdit *m_txtLocation; + QWidget *m_zoomButtons; + QToolButton *m_btnResetZoom; + QWidgetAction *m_actionZoom; QAction *m_actionBack; QAction *m_actionForward; QAction *m_actionReload;