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 d01b23b9b..862616029 100644 Binary files a/resources/graphics/themes/mini-kfaenza/actions/32/zoom-fit-best.png and b/resources/graphics/themes/mini-kfaenza/actions/32/zoom-fit-best.png differ 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;