summaryrefslogtreecommitdiffstats
path: root/lib/tdeqt4painter.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-21 19:41:01 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-21 19:41:01 -0500
commit4f0b6320a769925e69fa04ebd3358894e706b52e (patch)
tree003bc8217f5d8f53fc0f13dab203ef179ea10010 /lib/tdeqt4painter.cpp
parent7d8cc6ed5b0e4ffedd55511969001fd28e4aae6c (diff)
downloadqt4-tqt-theme-engine-4f0b6320a769925e69fa04ebd3358894e706b52e.tar.gz
qt4-tqt-theme-engine-4f0b6320a769925e69fa04ebd3358894e706b52e.zip
Attempt to work around Qt 4.8 bug in fromX11Pixmap when masks are converted
Diffstat (limited to 'lib/tdeqt4painter.cpp')
-rw-r--r--lib/tdeqt4painter.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/tdeqt4painter.cpp b/lib/tdeqt4painter.cpp
index 6bc09d1..2e22ebf 100644
--- a/lib/tdeqt4painter.cpp
+++ b/lib/tdeqt4painter.cpp
@@ -31,6 +31,11 @@
#include "tdeqt4converter.h"
+#define SET_BIT(x, y) (x |= 1 << y)
+#define TEST_BIT(x, y) ((x & (1 << y)) >> y)
+
+// #define USE_FROMX11_PIXMAP
+
/*!
\class TDEQt4PaintDevice tdeqt4painter.h
\brief The TDEQt4PaintDevice class is a paint device that translates
@@ -121,6 +126,7 @@ bool TDEQt4PaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
// SLOW
TQRect tqt3br = p[0].rgn->boundingRect();
if (!tqt3br.isNull()) {
+#ifdef USE_FROMX11_PIXMAP
TQBitmap regionMask(tqt3br.x()+tqt3br.width(), tqt3br.y()+tqt3br.height());
regionMask.fill(TQt::color0);
TQPainter tqt3brpainter(&regionMask);
@@ -128,6 +134,32 @@ bool TDEQt4PaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p )
tqt3brpainter.fillRect(0,0,regionMask.width(),regionMask.height(),TQt::color1);
tqt3brpainter.end();
QBitmap qt4RegionMask = QPixmap::fromX11Pixmap(regionMask.handle(), QPixmap::ImplicitlyShared);
+#else // USE_FROMX11_PIXMAP
+ TQBitmap regionMask(tqt3br.x()+tqt3br.width(), tqt3br.y()+tqt3br.height(), 32);
+ int width = regionMask.width();
+ int height = regionMask.height();
+ int size = (((width*height)/8)+1);
+ unsigned char* monoData = (unsigned char*)malloc(size);
+ memset(monoData, 0, size);
+ int x;
+ int y;
+ int byte = 0;
+ int bit = 7;
+ for (x=0; x<width; x++) {
+ for (y=0; y<height; y++) {
+ if (p[0].rgn->contains(TQPoint(x,y))) {
+ SET_BIT(monoData[byte], bit);
+ }
+ bit--;
+ if (bit < 0) {
+ bit = 7;
+ byte++;
+ }
+ }
+ }
+ QBitmap qt4RegionMask = QBitmap::fromData(QSize(width, height), monoData, QImage::Format_Mono);
+ free(monoData);
+#endif // USE_FROMX11_PIXMAP
qt4region = QRegion(qt4RegionMask);
#endif
TQPainter::CoordinateMode tqt3coordmode = (TQPainter::CoordinateMode)p[1].ival;