From 1feccda4818f0dd7c98cf55032f05b3071135fe2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Blinov Date: Fri, 15 Jul 2011 10:24:08 +0200 Subject: Improving tab previews Improvements: * title of the page is removed since it is visible on a tab. * widget now has a smooth 3d look'n'feel with Oxygen thanks to raisen frame * widget has rouned corners in all the styles * url of the page is elided * with compositing tab previews will be shown semitransparent with 25% alpha by default, witch can be setted to be optional later * code of tab preview is now separated from tab bar so it is more explicit REVIEWED BY: Johannes, Andrea, Pierre CCMAIL: blinov.vyacheslav@gmail.com REVIEW: 101848 --- src/tabpreviewpopup.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/tabpreviewpopup.cpp (limited to 'src/tabpreviewpopup.cpp') diff --git a/src/tabpreviewpopup.cpp b/src/tabpreviewpopup.cpp new file mode 100644 index 00000000..3d1bc5a6 --- /dev/null +++ b/src/tabpreviewpopup.cpp @@ -0,0 +1,108 @@ +/* ============================================================ +* +* This file is a part of the rekonq project +* +* Copyright (C) 2011 by Vyacheslav Blinov +* +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation; either version 2 of +* the License or (at your option) version 3 or any later version +* accepted by the membership of KDE e.V. (or its successor approved +* by the membership of KDE e.V.), which shall act as a proxy +* defined in Section 14 of version 3 of the license. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* ============================================================ */ + +//Self Includes +#include "tabpreviewpopup.h" + +// Rekonq Includes +#include "webtab.h" +#include "tabbar.h" +#include "websnap.h" +#include "application.h" +#include "mainwindow.h" + +//Qt Includes +#include +#include +#include +#include +#include + + +TabPreviewPopup::TabPreviewPopup(WebTab* tab,QWidget* parent) + : KPassivePopup(parent), + m_thumbnail(new QLabel(this)), + m_url(new QLabel(this)) +{ + m_thumbnail->setAlignment(Qt::AlignHCenter); + m_url->setAlignment(Qt::AlignHCenter); + + QVBoxLayout *vb = new QVBoxLayout(this); + vb->addWidget(m_thumbnail); + vb->addWidget(m_url); + this->setLayout(vb); + + layout()->setAlignment(Qt::AlignTop); + layout()->setMargin(0); + + setFrameShape(QFrame::StyledPanel); + setFrameShadow(QFrame::Raised); + setWindowOpacity(transparency); + + setWebTab(tab); +} + +TabPreviewPopup::~TabPreviewPopup() +{ + delete m_thumbnail; + delete m_url; +} + + +void TabPreviewPopup::setWebTab(WebTab* tab) +{ + int w = (tab->parentWidget()->sizeHint().width() / TabBar::baseWidthDivisor); + int h = w * rApp->mainWindow()->size().height() / rApp->mainWindow()->size().width(); + + setThumbnail(WebSnap::renderTabPreview(*tab->page(), w, h)); + setUrl(tab->url().prettyUrl()); + + setFixedSize(w, h + m_url->heightForWidth(w)); +} + + +void TabPreviewPopup::setThumbnail(const QPixmap& pixmap) +{ + m_thumbnail->setPixmap(pixmap); +} + +void TabPreviewPopup::setUrl(const QString& text) +{ + m_url->setText(text); +} + +void TabPreviewPopup::setFixedSize(int w, int h) +{ + KPassivePopup::setFixedSize(w,h); + m_url->setText(m_url->fontMetrics().elidedText(m_url->text(),Qt::ElideMiddle,this->width() - this->borderRadius)); + + QPixmap pixmap(size()); + QPainter painter(&pixmap); + painter.setRenderHint(QPainter::Antialiasing); + painter.fillRect(pixmap.rect(), Qt::red); + painter.setBrush(QBrush(Qt::black)); + painter.drawRoundRect(borderSpacing,borderSpacing,pixmap.width()-borderSpacing*2,pixmap.height()-borderSpacing*2, borderRadius, borderRadius); + setMask(pixmap.createMaskFromColor(Qt::red)); +} \ No newline at end of file -- cgit v1.2.1