From a6d58bb6052ac8cb01805a48c4ad2f129126116f Mon Sep 17 00:00:00 2001 From: tpearson Date: Wed, 24 Feb 2010 02:13:59 +0000 Subject: Added KDE3 version of kvirc git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- src/kvilib/ext/kvi_doublebuffer.cpp | 90 +++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/kvilib/ext/kvi_doublebuffer.cpp (limited to 'src/kvilib/ext/kvi_doublebuffer.cpp') diff --git a/src/kvilib/ext/kvi_doublebuffer.cpp b/src/kvilib/ext/kvi_doublebuffer.cpp new file mode 100644 index 00000000..5997e934 --- /dev/null +++ b/src/kvilib/ext/kvi_doublebuffer.cpp @@ -0,0 +1,90 @@ +//============================================================================= +// +// File : kvi_doublebuffer.cpp +// Created on Fri 27 Jan 2006 18:59:54 by Szymon Stefanek +// +// This file is part of the KVIrc IRC Client distribution +// Copyright (C) 2006 Szymon Stefanek +// +// 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 opinion) 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, write to the Free Software Foundation, +// Inc. ,51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//============================================================================= + +#define __KVILIB__ + +#include "kvi_doublebuffer.h" + +static QPixmap * g_pMemoryPixmap = 0; +static unsigned int g_uMaxRequestedWidth = 0; +static unsigned int g_uMaxRequestedHeight = 0; + +KviDoubleBuffer::KviDoubleBuffer(unsigned int uWidth,unsigned int uHeight) +{ + if((g_pMemoryPixmap->width() < uWidth) || (g_pMemoryPixmap->height() < uHeight)) + { + // The memory buffer is too small + // There is either no such user requirement or it has grown by the meantime + unsigned int uMaxW = uWidth > g_pMemoryPixmap->width() ? uWidth : g_pMemoryPixmap->width(); + unsigned int uMaxH = uHeight > g_pMemoryPixmap->height() ? uHeight : g_pMemoryPixmap->height(); +#ifdef COMPILE_USE_QT4 + // QT4SUX: QPixmap::resize() is missing (it's a widely used function and assigning a new QPixmap() seems to be slower and not intuitive) + *g_pMemoryPixmap = QPixmap(uMaxW,uMaxH); +#else + g_pMemoryPixmap->resize(uMaxW,uMaxH); +#endif + } + + if(uWidth > g_uMaxRequestedWidth)g_uMaxRequestedWidth = uWidth; + if(uHeight > g_uMaxRequestedHeight)g_uMaxRequestedHeight = uHeight; +} + +KviDoubleBuffer::~KviDoubleBuffer() +{ + // We never shrink here (it's time consuming) +} + +QPixmap * KviDoubleBuffer::pixmap() +{ + return g_pMemoryPixmap; +} + +void KviDoubleBuffer::init() +{ + if(g_pMemoryPixmap)return; + g_pMemoryPixmap = new QPixmap(); +} + +void KviDoubleBuffer::done() +{ + if(!g_pMemoryPixmap)return; + delete g_pMemoryPixmap; + g_pMemoryPixmap = 0; +} + +void KviDoubleBuffer::heartbeat() +{ + if(((g_uMaxRequestedHeight + 64) < g_pMemoryPixmap->height()) || ((g_uMaxRequestedWidth + 64) < g_pMemoryPixmap->width())) + { + // do shrink :) +#ifdef COMPILE_USE_QT4 + // QT4SUX: QPixmap::resize() is missing (it's a widely used function and assigning a new QPixmap() seems to be slower and not intuitive) + *g_pMemoryPixmap = QPixmap(g_uMaxRequestedWidth,g_uMaxRequestedHeight); +#else + g_pMemoryPixmap->resize(g_uMaxRequestedWidth,g_uMaxRequestedHeight); +#endif + } + g_uMaxRequestedHeight = 0; + g_uMaxRequestedWidth = 0; +} -- cgit v1.2.1