summaryrefslogtreecommitdiffstats
path: root/src/kvilib/ext/kvi_doublebuffer.cpp
diff options
context:
space:
mode:
authortpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
committertpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2010-02-24 02:13:59 +0000
commita6d58bb6052ac8cb01805a48c4ad2f129126116f (patch)
treedd867a099fcbb263a8009a9fb22695b87855dad6 /src/kvilib/ext/kvi_doublebuffer.cpp
downloadkvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.tar.gz
kvirc-a6d58bb6052ac8cb01805a48c4ad2f129126116f.zip
Added KDE3 version of kvirc
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kvirc@1095341 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'src/kvilib/ext/kvi_doublebuffer.cpp')
-rw-r--r--src/kvilib/ext/kvi_doublebuffer.cpp90
1 files changed, 90 insertions, 0 deletions
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 <pragma at kvirc dot net>
+//
+// 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;
+}