diff options
author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-03-10 16:08:00 -0600 |
---|---|---|
committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2012-03-10 16:08:00 -0600 |
commit | 7506cadc8d243931a745a50ff4a83c89af95a19f (patch) | |
tree | b047ff3d0b26805adb8dfc7ec37ab7b267b5472e /plugin | |
download | qt4-tqt-theme-engine-7506cadc8d243931a745a50ff4a83c89af95a19f.tar.gz qt4-tqt-theme-engine-7506cadc8d243931a745a50ff4a83c89af95a19f.zip |
Initial import
Diffstat (limited to 'plugin')
-rw-r--r-- | plugin/Makefile | 271 | ||||
-rw-r--r-- | plugin/plugin.pro | 28 | ||||
-rw-r--r-- | plugin/simplestyle.cpp | 1586 | ||||
-rw-r--r-- | plugin/simplestyle.h | 75 | ||||
-rw-r--r-- | plugin/simplestyleplugin.cpp | 64 | ||||
-rw-r--r-- | plugin/simplestyleplugin.h | 64 | ||||
-rw-r--r-- | plugin/tdeqt4painter.cpp | 772 | ||||
-rw-r--r-- | plugin/tdeqt4painter.h | 49 |
8 files changed, 2909 insertions, 0 deletions
diff --git a/plugin/Makefile b/plugin/Makefile new file mode 100644 index 0000000..a128159 --- /dev/null +++ b/plugin/Makefile @@ -0,0 +1,271 @@ +############################################################################# +# Makefile for building: libsimplestyleplugin.so +# Generated by qmake (2.01a) (Qt 4.7.0) on: Sat Mar 10 16:06:19 2012 +# Project: plugin.pro +# Template: lib +# Command: /usr/bin/qmake-qt4 -o Makefile plugin.pro +############################################################################# + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_NO_DEBUG -DQT_PLUGIN -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED +CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I/usr/include/tqt3 -I/usr/include/tqt -I/opt/trinity/include -I. +LINK = g++ +LFLAGS = -Wl,-O1 -shared +LIBS = $(SUBLIBS) -L/usr/lib -L/usr/lib -ltqt -ltqt-mt -L /opt/trinity/lib -lDCOP -ltdecore -lQtGui -lQtCore -lpthread +AR = ar cqs +RANLIB = +QMAKE = /usr/bin/qmake-qt4 +TAR = tar -cf +COMPRESS = gzip -9f +COPY = cp -f +SED = sed +COPY_FILE = $(COPY) +COPY_DIR = $(COPY) -r +STRIP = strip +INSTALL_FILE = install -m 644 -p +INSTALL_DIR = $(COPY_DIR) +INSTALL_PROGRAM = install -m 755 -p +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = simplestyle.cpp \ + simplestyleplugin.cpp \ + tdeqt4painter.cpp moc_simplestyle.cpp \ + moc_simplestyleplugin.cpp +OBJECTS = simplestyle.o \ + simplestyleplugin.o \ + tdeqt4painter.o \ + moc_simplestyle.o \ + moc_simplestyleplugin.o +DIST = /usr/share/qt4/mkspecs/common/g++.conf \ + /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + plugin.pro +QMAKE_TARGET = simplestyleplugin +DESTDIR = ../styles/ +TARGET = libsimplestyleplugin.so +TARGETD = libsimplestyleplugin.so + +first: all +####### Implicit rules + +.SUFFIXES: .o .c .cpp .cc .cxx .C + +.cpp.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cc.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.cxx.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.C.o: + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" + +.c.o: + $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" + +####### Build rules + +all: Makefile ../styles/$(TARGET) + +../styles/$(TARGET): $(OBJECTS) $(SUBLIBS) $(OBJCOMP) + @$(CHK_DIR_EXISTS) ../styles/ || $(MKDIR) ../styles/ + -$(DEL_FILE) $(TARGET) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP) + -$(MOVE) $(TARGET) ../styles/ + + + +Makefile: plugin.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/g++.conf \ + /usr/share/qt4/mkspecs/common/unix.conf \ + /usr/share/qt4/mkspecs/common/linux.conf \ + /usr/share/qt4/mkspecs/qconfig.pri \ + /usr/share/qt4/mkspecs/features/qt_functions.prf \ + /usr/share/qt4/mkspecs/features/qt_config.prf \ + /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ + /usr/share/qt4/mkspecs/features/default_pre.prf \ + /usr/share/qt4/mkspecs/features/release.prf \ + /usr/share/qt4/mkspecs/features/default_post.prf \ + /usr/share/qt4/mkspecs/features/warn_on.prf \ + /usr/share/qt4/mkspecs/features/qt.prf \ + /usr/share/qt4/mkspecs/features/unix/thread.prf \ + /usr/share/qt4/mkspecs/features/moc.prf \ + /usr/share/qt4/mkspecs/features/resources.prf \ + /usr/share/qt4/mkspecs/features/uic.prf \ + /usr/share/qt4/mkspecs/features/yacc.prf \ + /usr/share/qt4/mkspecs/features/lex.prf \ + /usr/share/qt4/mkspecs/features/include_source_dir.prf \ + /usr/lib/libQtGui.prl \ + /usr/lib/libQtCore.prl + $(QMAKE) -o Makefile plugin.pro +/usr/share/qt4/mkspecs/common/g++.conf: +/usr/share/qt4/mkspecs/common/unix.conf: +/usr/share/qt4/mkspecs/common/linux.conf: +/usr/share/qt4/mkspecs/qconfig.pri: +/usr/share/qt4/mkspecs/features/qt_functions.prf: +/usr/share/qt4/mkspecs/features/qt_config.prf: +/usr/share/qt4/mkspecs/features/exclusive_builds.prf: +/usr/share/qt4/mkspecs/features/default_pre.prf: +/usr/share/qt4/mkspecs/features/release.prf: +/usr/share/qt4/mkspecs/features/default_post.prf: +/usr/share/qt4/mkspecs/features/warn_on.prf: +/usr/share/qt4/mkspecs/features/qt.prf: +/usr/share/qt4/mkspecs/features/unix/thread.prf: +/usr/share/qt4/mkspecs/features/moc.prf: +/usr/share/qt4/mkspecs/features/resources.prf: +/usr/share/qt4/mkspecs/features/uic.prf: +/usr/share/qt4/mkspecs/features/yacc.prf: +/usr/share/qt4/mkspecs/features/lex.prf: +/usr/share/qt4/mkspecs/features/include_source_dir.prf: +/usr/lib/libQtGui.prl: +/usr/lib/libQtCore.prl: +qmake: FORCE + @$(QMAKE) -o Makefile plugin.pro + +dist: + @$(CHK_DIR_EXISTS) .tmp/simplestyleplugin1.0.0 || $(MKDIR) .tmp/simplestyleplugin1.0.0 + $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/simplestyleplugin1.0.0/ && $(COPY_FILE) --parents simplestyle.h simplestyleplugin.h tdeqt4painter.h .tmp/simplestyleplugin1.0.0/ && $(COPY_FILE) --parents simplestyle.cpp simplestyleplugin.cpp tdeqt4painter.cpp .tmp/simplestyleplugin1.0.0/ && (cd `dirname .tmp/simplestyleplugin1.0.0` && $(TAR) simplestyleplugin1.0.0.tar simplestyleplugin1.0.0 && $(COMPRESS) simplestyleplugin1.0.0.tar) && $(MOVE) `dirname .tmp/simplestyleplugin1.0.0`/simplestyleplugin1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/simplestyleplugin1.0.0 + + +clean:compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +####### Sub-libraries + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) Makefile + + +check: first + +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +compiler_moc_header_make_all: moc_simplestyle.cpp moc_simplestyleplugin.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_simplestyle.cpp moc_simplestyleplugin.cpp +moc_simplestyle.cpp: simplestyle.h + /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) simplestyle.h -o moc_simplestyle.cpp + +moc_simplestyleplugin.cpp: simplestyleplugin.h + /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) simplestyleplugin.h -o moc_simplestyleplugin.cpp + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_image_collection_make_all: qmake_image_collection.cpp +compiler_image_collection_clean: + -$(DEL_FILE) qmake_image_collection.cpp +compiler_moc_source_make_all: simplestyle.moc +compiler_moc_source_clean: + -$(DEL_FILE) simplestyle.moc +simplestyle.moc: simplestyle.h \ + tdeqt4painter.h \ + simplestyle.cpp + /usr/bin/moc-qt4 $(DEFINES) $(INCPATH) simplestyle.cpp -o simplestyle.moc + +compiler_uic_make_all: +compiler_uic_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_header_clean compiler_moc_source_clean + +####### Compile + +simplestyle.o: simplestyle.cpp simplestyle.h \ + tdeqt4painter.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o simplestyle.o simplestyle.cpp + +simplestyleplugin.o: simplestyleplugin.cpp simplestyleplugin.h \ + simplestyle.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o simplestyleplugin.o simplestyleplugin.cpp + +tdeqt4painter.o: tdeqt4painter.cpp tdeqt4painter.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o tdeqt4painter.o tdeqt4painter.cpp + +moc_simplestyle.o: moc_simplestyle.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_simplestyle.o moc_simplestyle.cpp + +moc_simplestyleplugin.o: moc_simplestyleplugin.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_simplestyleplugin.o moc_simplestyleplugin.cpp + +####### Install + +install_target: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/ || $(MKDIR) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/ + -$(INSTALL_PROGRAM) "../styles/$(TARGET)" "$(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/$(TARGET)" + -$(STRIP) --strip-unneeded "$(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/$(TARGET)" + +uninstall_target: FORCE + -$(DEL_FILE) "$(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/$(TARGET)" + -$(DEL_DIR) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/styles/ + + +install_sources: first FORCE + @$(CHK_DIR_EXISTS) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ || $(MKDIR) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/simplestyle.cpp $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/simplestyleplugin.cpp $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/tdeqt4painter.cpp $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/simplestyle.h $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/simplestyleplugin.h $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/tdeqt4painter.h $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + -$(INSTALL_FILE) /home/eldarion/experimental/qt4-tqt-theme-engine/plugin/plugin.pro $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + + +uninstall_sources: FORCE + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/simplestyle.cpp + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/simplestyleplugin.cpp + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/tdeqt4painter.cpp + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/simplestyle.h + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/simplestyleplugin.h + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/tdeqt4painter.h + -$(DEL_FILE) -r $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/plugin.pro + -$(DEL_DIR) $(INSTALL_ROOT)/usr/lib/qt4/examples/tools/styleplugin/plugin/ + + +install: install_target install_sources FORCE + +uninstall: uninstall_target uninstall_sources FORCE + +FORCE: + diff --git a/plugin/plugin.pro b/plugin/plugin.pro new file mode 100644 index 0000000..26e8615 --- /dev/null +++ b/plugin/plugin.pro @@ -0,0 +1,28 @@ +#! [0] +TEMPLATE = lib +CONFIG += plugin +HEADERS = simplestyle.h \ + simplestyleplugin.h \ + tdeqt4painter.h +SOURCES = simplestyle.cpp \ + simplestyleplugin.cpp \ + tdeqt4painter.cpp +TARGET = simplestyleplugin + +INCLUDEPATH += /usr/include/tqt3 +INCLUDEPATH += /usr/include/tqt +INCLUDEPATH += /opt/trinity/include +LIBS += -L/usr/lib -ltqt -ltqt-mt -L /opt/trinity/lib -lDCOP -ltdecore + +#! [0] +DESTDIR = ../styles/ + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin/styles +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS plugin.pro +sources.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin/plugin +INSTALLS += target sources + +symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) + +symbian:TARGET.EPOCALLOWDLLDATA = 1 diff --git a/plugin/simplestyle.cpp b/plugin/simplestyle.cpp new file mode 100644 index 0000000..08299dc --- /dev/null +++ b/plugin/simplestyle.cpp @@ -0,0 +1,1586 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Timothy Pearson. All rights reserved. +** +** This file is part of the TDE Qt4 style interface +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#define TQT_NO_COMPAT_NAMES +#include <tqstyle.h> +#include <tqpixmap.h> +#include <tqpainter.h> +#include <tqapplication.h> +#include <tqprogressbar.h> +#include <tqtabbar.h> +#include <tqradiobutton.h> +#include <tqpopupmenu.h> +#include <tqmenudata.h> +#include <tqcombobox.h> +#include <tqiconset.h> +#undef Qt + +#include <QtGui/QtGui> +#include <QtGui/QX11Info> + +#include "simplestyle.h" +#include "tdeqt4painter.h" + +#define INTEGRATE_WITH_TDE 1 + +#ifdef INTEGRATE_WITH_TDE +#undef Q_OBJECT +#define Q_OBJECT TQ_OBJECT +#include <kapplication.h> +#include <kcmdlineargs.h> +#include <kaboutdata.h> +#include <kicontheme.h> +#endif + +#define DEBUG_WARNINGS 1 +// #define DEBUG_SPEW 1 + +inline QColor convertTQt3ToQt4Color(TQColor tqt3color) +{ + return QColor(tqt3color.red(), tqt3color.green(), tqt3color.blue()); +} + +inline TQColor convertQt4ToTQt3Color(QColor qt4color) +{ + return TQColor(qt4color.red(), qt4color.green(), qt4color.blue()); +} + +inline QString convertTQt3ToQt4String(TQString tqt3string) +{ + return QString::fromUtf8(tqt3string.utf8().data()); +} + +inline TQString convertQt4ToTQt3String(QString qt4string) +{ + return TQString::fromUtf8(qt4string.toUtf8().data()); +} + +inline TQIconSet convertQt4ToTQt3IconSet(QIcon qt4icon) +{ + int i=0; + int j=0; + QIcon::Mode qt4iconmode; + TQIconSet::Mode tqt3iconmode; + QIcon::State qt4iconstate; + TQIconSet::State tqt3iconstate; + + TQIconSet tqt3iconset; + + // Get the maximum icon size stored in the QIcon and generate a pixmap of that size + QSize qt4size = qt4icon.actualSize(QSize(32768,32768)); + + for (i=0;i<3;i++) { + for (j=0;j<2;j++) { + if (i==0) { + qt4iconmode = QIcon::Normal; + tqt3iconmode = TQIconSet::Normal; + } + if (i==1) { + qt4iconmode = QIcon::Disabled; + tqt3iconmode = TQIconSet::Disabled; + } + if (i==2) { + qt4iconmode = QIcon::Active; + tqt3iconmode = TQIconSet::Active; + } + if (j==0) { + qt4iconstate = QIcon::On; + tqt3iconstate = TQIconSet::On; + } + if (j==1) { + qt4iconstate = QIcon::Off; + tqt3iconstate = TQIconSet::Off; + } + QPixmap qt4iconpm = qt4icon.pixmap(qt4size, qt4iconmode, qt4iconstate); + TQPixmap tqtPM(qt4iconpm.width(), qt4iconpm.height(), qt4iconpm.depth()); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared); + QPainter qt4painter(&qtPM); + qt4painter.drawPixmap(0, 0, qt4iconpm); + qt4painter.end(); + + tqt3iconset.setPixmap(tqtPM, TQIconSet::Automatic, tqt3iconmode, tqt3iconstate); + } + } + + return tqt3iconset; +} + +inline TQPixmap convertQt4ToTQt3Pixmap(QIcon qt4icon) +{ + // Get the maximum icon size stored in the QIcon and generate a pixmap of that size + QSize qt4size = qt4icon.actualSize(QSize(32768,32768)); + + QPixmap qt4iconpm = qt4icon.pixmap(qt4size); + TQPixmap tqtPM(qt4iconpm.width(), qt4iconpm.height(), qt4iconpm.depth()); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared); + QPainter qt4painter(&qtPM); + qt4painter.drawPixmap(0, 0, qt4iconpm); + qt4painter.end(); + + return tqtPM; +} + +inline QRect convertTQt3ToQt4Rect(TQRect tqt3rect) +{ + return QRect(tqt3rect.x(), tqt3rect.y(), tqt3rect.width(), tqt3rect.height()); +} + +inline QBrush convertTQt3ToQt4Brush(TQBrush tqt3brush) +{ + QBrush qt4brush; + TQt::BrushStyle tqt3brushstyle = tqt3brush.style(); + Qt::BrushStyle qt4brushstyle; + + switch ( tqt3brushstyle ) { + case TQt::NoBrush: + qt4brushstyle = Qt::NoBrush; + break; + case TQt::SolidPattern: + qt4brushstyle = Qt::SolidPattern; + break; + case TQt::Dense1Pattern: + qt4brushstyle = Qt::Dense1Pattern; + break; + case TQt::Dense2Pattern: + qt4brushstyle = Qt::Dense2Pattern; + break; + case TQt::Dense3Pattern: + qt4brushstyle = Qt::Dense3Pattern; + break; + case TQt::Dense4Pattern: + qt4brushstyle = Qt::Dense4Pattern; + break; + case TQt::Dense5Pattern: + qt4brushstyle = Qt::Dense5Pattern; + break; + case TQt::Dense6Pattern: + qt4brushstyle = Qt::Dense6Pattern; + break; + case TQt::Dense7Pattern: + qt4brushstyle = Qt::Dense7Pattern; + break; + case TQt::HorPattern: + qt4brushstyle = Qt::HorPattern; + break; + case TQt::VerPattern: + qt4brushstyle = Qt::VerPattern; + break; + case TQt::CrossPattern: + qt4brushstyle = Qt::CrossPattern; + break; + case TQt::BDiagPattern: + qt4brushstyle = Qt::BDiagPattern; + break; + case TQt::FDiagPattern: + qt4brushstyle = Qt::FDiagPattern; + break; + case TQt::DiagCrossPattern: + qt4brushstyle = Qt::DiagCrossPattern; + break; + case TQt::CustomPattern: + qt4brushstyle = Qt::TexturePattern; + break; + default: + qt4brushstyle = Qt::NoBrush; +#if defined(QT_CHECK_RANGE) + tqWarning( "convertTQt3ToQt4Brush: Invalid brush style %d", tqt3brushstyle ); +#endif + } + qt4brush.setStyle(qt4brushstyle); + TQColor qt3color = tqt3brush.color(); + qt4brush.setColor(QColor(qt3color.red(), qt3color.green(), qt3color.blue(), 255)); + if (qt4brushstyle == Qt::TexturePattern) { + TQPixmap tqtPM = *tqt3brush.pixmap(); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ImplicitlyShared); + qt4brush.setTexture(qtPM); + } + + return qt4brush; +} + +inline TQBrush convertQt4ToTQt3Brush(QBrush qt4brush) +{ + TQBrush tqt3brush; + Qt::BrushStyle qt4brushstyle = qt4brush.style(); + TQt::BrushStyle tqt3brushstyle; + + switch ( qt4brushstyle ) { + case Qt::NoBrush: + tqt3brushstyle = TQt::NoBrush; + break; + case Qt::SolidPattern: + tqt3brushstyle = TQt::SolidPattern; + break; + case Qt::Dense1Pattern: + tqt3brushstyle = TQt::Dense1Pattern; + break; + case Qt::Dense2Pattern: + tqt3brushstyle = TQt::Dense2Pattern; + break; + case Qt::Dense3Pattern: + tqt3brushstyle = TQt::Dense3Pattern; + break; + case Qt::Dense4Pattern: + tqt3brushstyle = TQt::Dense4Pattern; + break; + case Qt::Dense5Pattern: + tqt3brushstyle = TQt::Dense5Pattern; + break; + case Qt::Dense6Pattern: + tqt3brushstyle = TQt::Dense6Pattern; + break; + case Qt::Dense7Pattern: + tqt3brushstyle = TQt::Dense7Pattern; + break; + case Qt::HorPattern: + tqt3brushstyle = TQt::HorPattern; + break; + case Qt::VerPattern: + tqt3brushstyle = TQt::VerPattern; + break; + case Qt::CrossPattern: + tqt3brushstyle = TQt::CrossPattern; + break; + case Qt::BDiagPattern: + tqt3brushstyle = TQt::BDiagPattern; + break; + case Qt::FDiagPattern: + tqt3brushstyle = TQt::FDiagPattern; + break; + case Qt::DiagCrossPattern: + tqt3brushstyle = TQt::DiagCrossPattern; + break; + case Qt::TexturePattern: + tqt3brushstyle = TQt::CustomPattern; + break; + default: + tqt3brushstyle = TQt::NoBrush; +#if defined(QT_CHECK_RANGE) + tqWarning( "convertQt4ToTQt3Brush: Invalid brush style %d", tqt3brushstyle ); +#endif + } + tqt3brush.setStyle(tqt3brushstyle); + QColor qt4color = qt4brush.color(); + tqt3brush.setColor(TQColor(qt4color.red(), qt4color.green(), qt4color.blue())); + if (tqt3brushstyle == TQt::CustomPattern) { + QPixmap qt4texture = qt4brush.texture(); + TQPixmap tqtPM(qt4texture.width(), qt4texture.height(), qt4texture.depth()); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ExplicitlyShared); + QPainter qt4painter(&qtPM); + qt4painter.drawPixmap(0, 0, qt4texture); + qt4painter.end(); + tqt3brush.setPixmap(tqtPM); + } + + return tqt3brush; +} + +inline QPalette convertTQt3ToQt4Palette(TQPalette tqt3palette) +{ + int i; + QPalette qt4palette; + + // Color groups + TQPalette::ColorGroup tqt3cgroup; + QPalette::ColorGroup qt4cgroup; + TQColor tqt3color; + for (i=0;i<3;i++) { + if (i == 0) { + tqt3cgroup = TQPalette::Disabled; + qt4cgroup = QPalette::Disabled; + } + if (i == 1) { + tqt3cgroup = TQPalette::Active; + qt4cgroup = QPalette::Active; + } + if (i == 2) { + tqt3cgroup = TQPalette::Inactive; + qt4cgroup = QPalette::Inactive; + } + + // Brushes + qt4palette.setBrush(qt4cgroup, QPalette::Background, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Background))); + qt4palette.setBrush(qt4cgroup, QPalette::Foreground, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Foreground))); + qt4palette.setBrush(qt4cgroup, QPalette::Base, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Base))); + qt4palette.setBrush(qt4cgroup, QPalette::Text, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Text))); + qt4palette.setBrush(qt4cgroup, QPalette::Button, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Button))); + qt4palette.setBrush(qt4cgroup, QPalette::ButtonText, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::ButtonText))); + qt4palette.setBrush(qt4cgroup, QPalette::Light, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Light))); + qt4palette.setBrush(qt4cgroup, QPalette::Midlight, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Midlight))); + qt4palette.setBrush(qt4cgroup, QPalette::Dark, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Dark))); + qt4palette.setBrush(qt4cgroup, QPalette::Mid, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Mid))); + qt4palette.setBrush(qt4cgroup, QPalette::Shadow, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Shadow))); + qt4palette.setBrush(qt4cgroup, QPalette::Highlight, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Highlight))); + qt4palette.setBrush(qt4cgroup, QPalette::HighlightedText, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::HighlightedText))); + qt4palette.setBrush(qt4cgroup, QPalette::BrightText, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::BrightText))); + qt4palette.setBrush(qt4cgroup, QPalette::Link, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::Link))); + qt4palette.setBrush(qt4cgroup, QPalette::LinkVisited, convertTQt3ToQt4Brush(tqt3palette.brush(tqt3cgroup, TQColorGroup::LinkVisited))); + + // Colors + qt4palette.setColor(qt4cgroup, QPalette::Background, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Background))); + qt4palette.setColor(qt4cgroup, QPalette::Foreground, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Foreground))); + qt4palette.setColor(qt4cgroup, QPalette::Base, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Base))); + qt4palette.setColor(qt4cgroup, QPalette::Text, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Text))); + qt4palette.setColor(qt4cgroup, QPalette::Button, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Button))); + qt4palette.setColor(qt4cgroup, QPalette::ButtonText, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::ButtonText))); + qt4palette.setColor(qt4cgroup, QPalette::Light, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Light))); + qt4palette.setColor(qt4cgroup, QPalette::Midlight, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Midlight))); + qt4palette.setColor(qt4cgroup, QPalette::Dark, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Dark))); + qt4palette.setColor(qt4cgroup, QPalette::Mid, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Mid))); + qt4palette.setColor(qt4cgroup, QPalette::Shadow, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Shadow))); + qt4palette.setColor(qt4cgroup, QPalette::Highlight, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Highlight))); + qt4palette.setColor(qt4cgroup, QPalette::HighlightedText, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::HighlightedText))); + qt4palette.setColor(qt4cgroup, QPalette::BrightText, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::BrightText))); + qt4palette.setColor(qt4cgroup, QPalette::Link, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::Link))); + qt4palette.setColor(qt4cgroup, QPalette::LinkVisited, convertTQt3ToQt4Color(tqt3palette.color(tqt3cgroup, TQColorGroup::LinkVisited))); + } + + return qt4palette; +} + +inline TQPalette convertQt4ToTQt3Palette(QPalette qt4palette) +{ + int i; + TQPalette tqt3palette; + + // Color groups + TQPalette::ColorGroup tqt3cgroup; + QPalette::ColorGroup qt4cgroup; + TQColor tqt3color; + for (i=0;i<3;i++) { + if (i == 0) { + tqt3cgroup = TQPalette::Disabled; + qt4cgroup = QPalette::Disabled; + } + if (i == 1) { + tqt3cgroup = TQPalette::Active; + qt4cgroup = QPalette::Active; + } + if (i == 2) { + tqt3cgroup = TQPalette::Inactive; + qt4cgroup = QPalette::Inactive; + } + + // Brushes + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Background, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Background))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Foreground, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Foreground))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Base, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Base))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Text, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Text))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Button, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Button))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::ButtonText, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::ButtonText))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Light, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Light))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Midlight, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Midlight))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Dark, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Dark))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Mid, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Mid))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Shadow, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Shadow))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Highlight, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Highlight))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::HighlightedText, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::HighlightedText))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::BrightText, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::BrightText))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::Link, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::Link))); + tqt3palette.setBrush(tqt3cgroup, TQColorGroup::LinkVisited, convertQt4ToTQt3Brush(qt4palette.brush(qt4cgroup, QPalette::LinkVisited))); + + // Colors + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Background, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Background))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Foreground, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Foreground))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Base, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Base))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Text, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Text))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Button, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Button))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::ButtonText, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::ButtonText))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Light, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Light))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Midlight, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Midlight))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Dark, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Dark))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Mid, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Mid))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Shadow, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Shadow))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Highlight, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Highlight))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::HighlightedText, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::HighlightedText))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::BrightText, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::BrightText))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::Link, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::Link))); + tqt3palette.setColor(tqt3cgroup, TQColorGroup::LinkVisited, convertQt4ToTQt3Color(qt4palette.color(qt4cgroup, QPalette::LinkVisited))); + } + + return tqt3palette; +} + +inline TQStyle::SFlags convertQt4ToTQt3SFlags(QStyle::State qt4stateflags, TQt3WidgetType wt) +{ + // Convert sflags + TQStyle::SFlags sflags = 0; + + if (qt4stateflags & QStyle::State_Active) { + if (wt != TQT3WT_TQPopupMenu) { + sflags = sflags | TQStyle::Style_Active; + } + } + if (qt4stateflags & QStyle::State_AutoRaise) { + sflags = sflags | TQStyle::Style_AutoRaise; + } +// if (qt4stateflags & QStyle::State_Children) { +// sflags = sflags | TQStyle::; +// } + if (qt4stateflags & QStyle::State_DownArrow) { + sflags = sflags | TQStyle::Style_Down; + } +// if (qt4stateflags & QStyle::State_Editing) { +// sflags = sflags | TQStyle::; +// } + if (qt4stateflags & QStyle::State_Enabled) { + sflags = sflags | TQStyle::Style_Enabled; + } +// if (qt4stateflags & QStyle::State_HasEditFocus) { +// sflags = sflags | TQStyle::Style_HasFocus; +// } + if (qt4stateflags & QStyle::State_HasFocus) { + sflags = sflags | TQStyle::Style_HasFocus; + } + if (qt4stateflags & QStyle::State_Horizontal) { + sflags = sflags | TQStyle::Style_Horizontal; + } +// if (qt4stateflags & QStyle::State_KeyboardFocusChange) { +// sflags = sflags | TQStyle::; +// } + if (qt4stateflags & QStyle::State_MouseOver) { + sflags = sflags | TQStyle::Style_MouseOver; + } + if (qt4stateflags & QStyle::State_NoChange) { + sflags = sflags | TQStyle::Style_NoChange; + } + if (qt4stateflags & QStyle::State_Off) { + sflags = sflags | TQStyle::Style_Off; + } + if (qt4stateflags & QStyle::State_On) { + sflags = sflags | TQStyle::Style_On; + } + if (qt4stateflags & QStyle::State_Raised) { + sflags = sflags | TQStyle::Style_Raised; + } +// if (qt4stateflags & QStyle::State_ReadOnly) { +// sflags = sflags | TQStyle::; +// } + if (qt4stateflags & QStyle::State_Selected) { + if (wt == TQT3WT_TQPopupMenu) { + sflags = sflags | TQStyle::Style_Active; + } + sflags = sflags | TQStyle::Style_Selected; + } +// if (qt4stateflags & QStyle::State_Item) { +// sflags = sflags | TQStyle::; +// } +// if (qt4stateflags & QStyle::State_Open) { +// sflags = sflags | TQStyle::; +// } +// if (qt4stateflags & QStyle::State_Sibling) { +// sflags = sflags | TQStyle::; +// } + if (qt4stateflags & QStyle::State_Sunken) { + sflags = sflags | TQStyle::Style_Sunken; + } + if (qt4stateflags & QStyle::State_UpArrow) { + sflags = sflags | TQStyle::Style_Up; + } +// if (qt4stateflags & QStyle::State_Mini) { +// sflags = sflags | TQStyle::; +// } +// if (qt4stateflags & QStyle::State_Small) { +// sflags = sflags | TQStyle::; +// } + + return sflags; +} + +SimpleStyle::SimpleStyle() +{ +#ifdef INTEGRATE_WITH_TDE + if (!tqApp) { + // Initialize KApplication required data structures + int argc = 1; + char** argv; + // Supply it with fake data to keep KApplication happy + argv = (char**) malloc(sizeof(char*)); + argv[0] = (char*) malloc(sizeof(char) * 19); + strncpy(argv[0], "SimpleStyle", 19); + + KAboutData aboutData("SimpleStyle", I18N_NOOP("SimpleStyle"), "v0.1", + "TDE Qt4 theme engine", KAboutData::License_GPL, + "(c) 2012, Timothy Pearson", + "message goes here", 0 /* TODO: Website */, "kb9vqf@pearsoncomputing.net"); + KCmdLineArgs::init(argc, argv, &aboutData); + + // Qt4 can be SO STUPID sometimes...why can't I get the X11 display directly from qApp?!?!?? + QWidget myhackedwidget; + new KApplication(myhackedwidget.x11Info().display()); + } + + // Set the Qt4 icon set to the TDE icon set + QIcon::setThemeName(convertTQt3ToQt4String(KIconTheme::current())); +#else // INTEGRATE_WITH_TDE + if (!tqApp) { + // Qt4 can be SO STUPID sometimes...why can't I get the X11 display directly from qApp?!?!?? + QWidget myhackedwidget; + new TQApplication(myhackedwidget.x11Info().display()); + } +#endif // INTEGRATE_WITH_TDE + + // Set the Qt4 palette to the TQt3 palette + qApp->setPalette(convertTQt3ToQt4Palette(tqApp->palette())); + + // Create interface widgets + m_tqt3parent_widget = new TQWidget(); + + m_tqt3progressbar_widget = new TQProgressBar(m_tqt3parent_widget); + m_tqt3tabbar_widget = new TQTabBar(m_tqt3parent_widget); + m_tqt3radiobutton_widget = new TQRadioButton(m_tqt3parent_widget); + m_tqt3popupmenu_widget = new TQPopupMenu(m_tqt3parent_widget); + m_tqt3combobox_widget = new TQComboBox(m_tqt3parent_widget); +} + +SimpleStyle::~SimpleStyle() +{ +// delete tqApp; + + // Delete interface widgets + // Widgets are deleted when their parent is deleted...these lines will cause a crash on exit +// delete m_tqt3progressbar_widget; +// delete m_tqt3tabbar_widget; +// delete m_tqt3radiobutton_widget; +// delete m_tqt3popupmenu_widget; +// delete m_tqt3combobox_widget; + + // FIXME + // Verify I'm not leaking memory like a sieve when this is commented out!!! +// delete m_tqt3parent_widget; +} + +void SimpleStyle::polish(QPalette &palette) +{ + // FIXME + // Figure out some way to polish the Qt4 widgets with the Qt3 polish method + // This probably involves modifying Qt3 to specify a painter... +} + +void SimpleStyle::polish(QWidget *widget) +{ + // HACK + // Many TQt3 styles need to be notified when their widgets are moused over + // The only way we can really do that here is to force a repaint on mouse entry/mouse exit + // I figure if Qt4 programmers and users can put up with Qt4's overall poor raster graphics + // performance, they can also put up with this hack... + widget->setMouseTracking(true); + widget->installEventFilter(this); +} + +void SimpleStyle::unpolish(QWidget *widget) +{ + // HACK + // See SimpleStyle::polish + widget->setMouseTracking(false); + widget->removeEventFilter(this); +} + +bool SimpleStyle::eventFilter(QObject *obj, QEvent *ev) +{ + // HACK + // See SimpleStyle::polish + if (!obj->isWidgetType() ) { + return false; + } + + QWidget* widget = static_cast<QWidget*>(obj); + + if ((ev->type() == QEvent::FocusIn) || (ev->type() == QEvent::FocusOut) + || (ev->type() == QEvent::Enter) || (ev->type() == QEvent::Leave) || (ev->type() == QEvent::Wheel)) { + widget->repaint(); + } + else { +// if (dynamic_cast<QTabBar*>(obj)) { + if (ev->type() == QEvent::MouseMove) { + QTabBar *tabbar = dynamic_cast<QTabBar*>(obj); + QMouseEvent *me = dynamic_cast<QMouseEvent*>(ev); + if (tabbar && me) { + // FIXME + // Avoid unnecessary repaints (which otherwise would occour on every + // MouseMove event causing high cpu load). + // FIXME + // Tab highlighting won't work unless we keep the same tabbar object, + // and specifically tab objects, while the mouse is being moved within + // the tabbar...also the eventFilter method of the style needs to be called... + + bool repaint = true; + +// QTab *tab = tabbar->selectTab(me->pos() ); +// if (hoverTab == tab) +// repaint = false; +// hoverTab = tab; + + if (repaint) + tabbar->repaint(); + } + } +// } + } + + // Transparently pass the event on to any other handlers + return false; +} + +int SimpleStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QWidget *w ) const +{ + int retval = 0; + TQWidget* interfaceWidget = 0; + + char retswitch = 0; + TQStyle::PixelMetric tqt3pixelmetric = TQStyle::PM_CustomBase; + switch (metric) { + case QStyle::PM_ButtonMargin: + tqt3pixelmetric = TQStyle::PM_ButtonMargin; + retswitch = 1; + break; +// case QStyle::PM_DockWidgetTitleBarButtonMargin: +// tqt3pixelmetric = TQStyle::; +// retswitch = 1; +// break; + case QStyle::PM_ButtonDefaultIndicator: + tqt3pixelmetric = TQStyle::PM_ButtonDefaultIndicator; + retswitch = 1; + break; + case QStyle::PM_MenuButtonIndicator: + tqt3pixelmetric = TQStyle::PM_MenuButtonIndicator; + retswitch = 1; + break; + case QStyle::PM_ButtonShiftHorizontal: + tqt3pixelmetric = TQStyle::PM_ButtonShiftHorizontal; + retswitch = 1; + break; + case QStyle::PM_ButtonShiftVertical: + tqt3pixelmetric = TQStyle::PM_ButtonShiftVertical; + retswitch = 1; + break; + case QStyle::PM_DefaultFrameWidth: + tqt3pixelmetric = TQStyle::PM_DefaultFrameWidth; + retswitch = 1; + break; + case QStyle::PM_SpinBoxFrameWidth: + tqt3pixelmetric = TQStyle::PM_SpinBoxFrameWidth; + retswitch = 1; + break; +// case QStyle::PM_ComboBoxFrameWidth: +// tqt3pixelmetric = TQStyle::PM_ComboBoxFrameWidth; +// retswitch = 1; +// break; + case QStyle::PM_MDIFrameWidth: + tqt3pixelmetric = TQStyle::PM_MDIFrameWidth; + retswitch = 1; + break; +// case QStyle::PM_MdiSubWindowFrameWidth: +// tqt3pixelmetric = TQStyle::PM_MdiSubWindowFrameWidth; +// retswitch = 1; +// break; + case QStyle::PM_MDIMinimizedWidth: + tqt3pixelmetric = TQStyle::PM_MDIMinimizedWidth; + retswitch = 1; + break; +// case QStyle::PM_MdiSubWindowMinimizedWidth: +// tqt3pixelmetric = TQStyle::PM_MdiSubWindowMinimizedWidth; +// retswitch = 1; +// break; + case QStyle::PM_LayoutLeftMargin: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_LayoutTopMargin: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_LayoutRightMargin: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_LayoutBottomMargin: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_LayoutHorizontalSpacing: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_LayoutVerticalSpacing: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_MaximumDragDistance: + tqt3pixelmetric = TQStyle::PM_MaximumDragDistance; + retswitch = 1; + break; + case QStyle::PM_ScrollBarExtent: + tqt3pixelmetric = TQStyle::PM_ScrollBarExtent; + retswitch = 1; + break; + case QStyle::PM_ScrollBarSliderMin: + tqt3pixelmetric = TQStyle::PM_ScrollBarSliderMin; + retswitch = 1; + break; + case QStyle::PM_SliderThickness: + tqt3pixelmetric = TQStyle::PM_SliderThickness; + retswitch = 1; + break; + case QStyle::PM_SliderControlThickness: + tqt3pixelmetric = TQStyle::PM_SliderControlThickness; + retswitch = 1; + break; + case QStyle::PM_SliderLength: + tqt3pixelmetric = TQStyle::PM_SliderLength; + retswitch = 1; + break; + case QStyle::PM_SliderTickmarkOffset: + tqt3pixelmetric = TQStyle::PM_SliderTickmarkOffset; + retswitch = 1; + break; + case QStyle::PM_SliderSpaceAvailable: + tqt3pixelmetric = TQStyle::PM_SliderSpaceAvailable; + retswitch = 1; + break; + case QStyle::PM_DockWidgetSeparatorExtent: + tqt3pixelmetric = TQStyle::PM_DockWindowSeparatorExtent; + retswitch = 1; + break; + case QStyle::PM_DockWidgetHandleExtent: + tqt3pixelmetric = TQStyle::PM_DockWindowHandleExtent; + retswitch = 1; + break; + case QStyle::PM_DockWidgetFrameWidth: + tqt3pixelmetric = TQStyle::PM_DockWindowFrameWidth; + retswitch = 1; + break; +// case QStyle::PM_DockWidgetTitleMargin: +// tqt3pixelmetric = TQStyle::PM_DockWindowTitleMargin; +// retswitch = 1; +// break; + case QStyle::PM_MenuBarPanelWidth: + tqt3pixelmetric = TQStyle::PM_MenuBarFrameWidth; + retswitch = 1; + break; + case QStyle::PM_MenuBarItemSpacing: + tqt3pixelmetric = TQStyle::PM_MenuBarItemSpacing; + retswitch = 1; + break; +// case QStyle::PM_MenuBarHMargin: +// tqt3pixelmetric = TQStyle::PM_MenuBarHMargin; +// retswitch = 1; +// break; +// case QStyle::PM_MenuBarVMargin: +// tqt3pixelmetric = TQStyle::PM_MenuBarVMargin; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarFrameWidth: +// tqt3pixelmetric = TQStyle::PM_ToolBarFrameWidth; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarHandleExtent: +// tqt3pixelmetric = TQStyle::PM_ToolBarHandleExtent; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarItemMargin: +// tqt3pixelmetric = TQStyle::PM_ToolBarItemMargin; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarItemSpacing: +// tqt3pixelmetric = TQStyle::PM_ToolBarItemSpacing; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarSeparatorExtent: +// tqt3pixelmetric = TQStyle::PM_ToolBarSeparatorExtent; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarExtensionExtent: +// tqt3pixelmetric = TQStyle::PM_ToolBarExtensionExtent; +// retswitch = 1; +// break; + case QStyle::PM_TabBarTabOverlap: + tqt3pixelmetric = TQStyle::PM_TabBarTabOverlap; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarTabHSpace: + tqt3pixelmetric = TQStyle::PM_TabBarTabHSpace; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarTabVSpace: + tqt3pixelmetric = TQStyle::PM_TabBarTabVSpace; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarBaseHeight: + tqt3pixelmetric = TQStyle::PM_TabBarBaseHeight; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarBaseOverlap: + tqt3pixelmetric = TQStyle::PM_TabBarBaseOverlap; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarScrollButtonWidth: + tqt3pixelmetric = TQStyle::PM_TabBarScrollButtonWidth; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarTabShiftHorizontal: + tqt3pixelmetric = TQStyle::PM_TabBarTabShiftHorizontal; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_TabBarTabShiftVertical: + tqt3pixelmetric = TQStyle::PM_TabBarTabShiftVertical; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + retswitch = 1; + break; + case QStyle::PM_ProgressBarChunkWidth: + tqt3pixelmetric = TQStyle::PM_ProgressBarChunkWidth; + retswitch = 1; + break; + case QStyle::PM_SplitterWidth: + tqt3pixelmetric = TQStyle::PM_SplitterWidth; + retswitch = 1; + break; + case QStyle::PM_TitleBarHeight: + tqt3pixelmetric = TQStyle::PM_TitleBarHeight; + retswitch = 1; + break; + case QStyle::PM_IndicatorWidth: + tqt3pixelmetric = TQStyle::PM_IndicatorWidth; + retswitch = 1; + break; + case QStyle::PM_IndicatorHeight: + tqt3pixelmetric = TQStyle::PM_IndicatorHeight; + retswitch = 1; + break; + case QStyle::PM_ExclusiveIndicatorWidth: + tqt3pixelmetric = TQStyle::PM_ExclusiveIndicatorWidth; + retswitch = 1; + break; + case QStyle::PM_ExclusiveIndicatorHeight: + tqt3pixelmetric = TQStyle::PM_ExclusiveIndicatorHeight; + retswitch = 1; + break; +// case QStyle::PM_MenuPanelWidth: +// retval = 0; +// retswitch = 2; +// break; + case QStyle::PM_MenuHMargin: + retval = 0; + retswitch = 2; + break; + case QStyle::PM_MenuVMargin: + retval = 0; + retswitch = 2; + break; +// case QStyle::PM_MenuScrollerHeight: +// tqt3pixelmetric = TQStyle::PM_MenuScrollerHeight; +// retswitch = 1; +// break; +// case QStyle::PM_MenuTearoffHeight: +// tqt3pixelmetric = TQStyle::PM_MenuTearoffHeight; +// retswitch = 1; +// break; +// case QStyle::PM_MenuDesktopFrameWidth: +// tqt3pixelmetric = TQStyle::PM_MenuDesktopFrameWidth; +// retswitch = 1; +// break; + case QStyle::PM_CheckListButtonSize: + tqt3pixelmetric = TQStyle::PM_CheckListButtonSize; + retswitch = 1; + break; + case QStyle::PM_CheckListControllerSize: + tqt3pixelmetric = TQStyle::PM_CheckListControllerSize; + retswitch = 1; + break; + case QStyle::PM_HeaderMarkSize: + tqt3pixelmetric = TQStyle::PM_HeaderMarkSize; + retswitch = 1; + break; + case QStyle::PM_HeaderGripMargin: + tqt3pixelmetric = TQStyle::PM_HeaderGripMargin; + retswitch = 1; + break; + case QStyle::PM_HeaderMargin: + tqt3pixelmetric = TQStyle::PM_HeaderMargin; + retswitch = 1; + break; +// case QStyle::PM_SpinBoxSliderHeight: +// tqt3pixelmetric = TQStyle::PM_SpinBoxSliderHeight; +// retswitch = 1; +// break; +// case QStyle::PM_ToolBarIconSize: +// tqt3pixelmetric = TQStyle::PM_ToolBarIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_SmallIconSize: +// tqt3pixelmetric = TQStyle::PM_SmallIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_LargeIconSize: +// tqt3pixelmetric = TQStyle::PM_LargeIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_FocusFrameHMargin: +// tqt3pixelmetric = TQStyle::PM_FocusFrameHMargin; +// retswitch = 1; +// break; +// case QStyle::PM_FocusFrameVMargin: +// tqt3pixelmetric = TQStyle::PM_FocusFrameVMargin; +// retswitch = 1; +// break; +// case QStyle::PM_IconViewIconSize: +// tqt3pixelmetric = TQStyle::PM_IconViewIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_ListViewIconSize: +// tqt3pixelmetric = TQStyle::PM_ListViewIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_ToolTipLabelFrameWidth: +// tqt3pixelmetric = TQStyle::PM_ToolTipLabelFrameWidth; +// retswitch = 1; +// break; +// case QStyle::PM_CheckBoxLabelSpacing: +// tqt3pixelmetric = TQStyle::PM_CheckBoxLabelSpacing; +// retswitch = 1; +// break; +// case QStyle::PM_RadioButtonLabelSpacing: +// tqt3pixelmetric = TQStyle::PM_RadioButtonLabelSpacing; +// retswitch = 1; +// break; +// case QStyle::PM_TabBarIconSize: +// tqt3pixelmetric = TQStyle::PM_TabBarIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_SizeGripSize: +// tqt3pixelmetric = TQStyle::PM_SizeGripSize; +// retswitch = 1; +// break; +// case QStyle::PM_MessageBoxIconSize: +// tqt3pixelmetric = TQStyle::PM_MessageBoxIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_ButtonIconSize: +// tqt3pixelmetric = TQStyle::PM_ButtonIconSize; +// retswitch = 1; +// break; +// case QStyle::PM_TextCursorWidth: +// tqt3pixelmetric = TQStyle::PM_TextCursorWidth; +// retswitch = 1; +// break; +// case QStyle::PM_TabBar_ScrollButtonOverlap: +// tqt3pixelmetric = TQStyle::PM_TabBar_ScrollButtonOverlap; +// retswitch = 1; +// break; +// case QStyle::PM_TabCloseIndicatorWidth: +// tqt3pixelmetric = TQStyle::PM_TabCloseIndicatorWidth; +// retswitch = 1; +// break; +// case QStyle::PM_TabCloseIndicatorHeight: +// tqt3pixelmetric = TQStyle::PM_TabCloseIndicatorHeight; +// retswitch = 1; +// break; + default: +#ifdef DEBUG_WARNINGS + printf("No metrics for Qt4 element %d\n\r", metric); fflush(stdout); +#endif + retval = 0; + } + + if (retswitch == 1) { + retval = tqApp->style().pixelMetric(tqt3pixelmetric, interfaceWidget); + } + else { +// if (retswitch == 2) { +// // retval was already set +// } +// else { + // Tell Qt4 to get the information + retval = QCommonStyle::pixelMetric(metric, opt, w); +// } + } + + return retval; +} + +TQWidget* SimpleStyle::initializeInterfaceWidget(TQt3WidgetType wt, const QWidget* w) const +{ + int i; + TQWidget* interfaceWidget = 0; + + // Qt4 interface widget pointers + const QTabBar* qt4tabbar_widget = 0; + const QRadioButton* qt4radiobutton_widget = 0; + const QMenu* qt4menu_widget = 0; + const QProgressBar* qt4progressbar_widget = 0; + const QComboBox* qt4combobox_widget = 0; + + TQTabBar::Shape tqt3tbshape = TQTabBar::RoundedAbove; + + switch (wt) { + case TQT3WT_TQProgressBar: + interfaceWidget = m_tqt3progressbar_widget; + // Copy over all widget attributes + qt4progressbar_widget = static_cast<const QProgressBar*>(w); + m_tqt3progressbar_widget->setGeometry(0, 0, qt4progressbar_widget->width(), qt4progressbar_widget->height()); + m_tqt3progressbar_widget->setProgress(qt4progressbar_widget->value()-qt4progressbar_widget->minimum(),qt4progressbar_widget->maximum()-qt4progressbar_widget->minimum()); + if (qt4progressbar_widget->orientation() != Qt::Horizontal) { + // Qt3 cannot draw vertical progress bars +#ifdef DEBUG_WARNINGS + printf("No rules to draw vertical Qt4 progress bar\n\r"); fflush(stdout); + interfaceWidget = 0; +#endif + } + break; + case TQT3WT_TQTabBar: + interfaceWidget = m_tqt3tabbar_widget; + // Copy over all widget attributes + qt4tabbar_widget = static_cast<const QTabBar*>(w); + m_tqt3tabbar_widget->setGeometry(0, 0, qt4tabbar_widget->width(), qt4tabbar_widget->height()); + // Clear out tabbar + for (i=0;i<m_tqt3tabbar_widget->count();i++) { + m_tqt3tabbar_widget->removeTab(m_tqt3tabbar_widget->tabAt(i)); + } + // Copy over all tabs + for (i=0;i<qt4tabbar_widget->count();i++) { + if (qt4tabbar_widget->tabIcon(i).isNull()) { + TQTab* newTab = new TQTab(convertQt4ToTQt3String(qt4tabbar_widget->tabText(i))); + m_tqt3tabbar_widget->insertTab(newTab, i); + newTab->setIdentifier(i); + } + else { + TQTab* newTab = new TQTab(convertQt4ToTQt3IconSet(qt4tabbar_widget->tabIcon(i)), convertQt4ToTQt3String(qt4tabbar_widget->tabText(i))); + m_tqt3tabbar_widget->insertTab(newTab, i); + newTab->setIdentifier(i); + } + } + m_tqt3tabbar_widget->setCurrentTab(qt4tabbar_widget->currentIndex()); + switch (qt4tabbar_widget->shape()) { + case QTabBar::RoundedNorth: + tqt3tbshape = TQTabBar::RoundedAbove; + break; + case QTabBar::RoundedSouth: + tqt3tbshape = TQTabBar::RoundedBelow; + break; + case QTabBar::TriangularNorth: + tqt3tbshape = TQTabBar::TriangularAbove; + break; + case QTabBar::TriangularSouth: + tqt3tbshape = TQTabBar::TriangularBelow; + break; + default: + // Qt3 cannot draw other tab shapes +#ifdef DEBUG_WARNINGS + printf("No rules to draw Qt4 tab shape %d\n\r", qt4tabbar_widget->shape()); fflush(stdout); + interfaceWidget = 0; +#endif + } + m_tqt3tabbar_widget->setShape(tqt3tbshape); + break; + case TQT3WT_TQRadioButton: + interfaceWidget = m_tqt3radiobutton_widget; + // Copy over all widget attributes + qt4radiobutton_widget = static_cast<const QRadioButton*>(w); + m_tqt3radiobutton_widget->setGeometry(0, 0, qt4radiobutton_widget->width(), qt4radiobutton_widget->height()); + m_tqt3radiobutton_widget->setText(convertQt4ToTQt3String(qt4radiobutton_widget->text())); + m_tqt3radiobutton_widget->setDown(qt4radiobutton_widget->isDown()); + break; + case TQT3WT_TQComboBox: + interfaceWidget = m_tqt3combobox_widget; + // Copy over all widget attributes + qt4combobox_widget = static_cast<const QComboBox*>(w); + m_tqt3combobox_widget->setGeometry(0, 0, qt4combobox_widget->width(), qt4combobox_widget->height()); + // Clear out all combobox items + m_tqt3combobox_widget->clear(); + + for (i=0;i<qt4combobox_widget->count();i++) { + if (qt4combobox_widget->itemIcon(i).isNull()) { + m_tqt3combobox_widget->insertItem(convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); + } + else { + m_tqt3combobox_widget->insertItem(convertQt4ToTQt3Pixmap(qt4combobox_widget->itemIcon(i)), convertQt4ToTQt3String(qt4combobox_widget->itemText(i)), i); + } + } + m_tqt3combobox_widget->setEditable(qt4combobox_widget->isEditable()); + break; + case TQT3WT_TQPopupMenu: + interfaceWidget = m_tqt3popupmenu_widget; + // Copy over all widget attributes + qt4menu_widget = static_cast<const QMenu*>(w); + m_tqt3popupmenu_widget->setGeometry(0, 0, qt4menu_widget->width(), qt4menu_widget->height()); + // Clear out menu + m_tqt3popupmenu_widget->clear(); + m_tqt3popupmenu_widget->setCheckable(false); + // Copy over all menu items + QList<QAction*> qt4menuactions = qt4menu_widget->actions(); + QAction* currentAction = 0; + for (i=0; i<qt4menuactions.size();++i) { + currentAction = qt4menuactions.at(i); + if (currentAction) { + if (currentAction->isSeparator()) { + m_tqt3popupmenu_widget->insertSeparator(i); + } + else { + if (currentAction->icon().isNull()) { + m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3String(currentAction->text()), i, i); + } + else { + m_tqt3popupmenu_widget->insertItem(convertQt4ToTQt3IconSet(currentAction->icon()), convertQt4ToTQt3String(currentAction->text()), i, i); + } + // FIXME + // Handle pixmaps, etc. + } + m_tqt3popupmenu_widget->setItemEnabled(i, currentAction->isEnabled()); + m_tqt3popupmenu_widget->setItemChecked(i, currentAction->isChecked()); + m_tqt3popupmenu_widget->setItemVisible(i, currentAction->isVisible()); + if (currentAction->isCheckable()) { + m_tqt3popupmenu_widget->setCheckable(true); + } + } + } + break; + } + + return interfaceWidget; +} + +QRect SimpleStyle::subElementRect(SubElement element, const QStyleOption *opt, const QWidget *w) const +{ + TQStyle::SFlags sflags = 0; + + bool can_override = true; + TQStyle::SubRect tqtSR; + + TQWidget* interfaceWidget = 0; + QRect retRect; + + switch (element) { + case SE_ComboBoxFocusRect: + tqtSR = TQStyle::SR_ComboBoxFocusRect; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQComboBox, w); + if (interfaceWidget == 0) { + can_override = false; + } + break; + default: +#ifdef DEBUG_WARNINGS + printf("No rules to obtain Qt4 subelement rect %d\n\r", element); fflush(stdout); +#endif + can_override = false; + } + + if (can_override) { + // Instruct TQt3 to obtain the subelement rect information + retRect = convertTQt3ToQt4Rect(tqApp->style().subRect(tqtSR, interfaceWidget)); + +#ifdef DEBUG_WARNINGS +#ifdef DEBUG_SPEW + printf("Used Qt3 subelement rect %d to handle Qt4 subelement rect %d\n\r", tqtSR, control); fflush(stdout); +#endif +#endif + } + else { + // Tell Qt4 to obtain the subelement rect information + retRect = QCommonStyle::subElementRect(element, opt, w); + } + + return retRect; +} + +void SimpleStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *opt, QPainter *p, const QWidget *w) const +{ + TQStyle::SFlags sflags = 0; + + bool can_override = true; + TQStyle::ComplexControl tqtCC; + TQStyle::SCFlags subControl = TQStyle::SC_All; + TQStyle::SCFlags subControlActive = TQStyle::SC_None; + + TQWidget* interfaceWidget = 0; + TQStyleOption tqt3opt(TQStyleOption::Default); + + // Determine the correct color group + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_NONE); + TQPalette tqt3palette = convertQt4ToTQt3Palette(opt->palette); + TQColorGroup tqt3colorgroup; + if (sflags & TQStyle::Style_Enabled) { + if (sflags & TQStyle::Style_Active) { + tqt3colorgroup = tqt3palette.active(); + } + else { + tqt3colorgroup = tqt3palette.inactive(); + } + } + else { + tqt3colorgroup = tqt3palette.disabled(); + } + + switch (control) { + case CC_ComboBox: + tqtCC = TQStyle::CC_ComboBox; + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQComboBox, w); + if (interfaceWidget == 0) { + can_override = false; + } + break; + default: +#ifdef DEBUG_WARNINGS + printf("No rules to draw Qt4 complex control %d\n\r", control); fflush(stdout); +#endif + can_override = false; + } + + if (can_override) { + // Construct a Qt3 paint device on the Qt4 painter + TDEQt4PaintDevice qt4pd(p); + + TQPainter tqtPainter(&qt4pd); + + // Instruct TQt3 to draw the complex control + tqApp->style().drawComplexControl(tqtCC, &tqtPainter, interfaceWidget, TQRect(opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height()), tqt3colorgroup, sflags, subControl, subControlActive, tqt3opt); + + tqtPainter.end(); + +#ifdef DEBUG_WARNINGS +#ifdef DEBUG_SPEW + printf("Used Qt3 complex control %d to draw Qt4 complex control %d\n\r", tqtCE, control); fflush(stdout); +#endif +#endif + } + else { + // Tell Qt4 to draw it + QCommonStyle::drawComplexControl(control, opt, p, w); + } +} + +void SimpleStyle::drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const +{ + int i; + TQStyle::SFlags sflags = 0; + + bool can_override = true; + TQStyle::ControlElement tqtCE; + + bool draw_second_element = false; + TQStyle::ControlElement tqtCE_element2; + + bool draw_third_element = false; + TQStyle::ControlElement tqtCE_element3; + + TQWidget* interfaceWidget = 0; + TQStyleOption tqt3opt(TQStyleOption::Default); + TQStyleOption tqt3opt_element2(TQStyleOption::Default); + TQStyleOption tqt3opt_element3(TQStyleOption::Default); + + TQTab* drawingTab = 0; + int estimated_tab_index; + + TQMenuItem* drawingItem = 0; + QAction* drawingAction = 0; + QList<QAction*> qt4menuactions; + int tqt3tabwidth = 0; + int tqt3iconwidth = 0; + + TQRect tqt3elementrect(opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height()); + TQRect tqt3element2rect = tqt3elementrect; + TQRect tqt3element3rect = tqt3elementrect; + + // Determine the correct color group + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_NONE); + TQPalette tqt3palette = convertQt4ToTQt3Palette(opt->palette); + TQColorGroup tqt3colorgroup; + if (sflags & TQStyle::Style_Enabled) { + if (sflags & TQStyle::Style_Active) { + tqt3colorgroup = tqt3palette.active(); + } + else { + tqt3colorgroup = tqt3palette.inactive(); + } + } + else { + tqt3colorgroup = tqt3palette.disabled(); + } + + switch (element) { + case QStyle::CE_ProgressBar: + // Unlike Qt3, QStyle::CE_ProgressBar draws the bar, the groove, and the label + tqtCE = TQStyle::CE_ProgressBarContents; + draw_second_element = true; + tqtCE_element2 = TQStyle::CE_ProgressBarGroove; + draw_third_element = true; + tqtCE_element3 = TQStyle::CE_ProgressBarLabel; + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQProgressBar); + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w); + if (interfaceWidget == 0) { + can_override = false; + } + break; + case QStyle::CE_ProgressBarContents: + tqtCE = TQStyle::CE_ProgressBarContents; + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQProgressBar); + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQProgressBar, w); + if (interfaceWidget == 0) { + can_override = false; + } + break; + case QStyle::CE_TabBarTab: + // Unlike Qt3, QStyle::CE_TabBarTab draws both the tab and the label + tqtCE = TQStyle::CE_TabBarTab; + draw_second_element = true; + tqtCE_element2 = TQStyle::CE_TabBarLabel; + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQTabBar); + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQTabBar, w); + if (interfaceWidget == 0) { + can_override = false; + } + else { + // Convert the QStyleOption to the proper TQStyleOption + // In other words, figure out which TQt3 tab is currently being drawn + // Qt4 makes this really, really hard... + // I have to guess based on the Qt4 position of the tab in the tab bar, which may or may not work 100% in all cases + drawingTab = 0; + estimated_tab_index = static_cast<const QTabBar*>(w)->tabAt(QPoint(opt->rect.x(), opt->rect.y())); + drawingTab = m_tqt3tabbar_widget->tabAt(estimated_tab_index); + + if (drawingTab) { + tqt3opt = TQStyleOption(drawingTab); + tqt3opt_element2 = TQStyleOption(drawingTab); + } + + // HACK + // Qt4 is BUSTED YET AGAIN + // Grrrrr.... + // The PM_TabBarTabOverlap enum is present, BUT IS NOT IMPLEMENTED, in Qt4 (!??!?) + // Many TDE styles use overlapping tabs, and expect to draw outside their horizontal boundaries by PM_TabBarTabOverlap pixels + // At the very least we need to expand the drawing rect by that amount, even if the drawing gets clipped, otherwise + // those styles will show badly broken tabs with missing chunks and added lines. + tqt3tabwidth = tqApp->style().pixelMetric(TQStyle::PM_TabBarTabOverlap, interfaceWidget); + if (tqt3tabwidth > 0) { + tqt3elementrect = TQRect(tqt3elementrect.x()-tqt3tabwidth, tqt3elementrect.y(), tqt3elementrect.width()+(tqt3tabwidth*1), tqt3elementrect.height()); + } + } + break; +#if 0 + case CE_RadioButton: + // Unlike Qt3, QStyle::CE_RadioButton draws the button, the label, and the focus rectangle + tqtCE = TQStyle::CE_RadioButton; + draw_second_element = true; + tqtCE_element2 = TQStyle::CE_RadioButtonLabel; + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQRadioButton); + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQRadioButton, w); + if (interfaceWidget == 0) { + can_override = false; + } + break; +#endif + case CE_MenuItem: + tqtCE = TQStyle::CE_PopupMenuItem; + sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_TQPopupMenu); + interfaceWidget = initializeInterfaceWidget(TQT3WT_TQPopupMenu, w); + if (interfaceWidget == 0) { + can_override = false; + } + else { + // Convert the QStyleOption to the proper TQStyleOption + // In other words, figure out which TQt3 menu item is currently being drawn + // Qt4 makes this really, really hard... + // I have to guess based on the Qt4 position of the item in the menu, which may or may not work 100% in all cases + drawingItem = 0; + drawingAction = static_cast<const QMenu*>(w)->actionAt(QPoint(opt->rect.x(), opt->rect.y())); + qt4menuactions = static_cast<const QMenu*>(w)->actions(); + for (i=0; i<qt4menuactions.size();++i) { + if (qt4menuactions.at(i) == drawingAction) { + drawingItem = m_tqt3popupmenu_widget->findItem(m_tqt3popupmenu_widget->idAt(i)); + } + } + + if (drawingItem) { + tqt3tabwidth = static_cast<const QStyleOptionMenuItem*>(opt)->tabWidth; + tqt3iconwidth = static_cast<const QStyleOptionMenuItem*>(opt)->maxIconWidth; + tqt3opt = TQStyleOption(drawingItem, tqt3iconwidth, tqt3tabwidth); + } + } + break; + case QStyle::CE_TabBarTabShape: + // Ignore request as Qt3 has no equivalent + can_override = false; + break; + default: +#ifdef DEBUG_WARNINGS + printf("No rules to draw Qt4 control %d\n\r", element); fflush(stdout); +#endif + can_override = false; + } + + if (can_override) { + // Construct a Qt3 paint device on the Qt4 painter + TDEQt4PaintDevice qt4pd(p); + + TQPainter tqtPainter(&qt4pd); + + // Instruct TQt3 to draw the control + // FIXME + // Implement sflags and QStyleOption + tqApp->style().drawControl(tqtCE, &tqtPainter, interfaceWidget, tqt3elementrect, tqt3colorgroup, sflags, tqt3opt); + if (draw_second_element == true) { + tqApp->style().drawControl(tqtCE_element2, &tqtPainter, interfaceWidget, tqt3element2rect, tqt3colorgroup, sflags, tqt3opt_element2); + } + if (draw_third_element == true) { + tqApp->style().drawControl(tqtCE_element3, &tqtPainter, interfaceWidget, tqt3element3rect, tqt3colorgroup, sflags, tqt3opt_element3); + } + + tqtPainter.end(); + +#ifdef DEBUG_WARNINGS +#ifdef DEBUG_SPEW + printf("Used Qt3 control %d to draw Qt4 control %d\n\r", tqtCE, element); fflush(stdout); +#endif +#endif + } + else { + // Tell Qt4 to draw it + QCommonStyle::drawControl(element, opt, p, w); + } +} + +#define NO_QT3_EQUIVALENT can_override = false; + +void SimpleStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const +{ + // Construct a Qt3 paint device translator on the Qt4 painter + TDEQt4PaintDevice qt4pd(p); + + // Open a painter on the paint device translator + TQPainter tqtPainter(&qt4pd); + + bool can_override = true; + TQStyle::PrimitiveElement tqtPE; + TQStyleOption tqt3opt(TQStyleOption::Default); + + // NOTE: Qt3 seems to combine PE_FrameMenu and PE_PanelMenu into PE_PanelPopup + + switch (pe) { + case QStyle::PE_Frame: + tqtPE = TQStyle::PE_Panel; + tqt3opt = TQStyleOption(static_cast<const QStyleOptionFrame*>(opt)->lineWidth, static_cast<const QStyleOptionFrame*>(opt)->midLineWidth); + break; + case QStyle::PE_FrameMenu: + tqtPE = TQStyle::PE_PanelPopup; + tqt3opt = TQStyleOption(static_cast<const QStyleOptionFrame*>(opt)->lineWidth, static_cast<const QStyleOptionFrame*>(opt)->midLineWidth); + break; + case QStyle::PE_PanelButtonBevel: + tqtPE = TQStyle::PE_ButtonBevel; + break; + case QStyle::PE_FrameGroupBox: + tqtPE = TQStyle::PE_GroupBoxFrame; + tqt3opt = TQStyleOption(static_cast<const QStyleOptionFrame*>(opt)->lineWidth, static_cast<const QStyleOptionFrame*>(opt)->midLineWidth); + break; + case QStyle::PE_FrameFocusRect: + tqtPE = TQStyle::PE_FocusRect; + break; + case QStyle::PE_FrameButtonTool: + tqtPE = TQStyle::PE_ButtonTool; + break; + case QStyle::PE_FrameTabBarBase: + NO_QT3_EQUIVALENT + break; + case QStyle::PE_FrameTabWidget: + tqtPE = TQStyle::PE_PanelTabWidget; + break; + case QStyle::PE_PanelButtonCommand: + tqtPE = TQStyle::PE_ButtonCommand; + break; + case QStyle::PE_IndicatorProgressChunk: + tqtPE = TQStyle::PE_ProgressBarChunk; + break; + case QStyle::PE_IndicatorArrowDown: + tqtPE = TQStyle::PE_ArrowDown; + break; + case QStyle::PE_IndicatorArrowLeft: + tqtPE = TQStyle::PE_ArrowLeft; + break; + case QStyle::PE_IndicatorArrowRight: + tqtPE = TQStyle::PE_ArrowRight; + break; + case QStyle::PE_IndicatorArrowUp: + tqtPE = TQStyle::PE_ArrowUp; + break; + case QStyle::PE_IndicatorCheckBox: + tqtPE = TQStyle::PE_Indicator; + break; + case QStyle::PE_IndicatorRadioButton: + tqtPE = TQStyle::PE_ExclusiveIndicator; + break; + case QStyle::PE_PanelMenu: + tqtPE = TQStyle::PE_PanelPopup; + break; + case QStyle::PE_PanelButtonTool: + tqtPE = TQStyle::PE_ButtonTool; + break; + case QStyle::PE_IndicatorTabTear: + NO_QT3_EQUIVALENT + break; + default: +#ifdef DEBUG_WARNINGS + printf("No rules to draw Qt4 element %d\n\r", pe); fflush(stdout); +#endif + can_override = false; + } + + // Convert the style flags + TQStyle::SFlags sflags = convertQt4ToTQt3SFlags(opt->state, TQT3WT_NONE); + + // Determine the correct color group + TQPalette tqt3palette = convertQt4ToTQt3Palette(opt->palette); + TQColorGroup tqt3colorgroup; + if (sflags & TQStyle::Style_Enabled) { + if (sflags & TQStyle::Style_Active) { + tqt3colorgroup = tqt3palette.active(); + } + else { + tqt3colorgroup = tqt3palette.inactive(); + } + } + else { + tqt3colorgroup = tqt3palette.disabled(); + } + + + if (can_override) { + // Construct a Qt3 paint device on the Qt4 painter + TDEQt4PaintDevice qt4pd(p); + + TQPainter tqtPainter(&qt4pd); + + // Instruct TQt3 to draw the primitive + tqApp->style().drawPrimitive(tqtPE, &tqtPainter, TQRect(opt->rect.x(), opt->rect.y(), opt->rect.width(), opt->rect.height()), tqt3colorgroup, sflags, tqt3opt); + tqtPainter.end(); + +#ifdef DEBUG_WARNINGS +#ifdef DEBUG_SPEW + printf("Used Qt3 element %d to draw Qt4 element %d\n\r", tqtPE, pe); fflush(stdout); +#endif +#endif + } + else { + // Tell Qt4 to draw it + QCommonStyle::drawPrimitive(pe, opt, p, w); + } +} diff --git a/plugin/simplestyle.h b/plugin/simplestyle.h new file mode 100644 index 0000000..0b067b2 --- /dev/null +++ b/plugin/simplestyle.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Timothy Pearson. All rights reserved. +** +** This file is part of the TDE Qt4 style interface +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef SIMPLESTYLE_H +#define SIMPLESTYLE_H + +#include <QtGui/QWindowsStyle> + +QT_BEGIN_NAMESPACE +class QPalette; +QT_END_NAMESPACE + +class TQWidget; +class TQTabBar; +class TQRadioButton; +class TQProgressBar; +class TQPopupMenu; +class TQComboBox; + +enum TQt3WidgetType { + TQT3WT_NONE, + TQT3WT_TQProgressBar, + TQT3WT_TQTabBar, + TQT3WT_TQRadioButton, + TQT3WT_TQPopupMenu, + TQT3WT_TQComboBox +}; + +class SimpleStyle : public QWindowsStyle +{ + Q_OBJECT + +public: + SimpleStyle(); + ~SimpleStyle(); + + void polish(QPalette &palette); + void polish(QWidget *widget); + void unpolish(QWidget *widget); + bool eventFilter(QObject *obj, QEvent *ev); + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w = 0) const; + void drawControl(ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const; + void drawComplexControl(ComplexControl control, const QStyleOptionComplex * option, QPainter * painter, const QWidget * widget = 0) const; + QRect subElementRect(SubElement element, const QStyleOption * option, const QWidget * widget = 0) const; + + int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const; + +private: + TQWidget* initializeInterfaceWidget(TQt3WidgetType wt, const QWidget * widget) const; + + TQWidget* m_tqt3parent_widget; + TQTabBar* m_tqt3tabbar_widget; + TQRadioButton* m_tqt3radiobutton_widget; + TQProgressBar* m_tqt3progressbar_widget; + TQPopupMenu* m_tqt3popupmenu_widget; + TQComboBox* m_tqt3combobox_widget; +}; + +#endif diff --git a/plugin/simplestyleplugin.cpp b/plugin/simplestyleplugin.cpp new file mode 100644 index 0000000..a474217 --- /dev/null +++ b/plugin/simplestyleplugin.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtGui/QtGui> + +#include "simplestyleplugin.h" +#include "simplestyle.h" + +//! [0] +QStringList SimpleStylePlugin::keys() const +{ + return QStringList() << "SimpleStyle"; +} +//! [0] + +//! [1] +QStyle *SimpleStylePlugin::create(const QString &key) +{ + if (key.toLower() == "simplestyle") + return new SimpleStyle; + return 0; +} +//! [1] + +QT_BEGIN_NAMESPACE +Q_EXPORT_PLUGIN2(simplestyleplugin, SimpleStylePlugin) +QT_END_NAMESPACE diff --git a/plugin/simplestyleplugin.h b/plugin/simplestyleplugin.h new file mode 100644 index 0000000..e7616dd --- /dev/null +++ b/plugin/simplestyleplugin.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the examples of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef SIMPLESTYLEPLUGIN_H +#define SIMPLESTYLEPLUGIN_H + +#include <QtGui/QStylePlugin> + +QT_BEGIN_NAMESPACE +class QStringList; +class QStyle; +QT_END_NAMESPACE + +//! [0] +class SimpleStylePlugin : public QStylePlugin +{ + Q_OBJECT + +public: + SimpleStylePlugin() {}; + + QStringList keys() const; + QStyle *create(const QString &key); +}; +//! [0] + +#endif diff --git a/plugin/tdeqt4painter.cpp b/plugin/tdeqt4painter.cpp new file mode 100644 index 0000000..6c8d4c0 --- /dev/null +++ b/plugin/tdeqt4painter.cpp @@ -0,0 +1,772 @@ +/**************************************************************************** +** +** Implementation of TDEQt4PaintDevice class +** +** Copyright (C) 2012 Timothy Pearson. All rights reserved. +** +** This file is part of the TDE Qt4 style interface +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#include "tdeqt4painter.h" + +#define TQT_NO_COMPAT_NAMES +#include "tqpainter.h" +#include "tqpixmap.h" +#include "tqbitmap.h" +#include "tqimage.h" +#include "tqfile.h" +#include "tqpaintdevicemetrics.h" +#undef Qt + +/*! + \class TDEQt4PaintDevice ntqpicture.h + \brief The TDEQt4PaintDevice class is a paint device that records and + replays TQPainter commands. + + \ingroup graphics + \ingroup images + \ingroup shared + + A picture serializes painter commands to an IO device in a + platform-independent format. For example, a picture created under + Windows can be read on a Sun SPARC. + + Pictures are called meta-files on some platforms. + + TQt pictures use a proprietary binary format. Unlike native picture + (meta-file) formats on many window systems, TQt pictures have no + limitations regarding their contents. Everything that can be + painted can also be stored in a picture, e.g. fonts, pixmaps, + regions, transformed graphics, etc. + + TDEQt4PaintDevice is an \link shclass.html implicitly shared\endlink class. + + Example of how to record a picture: + \code + TDEQt4PaintDevice pic; + TQPainter p; + p.begin( &pic ); // paint in picture + p.drawEllipse( 10,20, 80,70 ); // draw an ellipse + p.end(); // painting done + pic.save( "drawing.pic" ); // save picture + \endcode + + Example of how to replay a picture: + \code + TDEQt4PaintDevice pic; + pic.load( "drawing.pic" ); // load picture + TQPainter p; + p.begin( &myWidget ); // paint in myWidget + p.drawPicture( pic ); // draw the picture + p.end(); // painting done + \endcode + + Pictures can also be drawn using play(). Some basic data about a + picture is available, for example, size(), isNull() and + boundingRect(). + +*/ + + +/*! + Constructs an empty picture. + + The \a formatVersion parameter may be used to \e create a TDEQt4PaintDevice + that can be read by applications that are compiled with earlier + versions of TQt. + \list + \i \a formatVersion == 1 is binary compatible with TQt 1.x and later. + \i \a formatVersion == 2 is binary compatible with TQt 2.0.x and later. + \i \a formatVersion == 3 is binary compatible with TQt 2.1.x and later. + \i \a formatVersion == 4 is binary compatible with TQt 3.0.x and later. + \i \a formatVersion == 5 is binary compatible with TQt 3.1. + \endlist + + Note that the default formatVersion is -1 which signifies the + current release, i.e. for TQt 3.1 a formatVersion of 5 is the same + as the default formatVersion of -1. + + Reading pictures generated by earlier versions of TQt is supported + and needs no special coding; the format is automatically detected. +*/ + +TDEQt4PaintDevice::TDEQt4PaintDevice( QPainter *qt4painter ) + : TQPaintDevice( TQInternal::Picture | TQInternal::ExternalDevice ) +{ + m_qt4painter = qt4painter; +} + +/*! + Destroys the picture. +*/ +TDEQt4PaintDevice::~TDEQt4PaintDevice() +{ +} + +/*! + \internal + Implementation of the function forwarded above to the internal data struct. +*/ + +bool TDEQt4PaintDevice::cmd( int c, TQPainter *pt, TQPDevCmdParam *p ) +{ + Q_UNUSED(pt); + + unsigned int i; + int x; + int y; + QPen qt4pen; + QRect qt4rect; + QBrush qt4brush; + QPoint qt4point1; + QPoint qt4point2; + QPolygon qt4polygon; + QFont qt4font; + QPixmap qt4pixmap; + QString qt4string; + QMatrix qt4matrix; + QRegion qt4region; + Qt::BGMode qt4bkmode = Qt::TransparentMode; + QPainter::CompositionMode qt4compositionmode = QPainter::CompositionMode_SourceOver; + int qt4formattedtextflags = 0; + + if (p) { + if (c == PdcSetClipRegion) { + // FIXME + // Ellipses are not being handle correctly AT ALL + // Look at the Lipstik progress bar for an example of this... +#if 0 + // IMPRECISE + const TQMemArray<TQRect> rects = p[0].rgn->rects(); + for ( uint i = 0; i < rects.count(); i++ ) { + TQRect r = rects[(int)i]; + qt4region = qt4region.united(QRegion(QRect(r.x(), r.y(), r.width(), r.height()))); + } +#else + // SLOW + TQRect tqt3br = p[0].rgn->boundingRect(); + TQBitmap regionMask(tqt3br.x()+tqt3br.width(), tqt3br.y()+tqt3br.height()); + regionMask.fill(TQt::color0); + TQPainter tqt3brpainter(®ionMask); + tqt3brpainter.setClipRegion(*p[0].rgn); + tqt3brpainter.fillRect(0,0,regionMask.width(),regionMask.height(),TQt::color1); + tqt3brpainter.end(); + QBitmap qt4RegionMask = QPixmap::fromX11Pixmap(regionMask.handle(), QPixmap::ImplicitlyShared); + qt4region = QRegion(qt4RegionMask); +#endif + TQPainter::CoordinateMode tqt3coordmode = (TQPainter::CoordinateMode)p[1].ival; + if ( tqt3coordmode == TQPainter::CoordDevice ) { + qt4region = qt4region; + } + else { + qt4region = m_qt4painter->transform().map(qt4region); + } + } + if (c == PdcSetWMatrix) { + const TQWMatrix* tqt3matrix = p[0].matrix; + qt4matrix = QMatrix(tqt3matrix->m11(), tqt3matrix->m12(), tqt3matrix->m21(), tqt3matrix->m22(), tqt3matrix->dx(), tqt3matrix->dy()); + } + if (c == PdcSetROP) { + TQt::RasterOp rop = (TQt::RasterOp)p[0].ival; + switch (rop) { + case TQPainter::CopyROP: + qt4compositionmode=QPainter::CompositionMode_SourceOver; + break; + case TQPainter::OrROP: + qt4compositionmode=QPainter::RasterOp_SourceOrDestination; + break; + case TQPainter::XorROP: + qt4compositionmode=QPainter::RasterOp_SourceXorDestination; + break; + case TQPainter::NotAndROP: + qt4compositionmode=QPainter::RasterOp_NotSourceAndDestination; + break; +// case TQPainter::EraseROP: +// qt4compositionmode=QPainter::RasterOp_NotSourceAndDestination; +// break; + case TQPainter::NotCopyROP: + qt4compositionmode=QPainter::RasterOp_NotSource; + break; + case TQPainter::NotOrROP: + tqWarning("TDEQt4PaintDevice::cmd: Unhandled raster operation [Was attempting to use raster operation %d\n\r", rop); + break; + case TQPainter::NotXorROP: + qt4compositionmode=QPainter::RasterOp_NotSourceXorDestination; + break; + case TQPainter::AndROP: + qt4compositionmode=QPainter::RasterOp_SourceAndDestination; + break; +// case TQPainter::NotEraseROP: +// qt4compositionmode=QPainter::RasterOp_SourceAndDestination; +// break; + case TQPainter::NotROP: + qt4compositionmode=QPainter::RasterOp_SourceAndNotDestination; // [WARNING] This may not be a correct substitute for NotROP! + break; + case TQPainter::ClearROP: + qt4compositionmode=QPainter::CompositionMode_Clear; + break; + case TQPainter::SetROP: + tqWarning("TDEQt4PaintDevice::cmd: Unhandled raster operation [Was attempting to use raster operation %d\n\r", rop); + break; + case TQPainter::NopROP: + qt4compositionmode=QPainter::CompositionMode_Destination; + break; + case TQPainter::AndNotROP: + qt4compositionmode=QPainter::RasterOp_SourceAndNotDestination; + break; + case TQPainter::OrNotROP: + tqWarning("TDEQt4PaintDevice::cmd: Unhandled raster operation [Was attempting to use raster operation %d\n\r", rop); + break; + case TQPainter::NandROP: + qt4compositionmode=QPainter::RasterOp_NotSourceOrNotDestination; + break; + case TQPainter::NorROP: + qt4compositionmode=QPainter::RasterOp_NotSourceAndNotDestination; + break; + default: + qt4compositionmode=QPainter::CompositionMode_SourceOver; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Unhandled raster operation %d", rop ); +#endif + } + } + if (( c== PdcDrawTextFormatted) || (c == PdcDrawText2Formatted)) { + qt4rect = QRect(p[0].rect->x(), p[0].rect->y(), p[0].rect->width(), p[0].rect->height()); + qt4formattedtextflags = 0; +// if (p[1].ival & TQt::AlignAuto) { +// qt4formattedtextflags = qt4formattedtextflags | Qt::AlignAuto; +// } + if ((p[1].ival & TQt::AlignLeft) == TQt::AlignLeft) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignLeft; + } + if ((p[1].ival & TQt::AlignRight) == TQt::AlignRight) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignRight; + } + if ((p[1].ival & TQt::AlignHCenter) == TQt::AlignHCenter) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignHCenter; + } + if ((p[1].ival & TQt::AlignJustify) == TQt::AlignJustify) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignJustify; + } + if ((p[1].ival & TQt::AlignTop) == TQt::AlignTop) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignTop; + } + if ((p[1].ival & TQt::AlignBottom) == TQt::AlignBottom) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignBottom; + } + if ((p[1].ival & TQt::AlignVCenter) == TQt::AlignVCenter) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignVCenter; + } + if ((p[1].ival & TQt::AlignCenter) == TQt::AlignCenter) { + qt4formattedtextflags = qt4formattedtextflags | Qt::AlignCenter; + } + if ((p[1].ival & TQt::SingleLine) == TQt::SingleLine) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextSingleLine; + } + if ((p[1].ival & TQt::DontClip) == TQt::DontClip) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextDontClip; + } + if ((p[1].ival & TQt::ExpandTabs) == TQt::ExpandTabs) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextExpandTabs; + } + if ((p[1].ival & TQt::ShowPrefix) == TQt::ShowPrefix) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextShowMnemonic; + } + if ((p[1].ival & TQt::WordBreak) == TQt::WordBreak) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextWordWrap; + } + if ((p[1].ival & TQt::BreakAnywhere) == TQt::BreakAnywhere) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextWrapAnywhere; + } + if ((p[1].ival & TQt::NoAccel) == TQt::NoAccel) { + qt4formattedtextflags = qt4formattedtextflags | Qt::TextHideMnemonic; + } + qt4string = QString::fromUtf8(p[2].str->utf8().data()); + } + if ((c == PdcDrawPoint) || (c == PdcMoveTo) || (c == PdcLineTo) || (c == PdcSetBrushOrigin)) { + qt4point1 = QPoint(p[0].point->x(), p[0].point->y()); + } + if (c == PdcDrawLine) { + qt4point1 = QPoint(p[0].point->x(), p[0].point->y()); + qt4point2 = QPoint(p[1].point->x(), p[1].point->y()); + } + if ((c == PdcDrawPolyline) || (c == PdcDrawPolygon) || (c == PdcDrawLineSegments) || (c == PdcDrawCubicBezier)) { + TQPointArray qt3parray = *p[0].ptarr; + qt4polygon.resize(qt3parray.count()); + for (i=0;i<qt3parray.count();i++) { + qt3parray.point(i, &x, &y ); + qt4polygon.setPoint(i, x, y); + } + } + if ((c == PdcDrawRect) || (c == PdcDrawRoundRect) || (c == PdcDrawEllipse) || (c == PdcDrawArc) || (c == PdcDrawPie) || (c == PdcDrawChord)) { + qt4rect = QRect(p[0].rect->x(), p[0].rect->y(), p[0].rect->width(), p[0].rect->height()); + } + if (c == PdcSetBrush) { + TQt::BrushStyle tqt3brushstyle = p[0].brush->style(); + Qt::BrushStyle qt4brushstyle; + switch ( tqt3brushstyle ) { + case TQt::NoBrush: + qt4brushstyle = Qt::NoBrush; + break; + case TQt::SolidPattern: + qt4brushstyle = Qt::SolidPattern; + break; + case TQt::Dense1Pattern: + qt4brushstyle = Qt::Dense1Pattern; + break; + case TQt::Dense2Pattern: + qt4brushstyle = Qt::Dense2Pattern; + break; + case TQt::Dense3Pattern: + qt4brushstyle = Qt::Dense3Pattern; + break; + case TQt::Dense4Pattern: + qt4brushstyle = Qt::Dense4Pattern; + break; + case TQt::Dense5Pattern: + qt4brushstyle = Qt::Dense5Pattern; + break; + case TQt::Dense6Pattern: + qt4brushstyle = Qt::Dense6Pattern; + break; + case TQt::Dense7Pattern: + qt4brushstyle = Qt::Dense7Pattern; + break; + case TQt::HorPattern: + qt4brushstyle = Qt::HorPattern; + break; + case TQt::VerPattern: + qt4brushstyle = Qt::VerPattern; + break; + case TQt::CrossPattern: + qt4brushstyle = Qt::CrossPattern; + break; + case TQt::BDiagPattern: + qt4brushstyle = Qt::BDiagPattern; + break; + case TQt::FDiagPattern: + qt4brushstyle = Qt::FDiagPattern; + break; + case TQt::DiagCrossPattern: + qt4brushstyle = Qt::DiagCrossPattern; + break; + case TQt::CustomPattern: + qt4brushstyle = Qt::TexturePattern; + break; + default: + qt4brushstyle = Qt::NoBrush; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid brush style %d", tqt3brushstyle ); +#endif + } + qt4brush.setStyle(qt4brushstyle); + TQColor qt3color = p[0].brush->color(); + qt4brush.setColor(QColor(qt3color.red(), qt3color.green(), qt3color.blue(), 255)); + if (qt4brushstyle == Qt::TexturePattern) { + TQPixmap tqtPM = *p[0].brush->pixmap(); + QPixmap qtPM = QPixmap::fromX11Pixmap(tqtPM.handle(), QPixmap::ImplicitlyShared); + qt4brush.setTexture(qtPM); + } + } + if (c == PdcSetPen) { + bool customPenStyle = false; + TQt::PenStyle tqt3penstyle = p[0].pen->style(); + Qt::PenStyle qt4penstyle; + QVector<qreal> dashes; + qreal mark; + qreal space; + switch ( tqt3penstyle ) { + case TQt::NoPen: + qt4penstyle = Qt::NoPen; + break; + case TQt::SolidLine: + qt4penstyle = Qt::SolidLine; + break; + case TQt::DashLine: + qt4penstyle = Qt::DashLine; + break; + case TQt::DotLine: + qt4penstyle = Qt::DotLine; + break; + case TQt::DashDotLine: + qt4penstyle = Qt::DashDotLine; + break; + case TQt::DashDotDotLine: + qt4penstyle = Qt::DashDotDotLine; + break; + case TQt::FineDotLine: + customPenStyle = true; + mark = 1; + space = 1; + dashes << mark << space; + qt4pen.setDashPattern(dashes); + break; + case TQt::MPenStyle: + qt4penstyle = Qt::MPenStyle; + break; + default: + qt4penstyle = Qt::NoPen; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid pen style %d", tqt3penstyle ); +#endif + } + if (customPenStyle == false) { + qt4pen.setStyle(qt4penstyle); + } + TQt::PenCapStyle tqt3pencapstyle = p[0].pen->capStyle(); + Qt::PenCapStyle qt4pencapstyle; + switch ( tqt3pencapstyle ) { + case TQt::FlatCap: + qt4pencapstyle = Qt::FlatCap; + break; + case TQt::SquareCap: + qt4pencapstyle = Qt::SquareCap; + break; + case TQt::RoundCap: + qt4pencapstyle = Qt::RoundCap; + break; + case TQt::MPenCapStyle: + qt4pencapstyle = Qt::MPenCapStyle; + default: + qt4pencapstyle = Qt::FlatCap; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid pen cap style %d", tqt3pencapstyle ); +#endif + } + qt4pen.setCapStyle(qt4pencapstyle); + TQt::PenJoinStyle tqt3penjoinstyle = p[0].pen->joinStyle(); + Qt::PenJoinStyle qt4penjoinstyle; + switch ( tqt3penjoinstyle ) { + case TQt::MiterJoin: + qt4penjoinstyle = Qt::MiterJoin; + break; + case TQt::BevelJoin: + qt4penjoinstyle = Qt::BevelJoin; + break; + case TQt::RoundJoin: + qt4penjoinstyle = Qt::RoundJoin; + break; + case TQt::MPenJoinStyle: + qt4penjoinstyle = Qt::MPenJoinStyle; + default: + qt4penjoinstyle = Qt::MiterJoin; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid pen join style %d", tqt3penjoinstyle ); +#endif + } + qt4pen.setJoinStyle(qt4penjoinstyle); + TQColor qt3color = p[0].pen->color(); + qt4pen.setColor(QColor(qt3color.red(), qt3color.green(), qt3color.blue(), 255)); + qt4pen.setWidth(p[0].pen->width()); + } + if (c == PdcSetBkMode) { + TQt::BGMode qt3bkmode = (TQt::BGMode)p[0].ival; + switch ( qt3bkmode ) { + case TQt::TransparentMode: + qt4bkmode = Qt::TransparentMode; + break; + case TQt::OpaqueMode: + qt4bkmode = Qt::OpaqueMode; + break; + default: + qt4bkmode = Qt::TransparentMode; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid background mode %d", qt3bkmode ); +#endif + } + } + if (c == PdcSetFont) { + // FIXME + printf("[WARNING] QFont conversion is NOT COMPLETE\n\r"); fflush(stdout); + + TQFont qt3font = *p[0].font; + qt4font = QFont(QString::fromUtf8(qt3font.family().utf8().data()), qt3font.pointSize(), qt3font.weight(), qt3font.italic()); + } + if (c == PdcDrawPixmap) { + qt4rect = QRect(p[0].rect->x(), p[0].rect->y(), p[0].rect->width(), p[0].rect->height()); + TQPixmap qt3pixmap = *p[1].pixmap; + qt4pixmap = QPixmap::fromX11Pixmap(qt3pixmap.handle(), QPixmap::ImplicitlyShared); + } + if (c == PdcDrawText2) { + qt4point1 = QPoint(p[0].point->x(), p[0].point->y()); + qt4string = QString::fromUtf8(p[1].str->utf8().data()); + } + } + + int index; + int count; + int lineCount; + QPainterPath path; + + switch ( c ) { // exec cmd + case PdcNOP: + break; + case PdcDrawPoint: + m_qt4painter->drawPoint( qt4point1 ); + break; + case PdcMoveTo: + curPt = qt4point1; + break; + case PdcLineTo: + prevPt = curPt; + curPt = qt4point1; + m_qt4painter->drawLine( prevPt, curPt ); + break; + case PdcDrawLine: + m_qt4painter->drawLine( qt4point1, qt4point2 ); + break; + case PdcDrawRect: + m_qt4painter->drawRect( qt4rect ); + break; + case PdcDrawRoundRect: + m_qt4painter->drawRoundedRect( qt4rect, p[1].ival, p[2].ival ); + break; + case PdcDrawEllipse: + m_qt4painter->drawEllipse( qt4rect ); + break; + case PdcDrawArc: + m_qt4painter->drawArc( qt4rect, p[1].ival, p[2].ival ); + break; + case PdcDrawPie: + m_qt4painter->drawPie( qt4rect, p[1].ival, p[2].ival ); + break; + case PdcDrawChord: + m_qt4painter->drawChord( qt4rect, p[1].ival, p[2].ival ); + break; + case PdcDrawLineSegments: + index = 0; + count = -1; + lineCount = (count == -1) ? (qt4polygon.size() - index) / 2 : count; + m_qt4painter->drawLines(qt4polygon.constData() + index * 2, lineCount); + break; + case PdcDrawPolyline: + m_qt4painter->drawPolyline( qt4polygon ); + break; + case PdcDrawPolygon: + m_qt4painter->drawPolygon( qt4polygon, (p[1].ival == 0)?Qt::OddEvenFill:Qt::WindingFill ); + break; + case PdcDrawCubicBezier: + index = 0; + path.moveTo(qt4polygon.at(index)); + path.cubicTo(qt4polygon.at(index+1), qt4polygon.at(index+2), qt4polygon.at(index+3)); + m_qt4painter->strokePath(path, m_qt4painter->pen()); + break; + case PdcDrawText: + m_qt4painter->drawText( qt4point1, qt4string ); + break; + case PdcDrawTextFormatted: + m_qt4painter->drawText( qt4rect, qt4formattedtextflags, qt4string ); + break; + case PdcDrawText2: + m_qt4painter->drawText( qt4point1, qt4string ); + break; + case PdcDrawText2Formatted: + m_qt4painter->drawText( qt4rect, qt4formattedtextflags, qt4string ); + break; + case PdcDrawPixmap: + m_qt4painter->drawPixmap( qt4rect, qt4pixmap ); + break; +#if 0 + case PdcDrawImage: { + TQImage image; + if ( d->formatMajor < 4 ) { + s >> p >> image; + painter->drawImage( p, image ); + } else { + s >> r >> image; + painter->drawImage( r, image ); + } + } + break; +#endif + case PdcBegin: + if (m_qt4painter->isActive()) { + // KEEP THIS DEACTIVATED +// QPaintDevice* pd = m_qt4painter->device(); +// m_qt4painter->end(); +// m_qt4painter->begin(pd); + } +#if defined(QT_CHECK_RANGE) + else { + tqWarning( "TDEQt4PaintDevice::cmd: Painter has no paint device available" ); + } +#endif + break; + case PdcEnd: + // KEEP THIS DEACTIVATED +// m_qt4painter->end(); + break; + case PdcSave: + m_qt4painter->save(); + break; + case PdcRestore: + m_qt4painter->restore(); + break; + case PdcSetBkColor: + m_qt4painter->setBackground( QBrush(QColor(p[0].color->red(), p[0].color->green(), p[0].color->blue())) ); + break; + case PdcSetBkMode: + m_qt4painter->setBackgroundMode( qt4bkmode ); + break; + case PdcSetROP: + m_qt4painter->setCompositionMode(qt4compositionmode); + break; + case PdcSetBrushOrigin: + m_qt4painter->setBrushOrigin( qt4point1 ); + break; + case PdcSetFont: + m_qt4painter->setFont( qt4font ); + break; + case PdcSetPen: + m_qt4painter->setPen( qt4pen ); + break; + case PdcSetBrush: + m_qt4painter->setBrush( qt4brush ); + break; +#if 0 + case PdcSetTabStops: + s >> i_16; + painter->setTabStops( i_16 ); + break; + case PdcSetTabArray: + s >> i_16; + if ( i_16 == 0 ) { + painter->setTabArray( 0 ); + } else { + int *ta = new int[i_16]; + TQ_CHECK_PTR( ta ); + for ( int i=0; i<i_16; i++ ) { + s >> i1_16; + ta[i] = i1_16; + } + painter->setTabArray( ta ); + delete [] ta; + } + break; + case PdcSetVXform: + s >> i_8; +#ifndef QT_NO_TRANSFORMATIONS + painter->setViewXForm( i_8 ); +#endif + break; + case PdcSetWindow: + s >> r; +#ifndef QT_NO_TRANSFORMATIONS + painter->setWindow( r ); +#endif + break; + case PdcSetViewport: + s >> r; +#ifndef QT_NO_TRANSFORMATIONS + painter->setViewport( r ); +#endif + break; +#endif + case PdcSetWXform: + m_qt4painter->setWorldMatrixEnabled( p[0].ival ); + break; + case PdcSetWMatrix: + m_qt4painter->setWorldMatrix( qt4matrix, p[1].ival ); + break; +#if 0 +#ifndef QT_NO_TRANSFORMATIONS + case PdcSaveWMatrix: + painter->saveWorldMatrix(); + break; + case PdcRestoreWMatrix: + painter->restoreWorldMatrix(); + break; +#endif +#endif + case PdcSetClip: + m_qt4painter->setClipping( p[0].ival ); + break; + case PdcSetClipRegion: + m_qt4painter->setClipRegion( qt4region, Qt::ReplaceClip ); + break; + default: +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::cmd: Invalid command %d", c ); +#endif + } + + return TRUE; +} + + +/*! + Internal implementation of the virtual TQPaintDevice::metric() + function. + + Use the TQPaintDeviceMetrics class instead. + + A picture has the following hard-coded values: dpi=72, + numcolors=16777216 and depth=24. + + \a m is the metric to get. +*/ + +int TDEQt4PaintDevice::metric( int m ) const +{ + int val; + QPaintDevice* qt4pd = m_qt4painter->device(); + if (qt4pd) { + switch ( m ) { + // ### hard coded dpi and color depth values ! + case TQPaintDeviceMetrics::PdmWidth: + val = qt4pd->width(); + break; + case TQPaintDeviceMetrics::PdmHeight: + val = qt4pd->height(); + break; + case TQPaintDeviceMetrics::PdmWidthMM: + val = qt4pd->widthMM(); + break; + case TQPaintDeviceMetrics::PdmHeightMM: + val = qt4pd->heightMM(); + break; + case TQPaintDeviceMetrics::PdmDpiX: + val = qt4pd->logicalDpiX(); + break; + case TQPaintDeviceMetrics::PdmPhysicalDpiX: + val = qt4pd->physicalDpiX(); + break; + case TQPaintDeviceMetrics::PdmDpiY: + val = qt4pd->logicalDpiY(); + break; + case TQPaintDeviceMetrics::PdmPhysicalDpiY: + val = qt4pd->physicalDpiY(); + break; + case TQPaintDeviceMetrics::PdmNumColors: + val = qt4pd->colorCount(); + break; + case TQPaintDeviceMetrics::PdmDepth: + val = qt4pd->depth(); + break; + default: + val = 0; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::metric: Invalid metric command" ); +#endif + } + } + else { + val = 0; +#if defined(QT_CHECK_RANGE) + tqWarning( "TDEQt4PaintDevice::metric: No Qt4 paint device available" ); +#endif + } + return val; +} + diff --git a/plugin/tdeqt4painter.h b/plugin/tdeqt4painter.h new file mode 100644 index 0000000..ccb5f70 --- /dev/null +++ b/plugin/tdeqt4painter.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Definition of TDEQt4PaintDevice class +** +** Copyright (C) 2012 Timothy Pearson. All rights reserved. +** +** This file is part of the TDE Qt4 style interface +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +#ifndef TDEQT4PAINTER_H +#define TDEQT4PAINTER_H + +#define TQT_NO_COMPAT_NAMES +#include "ntqpaintdevice.h" +#include "ntqbuffer.h" +#undef Qt + +#include <QtGui/QPainter> +#include <QtGui/QBitmap> + +class Q_EXPORT TDEQt4PaintDevice : public TQPaintDevice // picture class +{ +public: + TDEQt4PaintDevice( QPainter * ); + ~TDEQt4PaintDevice(); + +protected: + bool cmd( int, TQPainter *, TQPDevCmdParam * ); + int metric( int ) const; + +private: + QPainter *m_qt4painter; + + QPoint prevPt; + QPoint curPt; +}; + +#endif // TDEQT4PAINTER_H |