Add caching for pixmap conversions

Disable debug spew by default
Additional bugfixes
r14.0.x
Timothy Pearson 13 years ago
parent bbeb99fb4c
commit 2d9dac868d

@ -32,7 +32,9 @@
#include <tqspinbox.h> #include <tqspinbox.h>
#include <tqiconset.h> #include <tqiconset.h>
#include <tqmenubar.h> #include <tqmenubar.h>
#include <tqtoolbox.h>
#include <qtitlebar_p.h> #include <qtitlebar_p.h>
#include <tqpixmapcache.h>
#undef Qt #undef Qt
// HACK to gain access to QSpinBox QLineEdit object // HACK to gain access to QSpinBox QLineEdit object
@ -60,9 +62,15 @@
#include <kfiledialog.h> #include <kfiledialog.h>
#endif #endif
#define DEBUG_WARNINGS 1
// #define DEBUG_SPEW 1 // #define DEBUG_SPEW 1
//#define BASE_QT4_STYLE_CLASS QCommonStyle
#define BASE_QT4_STYLE_CLASS QWindowsStyle
// Run your application like this:
// DEBUG_TDEQT4_THEME_ENGINE=true <appname>
// to debug the theme engine
bool enable_debug_warnings = false;
#ifdef INTEGRATE_WITH_TDE #ifdef INTEGRATE_WITH_TDE
// BEGIN // BEGIN
@ -158,7 +166,69 @@ inline QStringList convertTQt3ToQt4StringList(TQStringList tqt3stringlist)
return qt4stringlist; return qt4stringlist;
} }
inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon, int smallsize, int largesize) inline QSize convertTQt3ToQt4Size(TQSize tqt3size)
{
return QSize(tqt3size.width(), tqt3size.height());
}
inline TQSize convertQt4ToTQt3Size(QSize qt4size)
{
return TQSize(qt4size.width(), qt4size.height());
}
inline TQString generateTQt3CacheKey(QIcon qt4icon, int iconsize, bool transparent, TQColor* bgcolor)
{
if (bgcolor) {
return TQString("%1 %2 %3 %4 %5 %6").arg(qt4icon.cacheKey()).arg(iconsize).arg(transparent).arg(bgcolor->red()).arg(bgcolor->green()).arg(bgcolor->blue());
}
else {
return TQString("%1 %2 %3 0 0 0").arg(qt4icon.cacheKey()).arg(iconsize).arg(transparent);
}
}
inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon, int iconsize, TQPixmapCache* pmCache = 0, bool copyTransparency = true, TQColor* bgcolor = 0)
{
TQString cacheKey;
if (pmCache) {
// See if the pixmap for this icon and size is already in the TQt3 cache
cacheKey = generateTQt3CacheKey(qt4icon, iconsize, copyTransparency, bgcolor);
TQPixmap tqtCachedPM;
if (pmCache->find(cacheKey, tqtCachedPM) == true) {
return tqtCachedPM;
}
}
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();
if (pmCache) {
// Insert this pixmap into the cache
pmCache->insert(cacheKey, tqtPM);
}
return tqtPM;
}
inline QIcon convertTQt3ToQt4Pixmap(TQPixmap tqt3pixmap)
{
QPixmap qtPM = QPixmap::fromX11Pixmap(tqt3pixmap.handle(), QPixmap::ExplicitlyShared);
return QIcon(qtPM);
}
inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon, int smallsize, int largesize, TQPixmapCache* pmCache = 0)
{ {
int i=0; int i=0;
int j=0; int j=0;
@ -208,16 +278,7 @@ inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon, int smallsize, int large
tqt3iconsized = largeIconSize; tqt3iconsized = largeIconSize;
} }
QPixmap qt4iconpm = qt4icon.pixmap(QSize(tqt3iconsized.width(), tqt3iconsized.height()), qt4iconmode, qt4iconstate); tqt3iconset.setPixmap(convertQt4ToTQt3Pixmap(qt4icon, tqt3iconsized.width(), pmCache), tqt3iconsize, tqt3iconmode, tqt3iconstate);
TQPixmap tqtPM(qt4iconpm.width(), qt4iconpm.height(), qt4iconpm.depth());
QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared);
qtPM.fill(Qt::transparent);
QPainter qt4painter(&qtPM);
qt4painter.drawPixmap(0, 0, qt4iconpm);
qt4painter.end();
tqt3iconset.setPixmap(tqtPM, tqt3iconsize, tqt3iconmode, tqt3iconstate);
} }
} }
} }
@ -225,33 +286,6 @@ inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon, int smallsize, int large
return tqt3iconset; return tqt3iconset;
} }
inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon, int iconsize, bool copyTransparency = true, TQColor* bgcolor = 0)
{
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();
return tqtPM;
}
inline QIcon convertTQt3ToQt4Pixmap(TQPixmap tqt3pixmap)
{
QPixmap qtPM = QPixmap::fromX11Pixmap(tqt3pixmap.handle(), QPixmap::ExplicitlyShared);
return QIcon(qtPM);
}
inline QRect convertTQt3ToQt4Rect(TQRect tqt3rect) inline QRect convertTQt3ToQt4Rect(TQRect tqt3rect)
{ {
return QRect(tqt3rect.x(), tqt3rect.y(), tqt3rect.width(), tqt3rect.height()); return QRect(tqt3rect.x(), tqt3rect.y(), tqt3rect.width(), tqt3rect.height());
@ -665,6 +699,8 @@ SimpleStyle::SimpleStyle()
m_previousQt4InterfaceWidget = 0; m_previousQt4InterfaceWidget = 0;
m_previousTQt3InterfaceWidget = 0; m_previousTQt3InterfaceWidget = 0;
enable_debug_warnings = (getenv("DEBUG_TDEQT4_THEME_ENGINE") != NULL);
#ifdef INTEGRATE_WITH_TDE #ifdef INTEGRATE_WITH_TDE
if (!tqApp) { if (!tqApp) {
// Initialize KApplication required data structures // Initialize KApplication required data structures
@ -675,7 +711,7 @@ SimpleStyle::SimpleStyle()
argv[0] = (char*) malloc(sizeof(char) * 19); argv[0] = (char*) malloc(sizeof(char) * 19);
strncpy(argv[0], "SimpleStyle", 19); strncpy(argv[0], "SimpleStyle", 19);
m_aboutData = new KAboutData("SimpleStyle", I18N_NOOP("SimpleStyle"), "v0.1", m_aboutData = new KAboutData("SimpleStyle", I18N_NOOP(convertQt4ToTQt3String(qApp->applicationName())), "v0.1",
"TDE Qt4 theme engine", KAboutData::License_GPL, "TDE Qt4 theme engine", KAboutData::License_GPL,
"(c) 2012, Timothy Pearson", "(c) 2012, Timothy Pearson",
"message goes here", 0 /* TODO: Website */, "kb9vqf@pearsoncomputing.net"); "message goes here", 0 /* TODO: Website */, "kb9vqf@pearsoncomputing.net");
@ -739,6 +775,10 @@ SimpleStyle::SimpleStyle()
// Set the Qt4 palette to the TQt3 palette // Set the Qt4 palette to the TQt3 palette
qApp->setPalette(convertTQt3ToQt4Palette(tqApp->palette())); qApp->setPalette(convertTQt3ToQt4Palette(tqApp->palette()));
// Initialize the pixmap cache
m_internalTQt3PixmapCache = new TQPixmapCache();
m_internalTQt3PixmapCache->setCacheLimit(4096);
// Create interface widgets // Create interface widgets
m_tqt3parent_widget = new TQWidget(); m_tqt3parent_widget = new TQWidget();
@ -755,6 +795,7 @@ SimpleStyle::SimpleStyle()
m_tqt3window_widget = new TQWidget(m_tqt3parent_widget); m_tqt3window_widget = new TQWidget(m_tqt3parent_widget);
m_tqt3titlebar_widget = new TQTitleBar(m_tqt3window_widget, m_tqt3parent_widget); m_tqt3titlebar_widget = new TQTitleBar(m_tqt3window_widget, m_tqt3parent_widget);
m_tqt3menubar_widget = new TQMenuBar(m_tqt3parent_widget); m_tqt3menubar_widget = new TQMenuBar(m_tqt3parent_widget);
m_tqt3toolbox_widget = new TQToolBox(m_tqt3parent_widget);
#ifdef INTEGRATE_WITH_TDE #ifdef INTEGRATE_WITH_TDE
qt_filedialog_open_filename_hook = &TDEFileDialogOpenName; qt_filedialog_open_filename_hook = &TDEFileDialogOpenName;
@ -783,11 +824,14 @@ SimpleStyle::~SimpleStyle()
// delete m_tqt3window_widget; // delete m_tqt3window_widget;
// delete m_tqt3titlebar_widget; // delete m_tqt3titlebar_widget;
// delete m_tqt3menubar_widget; // delete m_tqt3menubar_widget;
// delete m_tqt3toolbox_widget;
// FIXME // FIXME
// Verify I'm not leaking memory like a sieve when this is commented out!!! // Verify I'm not leaking memory like a sieve when this is commented out!!!
// delete m_tqt3parent_widget; // delete m_tqt3parent_widget;
delete m_internalTQt3PixmapCache;
delete m_aboutData; delete m_aboutData;
} }
@ -1078,9 +1122,9 @@ QIcon SimpleStyle::standardIconImplementation(StandardPixmap standardIcon, const
// case QStyle::SP_MediaVolumeMuted: // case QStyle::SP_MediaVolumeMuted:
#endif // INTEGRATE_WITH_TDE #endif // INTEGRATE_WITH_TDE
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No pixmap for Qt4 standard pixmap request %d\n\r", standardIcon); fflush(stdout); printf("No pixmap for Qt4 standard pixmap request %d\n\r", standardIcon); fflush(stdout);
#endif }
} }
if (retswitch == 1) { if (retswitch == 1) {
@ -1096,7 +1140,7 @@ QIcon SimpleStyle::standardIconImplementation(StandardPixmap standardIcon, const
} }
else { else {
// Tell Qt4 to get the information // Tell Qt4 to get the information
reticon = QCommonStyle::standardIconImplementation(standardIcon, opt, w); reticon = BASE_QT4_STYLE_CLASS::standardIconImplementation(standardIcon, opt, w);
} }
} }
@ -1517,9 +1561,9 @@ int SimpleStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWidge
// retswitch=1; // retswitch=1;
// break; // break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No hints for Qt4 hint request %d\n\r", hint); fflush(stdout); printf("No hints for Qt4 hint request %d\n\r", hint); fflush(stdout);
#endif }
retval = 0; retval = 0;
} }
@ -1532,7 +1576,83 @@ int SimpleStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWidge
} }
else { else {
// Tell Qt4 to get the information // Tell Qt4 to get the information
retval = QCommonStyle::styleHint(hint, opt, w); retval = BASE_QT4_STYLE_CLASS::styleHint(hint, opt, w);
}
}
return retval;
}
QSize SimpleStyle::sizeFromContents(ContentsType type, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const
{
int i;
QSize retval;
TQWidget* interfaceWidget = 0;
TQStyleOption tqt3opt(TQStyleOption::Default);
TQMenuItem* drawingItem = 0;
QAction* drawingAction = 0;
QList<QAction*> qt4menuactions;
int tqt3tabwidth = 0;
int tqt3iconwidth = 0;
const QStyleOptionMenuItem* qt4menuitemoptions;
char retswitch = 0;
TQStyle::ContentsType tqt3contentstype = TQStyle::CT_CustomBase;
switch (type) {
case QStyle::CT_MenuItem:
tqt3contentstype = TQStyle::CT_PopupMenuItem;
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQPopupMenu, w);
if (interfaceWidget == 0) {
retswitch = 0;
}
else {
// Convert the QStyleOption to the proper TQStyleOption
// In other words, figure out which TQt3 menu item is currently being drawn
// Qt4 makes this impossible in sizeFromContents()
// The best we can do is to find a menu item that is somewhat close and use that
drawingItem = 0;
qt4menuactions = dynamic_cast<const QMenu*>(w)->actions();
qt4menuitemoptions = static_cast<const QStyleOptionMenuItem*>(opt);
for (i=0; i<qt4menuactions.size();++i) {
if (((qt4menuactions.at(i)->isSeparator() == 1) == (qt4menuitemoptions->menuItemType == QStyleOptionMenuItem::Separator))
&& (qt4menuactions.at(i)->icon().cacheKey() == qt4menuitemoptions->icon.cacheKey())
&& (qt4menuactions.at(i)->text() == qt4menuitemoptions->text)
&& (qt4menuactions.at(i)->isChecked() == qt4menuitemoptions->checked)
) {
drawingItem = m_tqt3popupmenu_widget->findItem(m_tqt3popupmenu_widget->idAt(i));
break;
}
}
if (drawingItem) {
tqt3tabwidth = static_cast<const QStyleOptionMenuItem*>(opt)->tabWidth;
tqt3iconwidth = static_cast<const QStyleOptionMenuItem*>(opt)->maxIconWidth;
tqt3opt = TQStyleOption(drawingItem, tqt3iconwidth, tqt3tabwidth);
retswitch = 1;
}
}
break;
default:
if (enable_debug_warnings) {
printf("No size for Qt4 contents %d\n\r", type); fflush(stdout);
}
}
if (retswitch == 1) {
retval = convertTQt3ToQt4Size(tqApp->style().sizeFromContents(tqt3contentstype, interfaceWidget, convertQt4ToTQt3Size(contentsSize), tqt3opt));
}
else {
if (retswitch == 2) {
// retval was already set
}
else {
// Tell Qt4 to get the information
retval = BASE_QT4_STYLE_CLASS::sizeFromContents(type, opt, contentsSize, w);
} }
} }
@ -1633,18 +1753,22 @@ int SimpleStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const
break; break;
case QStyle::PM_SliderThickness: case QStyle::PM_SliderThickness:
tqt3pixelmetric = TQStyle::PM_SliderThickness; tqt3pixelmetric = TQStyle::PM_SliderThickness;
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQSlider, w);
retswitch = 1; retswitch = 1;
break; break;
case QStyle::PM_SliderControlThickness: case QStyle::PM_SliderControlThickness:
tqt3pixelmetric = TQStyle::PM_SliderControlThickness; tqt3pixelmetric = TQStyle::PM_SliderControlThickness;
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQSlider, w);
retswitch = 1; retswitch = 1;
break; break;
case QStyle::PM_SliderLength: case QStyle::PM_SliderLength:
tqt3pixelmetric = TQStyle::PM_SliderLength; tqt3pixelmetric = TQStyle::PM_SliderLength;
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQSlider, w);
retswitch = 1; retswitch = 1;
break; break;
case QStyle::PM_SliderTickmarkOffset: case QStyle::PM_SliderTickmarkOffset:
tqt3pixelmetric = TQStyle::PM_SliderTickmarkOffset; tqt3pixelmetric = TQStyle::PM_SliderTickmarkOffset;
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQSlider, w);
retswitch = 1; retswitch = 1;
break; break;
case QStyle::PM_SliderSpaceAvailable: case QStyle::PM_SliderSpaceAvailable:
@ -1900,9 +2024,9 @@ int SimpleStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const
// retswitch = 1; // retswitch = 1;
// break; // break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No metrics for Qt4 element %d\n\r", metric); fflush(stdout); printf("No metrics for Qt4 element %d\n\r", metric); fflush(stdout);
#endif }
retval = 0; retval = 0;
} }
@ -1922,7 +2046,7 @@ int SimpleStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const
} }
else { else {
// Tell Qt4 to get the information // Tell Qt4 to get the information
retval = QCommonStyle::pixelMetric(metric, opt, w); retval = BASE_QT4_STYLE_CLASS::pixelMetric(metric, opt, w);
} }
} }
@ -1944,6 +2068,7 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
const QScrollBar* qt4scrollbar_widget = 0; const QScrollBar* qt4scrollbar_widget = 0;
const QSpinBox* qt4spinbox_widget = 0; const QSpinBox* qt4spinbox_widget = 0;
const QMenuBar* qt4menubar_widget = 0; const QMenuBar* qt4menubar_widget = 0;
const QToolBox* qt4toolbox_widget = 0;
const QStyleOptionTitleBar* qt4titlebar_options = 0; const QStyleOptionTitleBar* qt4titlebar_options = 0;
@ -1954,12 +2079,16 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
TQColor bgcolor; TQColor bgcolor;
// FIXME
// Enabling this breaks sliders and all other dynamically updated widgets
#if 0
// If the interface widget was already initialized for this widget then do nothing // If the interface widget was already initialized for this widget then do nothing
// This is a very simplistic algorithm that should probably be replaced with a full hashtable lookup scheme // This is a very simplistic algorithm that should probably be replaced with a full hashtable lookup scheme
if (m_previousQt4InterfaceWidget == w) { if (m_previousQt4InterfaceWidget == w) {
return m_previousTQt3InterfaceWidget; return m_previousTQt3InterfaceWidget;
} }
m_previousQt4InterfaceWidget = w; m_previousQt4InterfaceWidget = w;
#endif
switch (wt) { switch (wt) {
case TQT3WT_TQProgressBar: case TQT3WT_TQProgressBar:
@ -1971,10 +2100,10 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3progressbar_widget->setProgress(qt4progressbar_widget->value()-qt4progressbar_widget->minimum(),qt4progressbar_widget->maximum()-qt4progressbar_widget->minimum()); m_tqt3progressbar_widget->setProgress(qt4progressbar_widget->value()-qt4progressbar_widget->minimum(),qt4progressbar_widget->maximum()-qt4progressbar_widget->minimum());
if (qt4progressbar_widget->orientation() != Qt::Horizontal) { if (qt4progressbar_widget->orientation() != Qt::Horizontal) {
// Qt3 cannot draw vertical progress bars // Qt3 cannot draw vertical progress bars
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to draw vertical Qt4 progress bar\n\r"); fflush(stdout); printf("No rules to draw vertical Qt4 progress bar\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQTabBar: case TQT3WT_TQTabBar:
@ -1996,7 +2125,7 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
newTab->setIdentifier(i); newTab->setIdentifier(i);
} }
else { else {
TQTab* newTab = new TQTab(convertQt4ToTQt3IconSet(qt4tabbar_widget->tabIcon(i), m_tqt3IconSize_Small, m_tqt3IconSize_Large), convertQt4ToTQt3String(qt4tabbar_widget->tabText(i))); TQTab* newTab = new TQTab(convertQt4ToTQt3IconSet(qt4tabbar_widget->tabIcon(i), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4tabbar_widget->tabText(i)));
m_tqt3tabbar_widget->insertTab(newTab, i); m_tqt3tabbar_widget->insertTab(newTab, i);
newTab->setIdentifier(i); newTab->setIdentifier(i);
} }
@ -2017,18 +2146,18 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
break; break;
default: default:
// Qt3 cannot draw other tab shapes // Qt3 cannot draw other tab shapes
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to draw Qt4 tab shape %d\n\r", qt4tabbar_widget->shape()); fflush(stdout); printf("No rules to draw Qt4 tab shape %d\n\r", qt4tabbar_widget->shape()); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
m_tqt3tabbar_widget->setShape(tqt3tbshape); m_tqt3tabbar_widget->setShape(tqt3tbshape);
} }
else { else {
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("Unable to draw Qt4 tabbar with no Qt4 object available\n\r"); fflush(stdout); printf("Unable to draw Qt4 tabbar with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQRadioButton: case TQT3WT_TQRadioButton:
@ -2054,7 +2183,7 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
} }
else { else {
m_tqt3combobox_widget->insertItem(convertQt4ToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); m_tqt3combobox_widget->insertItem(convertQt4ToTQt3Pixmap(qt4combobox_widget->itemIcon(i), m_tqt3IconSize_Small, m_internalTQt3PixmapCache), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i);
} }
} }
m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable()); m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable());
@ -2082,7 +2211,7 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i); m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
} }
else { else {
m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large), convertQt4ToTQt3String(currentAction->text()), i, i); m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
} }
// FIXME // FIXME
// Handle pixmaps, etc. // Handle pixmaps, etc.
@ -2118,7 +2247,7 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3menubar_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i); m_tqt3menubar_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i);
} }
else { else {
m_tqt3menubar_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large), convertQt4ToTQt3String(currentAction->text()), i, i); m_tqt3menubar_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon(), m_tqt3IconSize_Small, m_tqt3IconSize_Large, m_internalTQt3PixmapCache), convertQt4ToTQt3String(currentAction->text()), i, i);
} }
// FIXME // FIXME
// Handle pixmaps, etc. // Handle pixmaps, etc.
@ -2148,10 +2277,10 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3slider_widget->setValue(qt4slider_widget->value()); m_tqt3slider_widget->setValue(qt4slider_widget->value());
} }
else { else {
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("Unable to draw Qt4 slider with no Qt4 object available\n\r"); fflush(stdout); printf("Unable to draw Qt4 slider with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQScrollBar: case TQT3WT_TQScrollBar:
@ -2170,10 +2299,10 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3scrollbar_widget->setValue(qt4scrollbar_widget->value()); m_tqt3scrollbar_widget->setValue(qt4scrollbar_widget->value());
} }
else { else {
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("Unable to draw Qt4 scrollbar with no Qt4 object available\n\r"); fflush(stdout); printf("Unable to draw Qt4 scrollbar with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQSpinBox: case TQT3WT_TQSpinBox:
@ -2189,10 +2318,10 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
m_tqt3spinbox_widget->setValue(qt4spinbox_widget->value()); m_tqt3spinbox_widget->setValue(qt4spinbox_widget->value());
} }
else { else {
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout); printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQSpinWidget: case TQT3WT_TQSpinWidget:
@ -2209,10 +2338,10 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
// m_tqt3spinbox_widget->setValue(qt4spinbox_widget->value()); // m_tqt3spinbox_widget->setValue(qt4spinbox_widget->value());
} }
else { else {
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout); printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0; interfaceWidget = 0;
#endif
} }
break; break;
case TQT3WT_TQTitleBar: case TQT3WT_TQTitleBar:
@ -2232,7 +2361,31 @@ TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidge
else { else {
bgcolor = convertQt4ToTQt3Palette(qt4styleoptions->palette).inactive().highlight(); bgcolor = convertQt4ToTQt3Palette(qt4styleoptions->palette).inactive().highlight();
} }
m_tqt3titlebar_widget->setIcon(convertQt4ToTQt3Pixmap(qt4titlebar_options->icon, m_tqt3IconSize_Small, false, &bgcolor)); m_tqt3titlebar_widget->setIcon(convertQt4ToTQt3Pixmap(qt4titlebar_options->icon, m_tqt3IconSize_Small, m_internalTQt3PixmapCache, false, &bgcolor));
break;
case TQT3WT_TQToolBox:
interfaceWidget = m_tqt3toolbox_widget;
// Copy over all widget attributes
qt4toolbox_widget = dynamic_cast<const QToolBox*>(w);
if (qt4toolbox_widget) {
m_tqt3toolbox_widget->setGeometry(0, 0, qt4toolbox_widget->width(), qt4toolbox_widget->height());
m_tqt3toolbox_widget->setEnabled(qt4toolbox_widget->isEnabled());
// Remove all tabs
for (i=0;i<m_tqt3toolbox_widget->count();i++) {
m_tqt3toolbox_widget->removeItem(m_tqt3toolbox_widget->item(i));
}
// Copy all tabs
for (i=0;i<qt4toolbox_widget->count();i++) {
m_tqt3toolbox_widget->insertItem(i, m_tqt3generic_widget, convertQt4ToTQt3String(qt4toolbox_widget->itemText(i)));
}
}
else {
if (enable_debug_warnings) {
printf("Unable to draw Qt4 toolbox with no Qt4 object available\n\r"); fflush(stdout);
}
interfaceWidget = 0;
}
break;
} }
m_previousTQt3InterfaceWidget = interfaceWidget; m_previousTQt3InterfaceWidget = interfaceWidget;
@ -2258,9 +2411,9 @@ QRect SimpleStyle::subElementRect(SubElement element, const QStyleOption *opt, c
} }
break; break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to obtain Qt4 subelement rect %d\n\r", element); fflush(stdout); printf("No rules to obtain Qt4 subelement rect %d\n\r", element); fflush(stdout);
#endif }
can_override = false; can_override = false;
} }
@ -2268,15 +2421,15 @@ QRect SimpleStyle::subElementRect(SubElement element, const QStyleOption *opt, c
// Instruct TQt3 to obtain the subelement rect information // Instruct TQt3 to obtain the subelement rect information
retRect = convertTQt3ToQt4Rect(tqApp->style().subRect(tqtSR, interfaceWidget)); retRect = convertTQt3ToQt4Rect(tqApp->style().subRect(tqtSR, interfaceWidget));
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
#ifdef DEBUG_SPEW #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, control); fflush(stdout);
#endif
#endif #endif
}
} }
else { else {
// Tell Qt4 to obtain the subelement rect information // Tell Qt4 to obtain the subelement rect information
retRect = QCommonStyle::subElementRect(element, opt, w); retRect = BASE_QT4_STYLE_CLASS::subElementRect(element, opt, w);
} }
return retRect; return retRect;
@ -2449,9 +2602,9 @@ void SimpleStyle::drawComplexControl(ComplexControl control, const QStyleOptionC
NO_QT3_EQUIVALENT NO_QT3_EQUIVALENT
break; break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to draw Qt4 complex control %d\n\r", control); fflush(stdout); printf("No rules to draw Qt4 complex control %d\n\r", control); fflush(stdout);
#endif }
can_override = false; can_override = false;
} }
@ -2500,11 +2653,11 @@ void SimpleStyle::drawComplexControl(ComplexControl control, const QStyleOptionC
tqtPainter.setClipRect(tqt3rect.x(),tqt3rect.y(),sbleRect.x()+sbleRect.width(),tqt3rect.height()); tqtPainter.setClipRect(tqt3rect.x(),tqt3rect.y(),sbleRect.x()+sbleRect.width(),tqt3rect.height());
p->fillRect(sbleRect,convertTQt3ToQt4Color(tqt3colorgroup.base())); p->fillRect(sbleRect,convertTQt3ToQt4Color(tqt3colorgroup.base()));
} }
#ifdef DEBUG_WARNINGS
else { else {
printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout); if (enable_debug_warnings) {
printf("Unable to draw Qt4 spinbox with no Qt4 object available\n\r"); fflush(stdout);
}
} }
#endif
// Now draw the outside frame again, but clipped to the editor widget side of the spinwidget this time // Now draw the outside frame again, but clipped to the editor widget side of the spinwidget this time
// This fixes drawing glitches inside of the editor widget while leaving the spinbutton area untouched // This fixes drawing glitches inside of the editor widget while leaving the spinbutton area untouched
@ -2513,15 +2666,15 @@ void SimpleStyle::drawComplexControl(ComplexControl control, const QStyleOptionC
tqtPainter.end(); tqtPainter.end();
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
#ifdef DEBUG_SPEW #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", tqtCE, control); fflush(stdout);
#endif
#endif #endif
}
} }
else { else {
// Tell Qt4 to draw it // Tell Qt4 to draw it
QCommonStyle::drawComplexControl(control, opt, p, w); BASE_QT4_STYLE_CLASS::drawComplexControl(control, opt, p, w);
} }
} }
@ -2717,6 +2870,16 @@ void SimpleStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
// It is drawn as such below // It is drawn as such below
DO_NOT_DRAW DO_NOT_DRAW
break; break;
case QStyle::CE_ToolBoxTab:
// Unlike TQt3, QStyle::CE_ToolBoxTab draws the tab, the label, and the focus rectangle
// See below for Qt4 drawing calls
tqtCE = TQStyle::CE_ToolBoxTab;
sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQToolBox);
interfaceWidget = initializeInterfaceWidget(TQT3WT_TQToolBox, w);
if (interfaceWidget == 0) {
can_override = false;
}
break;
case QStyle::CE_MenuBarEmptyArea: case QStyle::CE_MenuBarEmptyArea:
tqtCE = TQStyle::CE_MenuBarEmptyArea; tqtCE = TQStyle::CE_MenuBarEmptyArea;
break; break;
@ -2764,9 +2927,9 @@ void SimpleStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
can_override = false; can_override = false;
break; break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to draw Qt4 control %d\n\r", element); fflush(stdout); printf("No rules to draw Qt4 control %d\n\r", element); fflush(stdout);
#endif }
can_override = false; can_override = false;
} }
@ -2805,16 +2968,21 @@ void SimpleStyle::drawControl(ControlElement element, const QStyleOption *opt, Q
tqtPainter.end(); tqtPainter.end();
#ifdef DEBUG_WARNINGS if (tqtCE == TQStyle::CE_ToolBoxTab) {
// Instruct Qt4 to draw the label
BASE_QT4_STYLE_CLASS::drawControl(QStyle::CE_ToolBoxTabLabel, opt, p, w);
}
if (enable_debug_warnings) {
#ifdef DEBUG_SPEW #ifdef DEBUG_SPEW
printf("Used Qt3 control %d to draw Qt4 control %d\n\r", tqtCE, element); fflush(stdout); printf("Used Qt3 control %d to draw Qt4 control %d\n\r", tqtCE, element); fflush(stdout);
#endif
#endif #endif
}
} }
else { else {
if (do_not_draw == false) { if (do_not_draw == false) {
// Tell Qt4 to draw it // Tell Qt4 to draw it
QCommonStyle::drawControl(element, opt, p, w); BASE_QT4_STYLE_CLASS::drawControl(element, opt, p, w);
} }
} }
} }
@ -2998,9 +3166,9 @@ void SimpleStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP
tqtPE = TQStyle::PE_Separator; tqtPE = TQStyle::PE_Separator;
break; break;
default: default:
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
printf("No rules to draw Qt4 element %d\n\r", pe); fflush(stdout); printf("No rules to draw Qt4 element %d\n\r", pe); fflush(stdout);
#endif }
can_override = false; can_override = false;
} }
@ -3032,7 +3200,7 @@ void SimpleStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP
if (tqtPE == TQStyle::PE_PanelLineEdit) { if (tqtPE == TQStyle::PE_PanelLineEdit) {
if (draw_transparent_background == false) { if (draw_transparent_background == false) {
// Tell Qt4 to draw the background // Tell Qt4 to draw the background
QCommonStyle::drawPrimitive(pe, opt, p, w); BASE_QT4_STYLE_CLASS::drawPrimitive(pe, opt, p, w);
} }
else { else {
p->fillRect(opt->rect, Qt::transparent); p->fillRect(opt->rect, Qt::transparent);
@ -3048,16 +3216,16 @@ void SimpleStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP
tqtPainter.end(); tqtPainter.end();
#ifdef DEBUG_WARNINGS if (enable_debug_warnings) {
#ifdef DEBUG_SPEW #ifdef DEBUG_SPEW
printf("Used Qt3 element %d to draw Qt4 element %d\n\r", tqtPE, pe); fflush(stdout); printf("Used Qt3 element %d to draw Qt4 element %d\n\r", tqtPE, pe); fflush(stdout);
#endif
#endif #endif
}
} }
else { else {
if (do_not_draw == false) { if (do_not_draw == false) {
// Tell Qt4 to draw it // Tell Qt4 to draw it
QCommonStyle::drawPrimitive(pe, opt, p, w); BASE_QT4_STYLE_CLASS::drawPrimitive(pe, opt, p, w);
} }
} }
} }

@ -38,8 +38,10 @@ class TQSpinBox;
class TQSpinWidget; class TQSpinWidget;
class TQTitleBar; class TQTitleBar;
class TQMenuBar; class TQMenuBar;
class TQToolBox;
class KAboutData; class KAboutData;
class TQPixmapCache;
enum TQt3WidgetType { enum TQt3WidgetType {
TQT3WT_NONE, TQT3WT_NONE,
@ -53,7 +55,8 @@ enum TQt3WidgetType {
TQT3WT_TQSpinBox, TQT3WT_TQSpinBox,
TQT3WT_TQSpinWidget, TQT3WT_TQSpinWidget,
TQT3WT_TQTitleBar, TQT3WT_TQTitleBar,
TQT3WT_TQMenuBar TQT3WT_TQMenuBar,
TQT3WT_TQToolBox
}; };
class SimpleStyle : public QWindowsStyle class SimpleStyle : public QWindowsStyle
@ -76,6 +79,7 @@ public:
int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const; int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const;
int styleHint(StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const; int styleHint(StyleHint hint, const QStyleOption * option = 0, const QWidget * widget = 0, QStyleHintReturn * returnData = 0) const;
QSize sizeFromContents(ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget = 0) const;
QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const; QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const;
@ -96,6 +100,7 @@ private:
TQWidget* m_tqt3window_widget; TQWidget* m_tqt3window_widget;
TQTitleBar* m_tqt3titlebar_widget; TQTitleBar* m_tqt3titlebar_widget;
TQMenuBar* m_tqt3menubar_widget; TQMenuBar* m_tqt3menubar_widget;
TQToolBox* m_tqt3toolbox_widget;
int m_tqt3IconSize_NoGroup; int m_tqt3IconSize_NoGroup;
int m_tqt3IconSize_Desktop; int m_tqt3IconSize_Desktop;
@ -117,6 +122,8 @@ private:
mutable TQWidget* m_previousTQt3InterfaceWidget; mutable TQWidget* m_previousTQt3InterfaceWidget;
KAboutData* m_aboutData; KAboutData* m_aboutData;
TQPixmapCache* m_internalTQt3PixmapCache;
}; };
#endif #endif

Loading…
Cancel
Save