Work on zoom.

This commit is contained in:
Martin Rotter 2013-09-28 21:25:42 +02:00
parent 6aacfcf359
commit 1a3c56a332
5 changed files with 83 additions and 32 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 B

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -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);
}

View File

@ -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.

View File

@ -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<QAction *> WebBrowser::globalMenu() {
QList<QAction*> 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"));

View File

@ -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;