Instead of using QMovie with GIF, one PNG file with all frames is now animated. Fixes issue with bad transparent background of previous GIF animation.remotes/origin/falkon
parent
ebd501c9cd
commit
5b6b6c6eaf
10 changed files with 190 additions and 80 deletions
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,107 @@ |
|||||||
|
/* ============================================================
|
||||||
|
* QupZilla - WebKit based browser |
||||||
|
* Copyright (C) 2014 David Rosca <nowrep@gmail.com> |
||||||
|
* |
||||||
|
* 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 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
* ============================================================ */ |
||||||
|
#include "tabicon.h" |
||||||
|
#include "webtab.h" |
||||||
|
#include "tabbedwebview.h" |
||||||
|
|
||||||
|
#include <QTimer> |
||||||
|
|
||||||
|
#define ANIMATION_INTERVAL 70 |
||||||
|
|
||||||
|
TabIcon::TabIcon(QWidget* parent) |
||||||
|
: QWidget(parent) |
||||||
|
, m_tab(0) |
||||||
|
, m_currentFrame(0) |
||||||
|
, m_animationRunning(false) |
||||||
|
{ |
||||||
|
setObjectName(QSL("tab-icon")); |
||||||
|
|
||||||
|
m_animationImage = QImage(QSL(":icons/other/loading.png")); |
||||||
|
m_framesCount = m_animationImage.width() / 16; |
||||||
|
|
||||||
|
m_updateTimer = new QTimer(this); |
||||||
|
m_updateTimer->setInterval(ANIMATION_INTERVAL); |
||||||
|
connect(m_updateTimer, SIGNAL(timeout()), this, SLOT(updateAnimationFrame())); |
||||||
|
|
||||||
|
resize(16, 16); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::setWebTab(WebTab* tab) |
||||||
|
{ |
||||||
|
m_tab = tab; |
||||||
|
|
||||||
|
connect(m_tab->view(), SIGNAL(loadStarted()), this, SLOT(showLoadingAnimation())); |
||||||
|
connect(m_tab->view(), SIGNAL(loadFinished(bool)), this, SLOT(hideLoadingAnimation())); |
||||||
|
connect(m_tab->view(), SIGNAL(iconChanged()), this, SLOT(showIcon())); |
||||||
|
|
||||||
|
showIcon(); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::setIcon(const QIcon &icon) |
||||||
|
{ |
||||||
|
m_siteImage = icon.pixmap(16).toImage(); |
||||||
|
update(); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::showLoadingAnimation() |
||||||
|
{ |
||||||
|
m_currentFrame = 0; |
||||||
|
|
||||||
|
// Start animation delayed with 100 ms
|
||||||
|
m_updateTimer->setInterval(100); |
||||||
|
m_updateTimer->start(); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::hideLoadingAnimation() |
||||||
|
{ |
||||||
|
m_animationRunning = false; |
||||||
|
|
||||||
|
m_updateTimer->stop(); |
||||||
|
showIcon(); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::showIcon() |
||||||
|
{ |
||||||
|
m_siteImage = m_tab->icon().pixmap(16).toImage(); |
||||||
|
update(); |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::updateAnimationFrame() |
||||||
|
{ |
||||||
|
if (!m_animationRunning) { |
||||||
|
m_animationRunning = true; |
||||||
|
m_updateTimer->setInterval(ANIMATION_INTERVAL); |
||||||
|
} |
||||||
|
|
||||||
|
update(); |
||||||
|
m_currentFrame = (m_currentFrame + 1) % m_framesCount; |
||||||
|
} |
||||||
|
|
||||||
|
void TabIcon::paintEvent(QPaintEvent* event) |
||||||
|
{ |
||||||
|
Q_UNUSED(event); |
||||||
|
|
||||||
|
QPainter p(this); |
||||||
|
|
||||||
|
if (m_animationRunning) { |
||||||
|
p.drawImage(0, 0, m_animationImage, m_currentFrame * 16, 0, 16, 16); |
||||||
|
} |
||||||
|
else { |
||||||
|
p.drawImage(0, 0, m_siteImage); |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,60 @@ |
|||||||
|
/* ============================================================
|
||||||
|
* QupZilla - WebKit based browser |
||||||
|
* Copyright (C) 2014 David Rosca <nowrep@gmail.com> |
||||||
|
* |
||||||
|
* 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 3 of the License, or |
||||||
|
* (at your option) any later version. |
||||||
|
* |
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
* ============================================================ */ |
||||||
|
#ifndef TABICON_H |
||||||
|
#define TABICON_H |
||||||
|
|
||||||
|
#include <QWidget> |
||||||
|
#include <QImage> |
||||||
|
|
||||||
|
#include "qzcommon.h" |
||||||
|
|
||||||
|
class QTimer; |
||||||
|
|
||||||
|
class WebTab; |
||||||
|
|
||||||
|
class QUPZILLA_EXPORT TabIcon : public QWidget |
||||||
|
{ |
||||||
|
Q_OBJECT |
||||||
|
|
||||||
|
public: |
||||||
|
explicit TabIcon(QWidget* parent = 0); |
||||||
|
|
||||||
|
void setWebTab(WebTab* tab); |
||||||
|
void setIcon(const QIcon &icon); |
||||||
|
|
||||||
|
private slots: |
||||||
|
void showIcon(); |
||||||
|
void showLoadingAnimation(); |
||||||
|
void hideLoadingAnimation(); |
||||||
|
|
||||||
|
void updateAnimationFrame(); |
||||||
|
|
||||||
|
private: |
||||||
|
void paintEvent(QPaintEvent* event); |
||||||
|
|
||||||
|
WebTab* m_tab; |
||||||
|
QTimer* m_updateTimer; |
||||||
|
|
||||||
|
QImage m_siteImage; |
||||||
|
QImage m_animationImage; |
||||||
|
int m_currentFrame; |
||||||
|
int m_framesCount; |
||||||
|
bool m_animationRunning; |
||||||
|
}; |
||||||
|
|
||||||
|
#endif // TABICON_H
|
||||||
Loading…
Reference in new issue