diff options
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/plugin.pro | 3 | ||||
-rw-r--r-- | plugin/simplestyle.cpp | 81 | ||||
-rw-r--r-- | plugin/simplestyle.h | 4 |
3 files changed, 67 insertions, 21 deletions
diff --git a/plugin/plugin.pro b/plugin/plugin.pro index 488274a..64aa477 100644 --- a/plugin/plugin.pro +++ b/plugin/plugin.pro @@ -1,6 +1,7 @@ #! [0] TEMPLATE = lib -CONFIG += plugin +# CONFIG += plugin +CONFIG += plugin debug HEADERS = simplestyle.h \ simplestyleplugin.h SOURCES = simplestyle.cpp \ diff --git a/plugin/simplestyle.cpp b/plugin/simplestyle.cpp index f897579..7d9eccd 100644 --- a/plugin/simplestyle.cpp +++ b/plugin/simplestyle.cpp @@ -19,6 +19,7 @@ #define TQT_NO_COMPAT_NAMES #include <tqstyle.h> #include <tqpixmap.h> +#include <tqbitmap.h> #include <tqpainter.h> #include <tqapplication.h> #include <tqprogressbar.h> @@ -188,7 +189,46 @@ inline TQString generateTQt3CacheKey(QIcon qt4icon, int iconsize, bool transpare } } -inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon, int iconsize, TQPixmapCache* pmCache = 0, bool copyTransparency = true, TQColor* bgcolor = 0) +inline TQPixmap convertQt4ToTQt3Pixmap(QPixmap qt4pixmap, bool copyTransparency = true, TQColor* bgcolor = 0) +{ + TQPixmap tqtPM(qt4pixmap.width(), qt4pixmap.height(), (copyTransparency)?qt4pixmap.depth():((qt4pixmap.depth()>24)?24:qt4pixmap.depth())); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared); + + if (copyTransparency) { + qtPM.fill(Qt::transparent); + } + else { + tqtPM.fill(*bgcolor); + } + QPainter qt4painter(&qtPM); + qt4painter.drawPixmap(0, 0, qt4pixmap); + qt4painter.end(); + + return tqtPM; +} + +inline TQRegion convertQt4ToTQt3Region(QRegion qt4region) +{ + TQRegion tqt3region; + + QRect qt4br = qt4region.boundingRect(); + // SLOW + if (!qt4br.isNull()) { + QBitmap regionMask(qt4br.x()+qt4br.width(), qt4br.y()+qt4br.height()); + regionMask.fill(Qt::color0); + QPainter qt4brpainter(®ionMask); + qt4brpainter.setClipRegion(qt4region); + qt4brpainter.fillRect(0,0,regionMask.width(),regionMask.height(),Qt::color1); + qt4brpainter.end(); + TQBitmap tqt3RegionMask; + tqt3RegionMask = convertQt4ToTQt3Pixmap(regionMask); + tqt3region = TQRegion(tqt3RegionMask); + } + + return tqt3region; +} + +inline TQPixmap convertQt4IconToTQt3Pixmap(QIcon qt4icon, int iconsize, TQPixmapCache* pmCache = 0, bool copyTransparency = true, TQColor* bgcolor = 0) { TQString cacheKey; if (pmCache) { @@ -203,18 +243,7 @@ inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon, int iconsize, TQPixmapCach QSize qt4size = QSize(iconsize, iconsize); QPixmap qt4iconpm = qt4icon.pixmap(qt4size); - TQPixmap tqtPM(qt4iconpm.width(), qt4iconpm.height(), (copyTransparency)?qt4iconpm.depth():((qt4iconpm.depth()>24)?24:qt4iconpm.depth())); - QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared); - - if (copyTransparency) { - qtPM.fill(Qt::transparent); - } - else { - tqtPM.fill(*bgcolor); - } - QPainter qt4painter(&qtPM); - qt4painter.drawPixmap(0, 0, qt4iconpm); - qt4painter.end(); + TQPixmap tqtPM = convertQt4ToTQt3Pixmap(qt4iconpm); if (pmCache) { // Insert this pixmap into the cache @@ -224,7 +253,7 @@ inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon, int iconsize, TQPixmapCach return tqtPM; } -inline QIcon convertTQt3ToQt4Pixmap(TQPixmap tqt3pixmap) +inline QIcon convertTQt3PixmapToQt4Icon(TQPixmap tqt3pixmap) { QPixmap qt4pm = QPixmap::fromX11Pixmap(tqt3pixmap.handle(), QPixmap::ImplicitlyShared); return QIcon(qt4pm); @@ -280,7 +309,7 @@ inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon, int smallsize, int large tqt3iconsized = largeIconSize; } - tqt3iconset.setPixmap(convertQt4ToTQt3Pixmap(qt4icon, tqt3iconsized.width(), pmCache), tqt3iconsize, tqt3iconmode, tqt3iconstate); + tqt3iconset.setPixmap(convertQt4IconToTQt3Pixmap(qt4icon, tqt3iconsized.width(), pmCache), tqt3iconsize, tqt3iconmode, tqt3iconstate); } } } @@ -786,6 +815,11 @@ Qt4TDEStyle::Qt4TDEStyle() m_internalTQt3PixmapCache = new TQPixmapCache(); m_internalTQt3PixmapCache->setCacheLimit(4096); + // Initialize the widget cache + m_internalTQt3WidgetCache = new TQWidgetCache(); + m_internalTQt3WidgetCache->setMaxCost(4096); + m_internalTQt3WidgetCache->setAutoDelete(true); + // Create interface widgets m_tqt3parent_widget = new TQWidget(); @@ -812,6 +846,12 @@ Qt4TDEStyle::Qt4TDEStyle() qt_filedialog_save_filename_hook = &TDEFileDialogSaveName; qt_filedialog_existing_directory_hook = &TDEFileDialogSelectDirectory; #endif // INTEGRATE_WITH_TDE + +#if QT_VERSION > 0x040800 + // How a bug of this magnitude could go undetected in a major Qt4 release is beyond me...I guess cell phones don't generally use thin lines in their widgets!? + // This is Yet Another Example of why TDE cannot rely on Qt4 for anything of any real importance + printf("[WARNING] Qt4 >= Qt 4.8.0 detected; you are likely affected by this Qt4 bug:\n\r[WARNING] https://bugreports.qt-project.org/browse/QTBUG-26013\n\r[WARNING] There is no known workaround for this problem; your Qt4 application will display with numerous graphical glitches.\n\r"); fflush(stdout); +#endif } Qt4TDEStyle::~Qt4TDEStyle() @@ -841,6 +881,7 @@ Qt4TDEStyle::~Qt4TDEStyle() // Verify I'm not leaking memory like a sieve when this is commented out!!! // delete m_tqt3parent_widget; + delete m_internalTQt3WidgetCache; delete m_internalTQt3PixmapCache; // FIXME @@ -1166,7 +1207,7 @@ QIcon Qt4TDEStyle::standardIconImplementation(StandardPixmap standardIcon, const // FIXME // This spews tons of "X Error: BadDrawable (invalid Pixmap or Window parameter) 9" errors and fails to work // if (tqt3pixmap.isNull() == false) { -// reticon = convertTQt3ToQt4Pixmap(tqt3pixmap); +// reticon = convertTQt3PixmapToQt4Icon(tqt3pixmap); // } // else { // Tell Qt4 to get the information @@ -2244,7 +2285,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); } else { - m_tqt3combobox_widget->insertItem(convertQt4ToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); + m_tqt3combobox_widget->insertItem(convertQt4IconToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); } } m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable()); @@ -2427,7 +2468,7 @@ TQWidget* Qt4TDEStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge else { bgcolor = convertQt4ToTQt3Palette(qt4styleoptions->palette).inactive().highlight(); } - m_tqt3titlebar_widget->setIcon(convertQt4ToTQt3Pixmap(qt4titlebar_options->icon, m_tqt3IconSize_Small, m_internalTQt3PixmapCache, false, &bgcolor)); + m_tqt3titlebar_widget->setIcon(convertQt4IconToTQt3Pixmap(qt4titlebar_options->icon, m_tqt3IconSize_Small, m_internalTQt3PixmapCache, false, &bgcolor)); break; case TQT3WT_TQToolBox: interfaceWidget = m_tqt3toolbox_widget; @@ -2515,7 +2556,7 @@ QRect Qt4TDEStyle::subElementRect(SubElement element, const QStyleOption *opt, c if (enable_debug_warnings) { #ifdef DEBUG_SPEW - printf("Used Qt3 subelement rect %d to handle Qt4 subelement rect %d\n\r", tqtSR, control); fflush(stdout); + printf("Used Qt3 subelement rect %d to handle Qt4 subelement rect %d\n\r", tqtSR, element); fflush(stdout); #endif } } @@ -2803,7 +2844,7 @@ void Qt4TDEStyle::drawComplexControl(ComplexControl control, const QStyleOptionC if (enable_debug_warnings) { #ifdef DEBUG_SPEW - printf("Used Qt3 complex control %d to draw Qt4 complex control %d\n\r", tqtCE, control); fflush(stdout); + printf("Used Qt3 complex control %d to draw Qt4 complex control %d\n\r", tqtCC, control); fflush(stdout); #endif } } diff --git a/plugin/simplestyle.h b/plugin/simplestyle.h index 0b302de..cb79f22 100644 --- a/plugin/simplestyle.h +++ b/plugin/simplestyle.h @@ -21,6 +21,7 @@ #include <QtGui/QWindowsStyle> #include <QFileDialog> +#include <ntqintcache.h> QT_BEGIN_NAMESPACE class QPalette; @@ -63,6 +64,8 @@ enum TQt3WidgetType { TQT3WT_TQToolButton }; +typedef TQIntCache<TQWidget> TQWidgetCache; + class Qt4TDEStyle : public QWindowsStyle { Q_OBJECT @@ -131,6 +134,7 @@ private: KAboutData* m_aboutData; TQPixmapCache* m_internalTQt3PixmapCache; + TQWidgetCache* m_internalTQt3WidgetCache; }; #endif |