diff options
| author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-09-21 19:41:01 -0500 |
|---|---|---|
| committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-09-21 19:41:01 -0500 |
| commit | 4f0b6320a769925e69fa04ebd3358894e706b52e (patch) | |
| tree | 003bc8217f5d8f53fc0f13dab203ef179ea10010 /lib/tdeqt4painter.cpp | |
| parent | 7d8cc6ed5b0e4ffedd55511969001fd28e4aae6c (diff) | |
| download | qt4-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.cpp | 32 |
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(®ionMask); @@ -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; |
