00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef BGRender_h_Included
00012 #define BGRender_h_Included
00013
00014 #include <tqobject.h>
00015 #include <tqptrvector.h>
00016 #include <tqimage.h>
00017 #include <tqpixmap.h>
00018
00019 #include "bgsettings.h"
00020
00021 class TQSize;
00022 class TQRect;
00023 class TQString;
00024 class TQTimer;
00025
00026 class KConfig;
00027 class KProcess;
00028 class KTempFile;
00029 class KShellProcess;
00030 class KStandardDirs;
00031
00038 class KBackgroundRenderer:
00039 public TQObject,
00040 public KBackgroundSettings
00041 {
00042 Q_OBJECT
00043
00044 public:
00045 KBackgroundRenderer(int desk, int screen, bool drawBackgroundPerScreen, KConfig *config=0);
00046 ~KBackgroundRenderer();
00047
00048 void load(int desk, int screen, bool drawBackgroundPerScreen, bool reparseConfig=true);
00049
00050 void setPreview(const TQSize &size);
00051 void setSize(const TQSize &size);
00052
00053 TQPixmap pixmap();
00054 TQImage image();
00055 bool isActive() { return m_State & Rendering; }
00056 void cleanup();
00057 void saveCacheFile();
00058 void enableTiling( bool enable ) { m_TilingEnabled = enable; }
00059
00060 public slots:
00061 void start(bool enableBusyCursor = false);
00062 void stop();
00063 void desktopResized();
00064
00065 signals:
00066 void imageDone(int desk, int screen);
00067 void programFailure(int desk, int exitstatus);
00068 void programSuccess(int desk);
00069
00070 private slots:
00071 void slotBackgroundDone(KProcess *);
00072 void render();
00073 void done();
00074
00075 private:
00076 enum { Error, Wait, WaitUpdate, Done };
00077 enum { Rendering = 1, InitCheck = 2,
00078 BackgroundStarted = 4, BackgroundDone = 8,
00079 WallpaperStarted = 0x10, WallpaperDone = 0x20,
00080 AllDone = 0x40 };
00081
00082 TQString buildCommand();
00083 void createTempFile();
00084 void tile(TQImage& dst, TQRect rect, const TQImage& src);
00085 void blend(TQImage& dst, TQRect dr, const TQImage& src, TQPoint soffs = TQPoint(0, 0), int blendFactor=100);
00086
00087 void wallpaperBlend();
00088 void fastWallpaperBlend();
00089 void fullWallpaperBlend();
00090
00091 int doBackground(bool quit=false);
00092 int doWallpaper(bool quit=false);
00093 void setBusyCursor(bool isBusy);
00094 TQString cacheFileName();
00095 bool useCacheFile() const;
00096 bool canTile() const;
00097
00098 bool m_isBusyCursor;
00099 bool m_enableBusyCursor;
00100 bool m_bPreview;
00101 int m_State;
00102 bool m_Cached;
00103 bool m_TilingEnabled;
00104
00105 KTempFile* m_Tempfile;
00106 TQSize m_Size, m_rSize;
00107 TQRect m_WallpaperRect;
00108 TQImage m_Image, m_Background, m_Wallpaper;
00109 TQPixmap m_Pixmap;
00110 TQTimer *m_pTimer;
00111
00112 KStandardDirs *m_pDirs;
00113 KShellProcess *m_pProc;
00114
00115 };
00116
00123 class KVirtualBGRenderer : public QObject
00124 {
00125 Q_OBJECT
00126 public:
00127 KVirtualBGRenderer(int desk, KConfig *config=0l);
00128 ~KVirtualBGRenderer();
00129
00130 KBackgroundRenderer * renderer(unsigned screen);
00131 unsigned numRenderers() const { return m_numRenderers; }
00132
00133 TQPixmap pixmap();
00134
00135 void setPreview(const TQSize & size);
00136
00137 bool needProgramUpdate();
00138 void programUpdate();
00139
00140 bool needWallpaperChange();
00141 void changeWallpaper();
00142
00143 int hash();
00144 bool isActive();
00145 void setEnabled( bool enable );
00146 void desktopResized();
00147
00148 void load(int desk, bool reparseConfig=true);
00149 void start();
00150 void stop();
00151 void cleanup();
00152 void saveCacheFile();
00153 void enableTiling( bool enable );
00154
00155 signals:
00156 void imageDone(int desk);
00157
00158 private slots:
00159 void screenDone(int desk, int screen);
00160
00161 private:
00162 TQSize renderSize(int screen);
00163 void initRenderers();
00164
00165 KConfig *m_pConfig;
00166 float m_scaleX;
00167 float m_scaleY;
00168 int m_desk;
00169 unsigned m_numRenderers;
00170 bool m_bDrawBackgroundPerScreen;
00171 bool m_bCommonScreen;
00172 bool m_bDeleteConfig;
00173 TQSize m_size;
00174
00175 TQMemArray<bool> m_bFinished;
00176 TQPtrVector<KBackgroundRenderer> m_renderer;
00177 TQPixmap *m_pPixmap;
00178 };
00179
00180
00181 #endif // BGRender_h_Included
00182