summaryrefslogtreecommitdiffstats
path: root/plugin
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-13 09:53:37 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2012-09-13 09:53:37 -0500
commit8b7e11608c0b4057d6aa8aad832b9b101ae66f59 (patch)
tree3961f99ea343966ae25449aec74e3c6c69038a39 /plugin
parente3be7c73452bf745344ef8006e779f80dad40a5a (diff)
downloadqt4-tqt-theme-engine-8b7e11608c0b4057d6aa8aad832b9b101ae66f59.tar.gz
qt4-tqt-theme-engine-8b7e11608c0b4057d6aa8aad832b9b101ae66f59.zip
Fix a number of problems and check for known broken Qt4 version
Diffstat (limited to 'plugin')
-rw-r--r--plugin/plugin.pro3
-rw-r--r--plugin/simplestyle.cpp81
-rw-r--r--plugin/simplestyle.h4
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(&regionMask);
+ 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