|
Lines 16-25
Link Here
|
| 16 |
#include "bgsettings.h" |
16 |
#include "bgsettings.h" |
| 17 |
#include "kdesktopapp.h" |
17 |
#include "kdesktopapp.h" |
| 18 |
|
18 |
|
|
|
19 |
//FIXME |
| 20 |
#include "KCrossBGRender.h" |
| 21 |
#include "crossfade.h" |
| 22 |
|
| 19 |
#include <assert.h> |
23 |
#include <assert.h> |
| 20 |
|
24 |
|
| 21 |
#include <tqtimer.h> |
25 |
#include <tqtimer.h> |
| 22 |
#include <tqscrollview.h> |
26 |
#include <tqscrollview.h> |
|
|
27 |
#include <tqpainter.h> |
| 28 |
#include <tqdesktopwidget.h> |
| 23 |
|
29 |
|
| 24 |
#include <kiconloader.h> |
30 |
#include <kiconloader.h> |
| 25 |
#include <kconfig.h> |
31 |
#include <kconfig.h> |
|
Lines 34-39
Link Here
|
| 34 |
#include <X11/X.h> |
40 |
#include <X11/X.h> |
| 35 |
#include <X11/Xlib.h> |
41 |
#include <X11/Xlib.h> |
| 36 |
#include <X11/Xatom.h> |
42 |
#include <X11/Xatom.h> |
|
|
43 |
#include <X11/extensions/Xrender.h> |
| 44 |
#include <unistd.h> |
| 37 |
|
45 |
|
| 38 |
#ifndef None |
46 |
#ifndef None |
| 39 |
#define None 0L |
47 |
#define None 0L |
|
Lines 47-53
Link Here
|
| 47 |
|
55 |
|
| 48 |
#include "pixmapserver.h" |
56 |
#include "pixmapserver.h" |
| 49 |
|
57 |
|
| 50 |
template class TQPtrVector<KBackgroundRenderer>; |
58 |
//template class TQPtrVector<KBackgroundRenderer>; |
|
|
59 |
template class TQPtrVector<KCrossBGRender>; |
| 51 |
template class TQPtrVector<KBackgroundCacheEntry>; |
60 |
template class TQPtrVector<KBackgroundCacheEntry>; |
| 52 |
template class TQMemArray<int>; |
61 |
template class TQMemArray<int>; |
| 53 |
|
62 |
|
|
Lines 108-113
Link Here
|
| 108 |
connect(m_pTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout())); |
117 |
connect(m_pTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotTimeout())); |
| 109 |
m_pTimer->start( 60000 ); |
118 |
m_pTimer->start( 60000 ); |
| 110 |
|
119 |
|
|
|
120 |
/*CrossFade's config*/ |
| 121 |
m_crossTimer = new TQTimer(this); |
| 122 |
connect(m_crossTimer, TQT_SIGNAL(timeout()), TQT_SLOT(slotCrossFadeTimeout())); |
| 123 |
/*Ends here*/ |
| 124 |
|
| 125 |
|
| 111 |
connect(m_pKwinmodule, TQT_SIGNAL(currentDesktopChanged(int)), |
126 |
connect(m_pKwinmodule, TQT_SIGNAL(currentDesktopChanged(int)), |
| 112 |
TQT_SLOT(slotChangeDesktop(int))); |
127 |
TQT_SLOT(slotChangeDesktop(int))); |
| 113 |
connect(m_pKwinmodule, TQT_SIGNAL(numberOfDesktopsChanged(int)), |
128 |
connect(m_pKwinmodule, TQT_SIGNAL(numberOfDesktopsChanged(int)), |
|
Lines 577-582
Link Here
|
| 577 |
|
592 |
|
| 578 |
|
593 |
|
| 579 |
/* |
594 |
/* |
|
|
595 |
* This slot is called when the Timeout is executed |
| 596 |
*/ |
| 597 |
void KBackgroundManager::slotCrossFadeTimeout() |
| 598 |
{ |
| 599 |
KVirtualBGRenderer *r = m_Renderer[fadeDesk]; |
| 600 |
if (crossInit) { |
| 601 |
mBenchmark.start(); |
| 602 |
} |
| 603 |
|
| 604 |
if (mAlpha <= 0.0 || mBenchmark.elapsed() > 300 ) { |
| 605 |
bool do_cleanup = true; |
| 606 |
mAlpha = 1; |
| 607 |
m_crossTimer->stop(); |
| 608 |
KPixmap pixm(mNextScreen); |
| 609 |
setPixmap(&pixm, r->hash(), fadeDesk); |
| 610 |
return; |
| 611 |
} |
| 612 |
// Reset Timer |
| 613 |
mBenchmark.start(); |
| 614 |
|
| 615 |
TQPixmap dst = crossFade(*mOldScreen, mNextScreen, mAlpha, crossInit); |
| 616 |
KPixmap pixm(dst); |
| 617 |
setPixmap(&pixm, r->hash(), fadeDesk); |
| 618 |
|
| 619 |
mAlpha -=0.03; |
| 620 |
crossInit = false; |
| 621 |
} |
| 622 |
|
| 623 |
|
| 624 |
/* |
| 580 |
* This slot is called when a renderer is done. |
625 |
* This slot is called when a renderer is done. |
| 581 |
*/ |
626 |
*/ |
| 582 |
void KBackgroundManager::slotImageDone(int desk) |
627 |
void KBackgroundManager::slotImageDone(int desk) |
|
Lines 592-597
Link Here
|
| 592 |
KPixmap *pm = new KPixmap(); |
637 |
KPixmap *pm = new KPixmap(); |
| 593 |
KVirtualBGRenderer *r = m_Renderer[desk]; |
638 |
KVirtualBGRenderer *r = m_Renderer[desk]; |
| 594 |
bool do_cleanup = true; |
639 |
bool do_cleanup = true; |
|
|
640 |
fadeDesk = desk; |
| 641 |
mAlpha = 1.0; |
| 642 |
int width,height; |
| 643 |
|
| 595 |
|
644 |
|
| 596 |
*pm = r->pixmap(); |
645 |
*pm = r->pixmap(); |
| 597 |
// If current: paint it |
646 |
// If current: paint it |
|
Lines 603-609
Link Here
|
| 603 |
//setPixmap(viewport_background, r->hash(), desk); |
652 |
//setPixmap(viewport_background, r->hash(), desk); |
| 604 |
//delete viewport_background; |
653 |
//delete viewport_background; |
| 605 |
|
654 |
|
| 606 |
setPixmap(pm, r->hash(), desk); |
655 |
//START |
|
|
656 |
if (!m_Renderer[effectiveDesktop()]->renderer(0)->usingCrossXml()){ |
| 657 |
int mode = m_Renderer[effectiveDesktop()]->renderer(0)->wallpaperMode(); |
| 658 |
width = TQApplication::desktop()->screenGeometry().width(); //m_pDesktop->width(); |
| 659 |
height = TQApplication::desktop()->screenGeometry().height();// m_pDesktop->height(); |
| 660 |
|
| 661 |
if (mode == KBackgroundSettings::NoWallpaper || mode == KBackgroundSettings::Tiled || mode == KBackgroundSettings::CenterTiled ){ |
| 662 |
mNextScreen = TQPixmap(width,height); |
| 663 |
TQPainter p (&mNextScreen); |
| 664 |
p.drawTiledPixmap(0,0,width,height,*pm); |
| 665 |
} else { |
| 666 |
mNextScreen = QPixmap(*pm); |
| 667 |
} |
| 668 |
|
| 669 |
if (m_pDesktop){ |
| 670 |
mOldScreen = const_cast<QPixmap *>( m_pDesktop->backgroundPixmap() ); |
| 671 |
}else{ |
| 672 |
mOldScreen = const_cast<QPixmap *>( |
| 673 |
QApplication::desktop()->screen()->backgroundPixmap() ); |
| 674 |
} |
| 675 |
|
| 676 |
//TODO Find a way to discover if CrossFade effect needs to run |
| 677 |
if (mOldScreen){ |
| 678 |
crossInit = true; |
| 679 |
m_crossTimer->start(70); |
| 680 |
} else{ |
| 681 |
setPixmap(pm, r->hash(), desk); |
| 682 |
} |
| 683 |
}else{ |
| 684 |
setPixmap(pm, r->hash(), desk); |
| 685 |
} |
| 686 |
//ENDS HERE */ |
| 687 |
|
| 688 |
//setPixmap(pm, r->hash(), desk); |
| 689 |
|
| 607 |
if (!m_bBgInitDone) |
690 |
if (!m_bBgInitDone) |
| 608 |
{ |
691 |
{ |
| 609 |
m_bBgInitDone = true; |
692 |
m_bBgInitDone = true; |
|
Lines 801-807
Link Here
|
| 801 |
TQString KBackgroundManager::currentWallpaper(int desk) |
884 |
TQString KBackgroundManager::currentWallpaper(int desk) |
| 802 |
{ |
885 |
{ |
| 803 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
886 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 804 |
KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0); |
887 |
//KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0); |
|
|
888 |
KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0); |
| 805 |
|
889 |
|
| 806 |
return r->currentWallpaper(); |
890 |
return r->currentWallpaper(); |
| 807 |
} |
891 |
} |
|
Lines 818-824
Link Here
|
| 818 |
// DCOP exported |
902 |
// DCOP exported |
| 819 |
void KBackgroundManager::setExport(int _export) |
903 |
void KBackgroundManager::setExport(int _export) |
| 820 |
{ |
904 |
{ |
| 821 |
kdDebug() << "KBackgroundManager enabling exports.\n"; |
905 |
// kdDebug() << "KBackgroundManager enabling exports.\n"; |
| 822 |
applyExport(_export); |
906 |
applyExport(_export); |
| 823 |
slotChangeDesktop(0); |
907 |
slotChangeDesktop(0); |
| 824 |
} |
908 |
} |
|
Lines 843-849
Link Here
|
| 843 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
927 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 844 |
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) |
928 |
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) |
| 845 |
{ |
929 |
{ |
| 846 |
KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i); |
930 |
KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i); |
| 847 |
r->stop(); |
931 |
r->stop(); |
| 848 |
r->setWallpaperMode(mode); |
932 |
r->setWallpaperMode(mode); |
| 849 |
r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); |
933 |
r->setMultiWallpaperMode(KBackgroundSettings::NoMulti); |
|
Lines 856-862
Link Here
|
| 856 |
void KBackgroundManager::setWallpaper(TQString wallpaper) |
940 |
void KBackgroundManager::setWallpaper(TQString wallpaper) |
| 857 |
{ |
941 |
{ |
| 858 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
942 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 859 |
KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(0); |
943 |
KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(0); |
| 860 |
int mode = r->wallpaperMode(); |
944 |
int mode = r->wallpaperMode(); |
| 861 |
if (mode == KBackgroundSettings::NoWallpaper) |
945 |
if (mode == KBackgroundSettings::NoWallpaper) |
| 862 |
mode = KBackgroundSettings::Tiled; |
946 |
mode = KBackgroundSettings::Tiled; |
|
Lines 869-875
Link Here
|
| 869 |
TQStringList KBackgroundManager::wallpaperFiles(int desk) |
953 |
TQStringList KBackgroundManager::wallpaperFiles(int desk) |
| 870 |
{ |
954 |
{ |
| 871 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
955 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 872 |
KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0); |
956 |
KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0); |
| 873 |
|
957 |
|
| 874 |
return r->wallpaperFiles(); |
958 |
return r->wallpaperFiles(); |
| 875 |
} |
959 |
} |
|
Lines 880-886
Link Here
|
| 880 |
TQStringList KBackgroundManager::wallpaperList(int desk) |
964 |
TQStringList KBackgroundManager::wallpaperList(int desk) |
| 881 |
{ |
965 |
{ |
| 882 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
966 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 883 |
KBackgroundRenderer *r = m_Renderer[validateDesk(desk)]->renderer(0);; |
967 |
KCrossBGRender *r = m_Renderer[validateDesk(desk)]->renderer(0);; |
| 884 |
|
968 |
|
| 885 |
return r->wallpaperList(); |
969 |
return r->wallpaperList(); |
| 886 |
} |
970 |
} |
|
Lines 907-913
Link Here
|
| 907 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
991 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 908 |
for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i) |
992 |
for (unsigned i=0; i < m_Renderer[sdesk]->numRenderers(); ++i) |
| 909 |
{ |
993 |
{ |
| 910 |
KBackgroundRenderer *r = m_Renderer[sdesk]->renderer(i); |
994 |
KCrossBGRender *r = m_Renderer[sdesk]->renderer(i); |
| 911 |
|
995 |
|
| 912 |
setCommon(false); // Force each desktop to have it's own wallpaper |
996 |
setCommon(false); // Force each desktop to have it's own wallpaper |
| 913 |
|
997 |
|
|
Lines 974-980
Link Here
|
| 974 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
1058 |
//TODO Is the behaviour of this function appropriate for multiple screens? |
| 975 |
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) |
1059 |
for (unsigned i=0; i < m_Renderer[effectiveDesktop()]->numRenderers(); ++i) |
| 976 |
{ |
1060 |
{ |
| 977 |
KBackgroundRenderer *r = m_Renderer[effectiveDesktop()]->renderer(i); |
1061 |
KCrossBGRender *r = m_Renderer[effectiveDesktop()]->renderer(i); |
| 978 |
r->stop(); |
1062 |
r->stop(); |
| 979 |
|
1063 |
|
| 980 |
if (isColorA) |
1064 |
if (isColorA) |