summaryrefslogtreecommitdiff
authorsandman <sandman>2002-07-08 00:42:56 (UTC)
committer sandman <sandman>2002-07-08 00:42:56 (UTC)
commit923a6290c8cc93914d54e583f1d79a6bae638fab (patch) (unidiff)
treeb2562e4dbf6d71631b358021f8c4ec29f36a6d12
parent895f43bd1850b3e0c43edaaad18a7d7f2613033b (diff)
downloadopie-923a6290c8cc93914d54e583f1d79a6bae638fab.zip
opie-923a6290c8cc93914d54e583f1d79a6bae638fab.tar.gz
opie-923a6290c8cc93914d54e583f1d79a6bae638fab.tar.bz2
- Fix a memory leak (bg pixmaps for taskbar applets were never freed)
- Try to be more intelligent about stipple alignment in child widgets (in every app I tested the stipple is now always aligned right)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/styles/liquid/liquid.cpp16
-rw-r--r--noncore/styles/liquid/plugin.cpp2
2 files changed, 10 insertions, 8 deletions
diff --git a/noncore/styles/liquid/liquid.cpp b/noncore/styles/liquid/liquid.cpp
index 67e53e9..fc925b8 100644
--- a/noncore/styles/liquid/liquid.cpp
+++ b/noncore/styles/liquid/liquid.cpp
@@ -80,121 +80,120 @@ void TransMenuHandler::reloadSettings()
80 Config config ( "qpe" ); 80 Config config ( "qpe" );
81 config. setGroup ( "Liquid-Style" ); 81 config. setGroup ( "Liquid-Style" );
82 82
83 type = config. readNumEntry("Type", TransStippleBg); 83 type = config. readNumEntry("Type", TransStippleBg);
84 color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name())); 84 color = QColor ( config. readEntry("Color", QApplication::palette().active().button().name()));
85 fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name())); 85 fgColor = QColor ( config. readEntry("TextColor", QApplication::palette().active().text().name()));
86 opacity = config. readNumEntry("Opacity", 10); 86 opacity = config. readNumEntry("Opacity", 10);
87 if ( opacity < -20 ) 87 if ( opacity < -20 )
88 opacity = 20; 88 opacity = 20;
89 else if ( opacity > 20 ) 89 else if ( opacity > 20 )
90 opacity = 20; 90 opacity = 20;
91 91
92 shadowText = config. readBoolEntry("ShadowText", true); 92 shadowText = config. readBoolEntry("ShadowText", true);
93} 93}
94 94
95bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev) 95bool TransMenuHandler::eventFilter(QObject *obj, QEvent *ev)
96{ 96{
97 QWidget *p = (QWidget *)obj; 97 QWidget *p = (QWidget *)obj;
98 98
99 if(ev->type() == QEvent::Show){ 99 if(ev->type() == QEvent::Show){
100 if(type == TransStippleBg || type == TransStippleBtn || 100 if(type == TransStippleBg || type == TransStippleBtn ||
101 type == Custom){ 101 type == Custom){
102 QApplication::syncX(); 102 QApplication::syncX();
103 QPixmap *pix = new QPixmap; 103 QPixmap *pix = new QPixmap;
104 if(p->testWFlags(Qt::WType_Popup)){ 104 if(p->testWFlags(Qt::WType_Popup)){
105 QRect r(p->x(), p->y(), p->width(), p->height()); 105 QRect r(p->x(), p->y(), p->width(), p->height());
106 QRect deskR = QApplication::desktop()->rect(); 106 QRect deskR = QApplication::desktop()->rect();
107 if(r.right() > deskR.right() || r.bottom() > deskR.bottom()){ 107 if(r.right() > deskR.right() || r.bottom() > deskR.bottom()){
108 r.setBottom(deskR.bottom()); 108 r.setBottom(deskR.bottom());
109 r.setRight(deskR.right()); 109 r.setRight(deskR.right());
110 } 110 }
111 *pix = QPixmap::grabWindow(QApplication::desktop()-> winId(), r.x(), r.y(), 111 *pix = QPixmap::grabWindow(QApplication::desktop()-> winId(), r.x(), r.y(),
112 r.width(), r.height()); 112 r.width(), r.height());
113 } 113 }
114 else{ // tear off menu 114 else{ // tear off menu
115 pix->resize(p->width(), p->height()); 115 pix->resize(p->width(), p->height());
116 pix->fill(Qt::black.rgb()); 116 pix->fill(Qt::black.rgb());
117 } 117 }
118 if(type == TransStippleBg){ 118 if(type == TransStippleBg){
119 stripePixmap(*pix, p->colorGroup().background()); 119 stripePixmap(*pix, p->colorGroup().background());
120 } 120 }
121 else if(type == TransStippleBtn){ 121 else if(type == TransStippleBtn){
122 stripePixmap(*pix, p->colorGroup().button()); 122 stripePixmap(*pix, p->colorGroup().button());
123 } 123 }
124 else{ 124 else{
125 QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color); 125 QPixmapEffect::fade(*pix, (((float)opacity)+80)*0.01, color);
126 } 126 }
127 127
128 if (p->inherits("QPopupMenu")) 128 pixDict.insert(p->winId(), pix);
129 pixDict.insert(p->winId(), pix); 129
130 else { 130 if (!p->inherits("QPopupMenu")) {
131 p->setBackgroundPixmap(*pix); 131 p->setBackgroundPixmap(*pix);
132 132
133 QObjectList *ol = p-> queryList("QWidget"); 133 QObjectList *ol = p-> queryList("QWidget");
134 for ( QObjectListIt it( *ol ); it. current ( ); ++it ) { 134 for ( QObjectListIt it( *ol ); it. current ( ); ++it ) {
135 QWidget *wid = (QWidget *) it.current ( ); 135 QWidget *wid = (QWidget *) it.current ( );
136 136
137 wid-> setBackgroundPixmap(*pix); 137 wid-> setBackgroundPixmap(*pix);
138 wid-> setBackgroundOrigin(QWidget::ParentOrigin); 138 wid-> setBackgroundOrigin(QWidget::ParentOrigin);
139 } 139 }
140 delete ol; 140 delete ol;
141 } 141 }
142 } 142 }
143 } 143 }
144 else if(ev->type() == QEvent::Hide){ 144 else if(ev->type() == QEvent::Hide){
145 if(type == TransStippleBg || type == TransStippleBtn || 145 if(type == TransStippleBg || type == TransStippleBtn ||
146 type == Custom){ 146 type == Custom){
147// qWarning("Deleting menu pixmap, width %d", pixDict.find(p->winId())->width()); 147// qWarning("Deleting menu pixmap, width %d", pixDict.find(p->winId())->width());
148 148
149 if (p->inherits("QPopupMenu")) 149 pixDict.remove(p->winId());
150 pixDict.remove(p->winId()); 150 if (!p->inherits("QPopupMenu")) {
151 else { 151 p->setBackgroundMode(QWidget::PaletteBackground);
152 p->setBackgroundMode(QWidget::PaletteBackground);
153 152
154 QObjectList *ol = p-> queryList("QWidget"); 153 QObjectList *ol = p-> queryList("QWidget");
155 for ( QObjectListIt it( *ol ); it. current ( ); ++it ) { 154 for ( QObjectListIt it( *ol ); it. current ( ); ++it ) {
156 QWidget *wid = (QWidget *) it.current ( ); 155 QWidget *wid = (QWidget *) it.current ( );
157 156
158 wid-> setBackgroundMode( QWidget::PaletteBackground ); 157 wid-> setBackgroundMode( QWidget::PaletteBackground );
159 } 158 }
160 delete ol; 159 delete ol;
161 } 160 }
162 } 161 }
163 } 162 }
164 return(false); 163 return(false);
165} 164}
166 165
167 166
168LiquidStyle::LiquidStyle() 167LiquidStyle::LiquidStyle()
169 :QWindowsStyle() 168 :QWindowsStyle()
170{ 169{
171 setName ( "LiquidStyle" ); 170 setName ( "LiquidStyle" );
172 171
173 btnMaskBmp = QBitmap(37, 26, buttonmask_bits, true); 172 btnMaskBmp = QBitmap(37, 26, buttonmask_bits, true);
174 btnMaskBmp.setMask(btnMaskBmp); 173 btnMaskBmp.setMask(btnMaskBmp);
175 htmlBtnMaskBmp = QBitmap(37, 26, htmlbuttonmask_bits, true); 174 htmlBtnMaskBmp = QBitmap(37, 26, htmlbuttonmask_bits, true);
176 htmlBtnMaskBmp.setMask(htmlBtnMaskBmp); 175 htmlBtnMaskBmp.setMask(htmlBtnMaskBmp);
177 headerHoverID = -1; 176 headerHoverID = -1;
178 highlightWidget = NULL; 177 highlightWidget = NULL;
179 setButtonDefaultIndicatorWidth(0); 178 setButtonDefaultIndicatorWidth(0);
180 btnDict.setAutoDelete(true); 179 btnDict.setAutoDelete(true);
181 bevelFillDict.setAutoDelete(true); 180 bevelFillDict.setAutoDelete(true);
182 smallBevelFillDict.setAutoDelete(true); 181 smallBevelFillDict.setAutoDelete(true);
183 customBtnColorList.setAutoDelete(true); 182 customBtnColorList.setAutoDelete(true);
184 customBtnIconList.setAutoDelete(true); 183 customBtnIconList.setAutoDelete(true);
185 customBtnLabelList.setAutoDelete(true); 184 customBtnLabelList.setAutoDelete(true);
186 185
187 rMatrix.rotate(270.0); 186 rMatrix.rotate(270.0);
188 highcolor = QPixmap::defaultDepth() > 8; 187 highcolor = QPixmap::defaultDepth() > 8;
189 btnBorderPix = new QPixmap; 188 btnBorderPix = new QPixmap;
190 btnBorderPix->convertFromImage(qembed_findImage("buttonfill")); 189 btnBorderPix->convertFromImage(qembed_findImage("buttonfill"));
191 btnBlendPix = new QPixmap; 190 btnBlendPix = new QPixmap;
192 btnBlendPix->convertFromImage(qembed_findImage("buttonborder")); 191 btnBlendPix->convertFromImage(qembed_findImage("buttonborder"));
193 bevelFillPix = new QPixmap; 192 bevelFillPix = new QPixmap;
194 bevelFillPix->convertFromImage(qembed_findImage("clear_fill_large")); 193 bevelFillPix->convertFromImage(qembed_findImage("clear_fill_large"));
195 smallBevelFillPix = new QPixmap; 194 smallBevelFillPix = new QPixmap;
196 smallBevelFillPix->convertFromImage(qembed_findImage("clear_fill_small")); 195 smallBevelFillPix->convertFromImage(qembed_findImage("clear_fill_small"));
197 // new stuff 196 // new stuff
198 vsbSliderFillPix = menuPix = NULL; 197 vsbSliderFillPix = menuPix = NULL;
199 menuHandler = new TransMenuHandler(this); 198 menuHandler = new TransMenuHandler(this);
200 setScrollBarExtent(15, 15); 199 setScrollBarExtent(15, 15);
@@ -800,97 +799,98 @@ void LiquidStyle::polish(QPalette &appPal)
800 799
801 // lineedits 800 // lineedits
802 c = QColor ( config. readEntry("Base", ( Qt::white). name ( ))); 801 c = QColor ( config. readEntry("Base", ( Qt::white). name ( )));
803 QPixmap basePix; 802 QPixmap basePix;
804 basePix.resize(32, 32); 803 basePix.resize(32, 32);
805 basePix.fill(c.rgb()); 804 basePix.fill(c.rgb());
806 painter.begin(&basePix); 805 painter.begin(&basePix);
807 painter.setPen(c.dark(105)); 806 painter.setPen(c.dark(105));
808 for(i=0; i < 32; i+=4){ 807 for(i=0; i < 32; i+=4){
809 painter.drawLine(0, i, 32, i); 808 painter.drawLine(0, i, 32, i);
810 painter.drawLine(0, i+1, 32, i+1); 809 painter.drawLine(0, i+1, 32, i+1);
811 }; 810 };
812 painter.end(); 811 painter.end();
813 baseBrush.setColor(c); 812 baseBrush.setColor(c);
814 baseBrush.setPixmap(basePix); 813 baseBrush.setPixmap(basePix);
815 it.toFirst(); 814 it.toFirst();
816 while ((w=it.current()) != 0 ){ 815 while ((w=it.current()) != 0 ){
817 ++it; 816 ++it;
818 if(w->inherits("QLineEdit")){ 817 if(w->inherits("QLineEdit")){
819 QPalette pal = w->palette(); 818 QPalette pal = w->palette();
820 pal.setBrush(QColorGroup::Base, baseBrush); 819 pal.setBrush(QColorGroup::Base, baseBrush);
821 w->setPalette(pal); 820 w->setPalette(pal);
822 } 821 }
823 else if(w->inherits("QPushButton")){ 822 else if(w->inherits("QPushButton")){
824 applyCustomAttributes((QPushButton *)w); 823 applyCustomAttributes((QPushButton *)w);
825 } 824 }
826 } 825 }
827 826
828} 827}
829 828
830void LiquidStyle::polish(QWidget *w) 829void LiquidStyle::polish(QWidget *w)
831{ 830{
832 if(w->inherits("QMenuBar")){ 831 if(w->inherits("QMenuBar")){
833 //((QFrame*)w)->setLineWidth(0); 832 //((QFrame*)w)->setLineWidth(0);
834 w->setBackgroundMode(QWidget::PaletteBackground); 833 w->setBackgroundMode(QWidget::PaletteBackground);
835 return; 834 return;
836 } 835 }
837 if(w->inherits("QPopupMenu")) 836 if(w->inherits("QPopupMenu"))
838 w->setBackgroundMode(QWidget::NoBackground); 837 w->setBackgroundMode(QWidget::NoBackground);
839 else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) { 838 else if(w-> testWFlags(Qt::WType_Popup) && !w->inherits("QListBox")) {
840 w->installEventFilter(menuHandler); 839 w->installEventFilter(menuHandler);
841 } 840 }
842 841
843 if(w->isTopLevel()){ 842 if(w->isTopLevel()){
844 return; 843 return;
845 } 844 }
846 845
847 846
848 w-> setBackgroundOrigin ( QWidget::ParentOrigin ); 847 if ( !w-> inherits("QFrame") || (((QFrame*) w)-> frameShape () == QFrame::NoFrame ))
848 w-> setBackgroundOrigin ( QWidget::ParentOrigin );
849 849
850 if(w->inherits("QComboBox") || 850 if(w->inherits("QComboBox") ||
851 w->inherits("QLineEdit") || w->inherits("QRadioButton") || 851 w->inherits("QLineEdit") || w->inherits("QRadioButton") ||
852 w->inherits("QCheckBox") || w->inherits("QScrollBar")) { 852 w->inherits("QCheckBox") || w->inherits("QScrollBar")) {
853 w->installEventFilter(this); 853 w->installEventFilter(this);
854 } 854 }
855 if(w->inherits("QLineEdit")){ 855 if(w->inherits("QLineEdit")){
856 QPalette pal = w->palette(); 856 QPalette pal = w->palette();
857 pal.setBrush(QColorGroup::Base, baseBrush); 857 pal.setBrush(QColorGroup::Base, baseBrush);
858 w->setPalette(pal); 858 w->setPalette(pal);
859 } 859 }
860 if(w->inherits("QPushButton")){ 860 if(w->inherits("QPushButton")){
861 applyCustomAttributes((QPushButton *)w); 861 applyCustomAttributes((QPushButton *)w);
862 w->installEventFilter(this); 862 w->installEventFilter(this);
863 } 863 }
864 if(w->inherits("QButton") || w-> inherits("QComboBox")){ 864 if(w->inherits("QButton") || w-> inherits("QComboBox")){
865 w-> setBackgroundMode ( QWidget::PaletteBackground ); 865 w-> setBackgroundMode ( QWidget::PaletteBackground );
866 } 866 }
867 867
868 bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 || 868 bool isViewport = qstrcmp(w->name(), "qt_viewport") == 0 ||
869 qstrcmp(w->name(), "qt_clipped_viewport") == 0; 869 qstrcmp(w->name(), "qt_clipped_viewport") == 0;
870 bool isViewportChild = w->parent() && 870 bool isViewportChild = w->parent() &&
871 ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) || 871 ((qstrcmp(w->parent()->name(), "qt_viewport") == 0) ||
872 (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0)); 872 (qstrcmp(w->parent()->name(), "qt_clipped_viewport") == 0));
873 873
874 if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){ 874 if(isViewport && w->parent() && qstrcmp(w->parent()->name(), "proxyview") == 0){
875 w->setBackgroundMode(QWidget::X11ParentRelative); 875 w->setBackgroundMode(QWidget::X11ParentRelative);
876 return; 876 return;
877 } 877 }
878 if(isViewportChild){ 878 if(isViewportChild){
879 if(w->inherits("QButton") || w->inherits("QComboBox")){ 879 if(w->inherits("QButton") || w->inherits("QComboBox")){
880 if(w->parent()){ // heh, only way to test for KHTML children ;-) 880 if(w->parent()){ // heh, only way to test for KHTML children ;-)
881 if(w->parent()->parent()){ 881 if(w->parent()->parent()){
882 if(w->parent()->parent()->parent() && 882 if(w->parent()->parent()->parent() &&
883 w->parent()->parent()->parent()->inherits("KHTMLView")){ 883 w->parent()->parent()->parent()->inherits("KHTMLView")){
884 w->setAutoMask(true); 884 w->setAutoMask(true);
885 w->setBackgroundMode(QWidget::NoBackground); 885 w->setBackgroundMode(QWidget::NoBackground);
886 } 886 }
887 } 887 }
888 } 888 }
889 return; 889 return;
890 } 890 }
891 } 891 }
892 if(w->inherits("QHeader")){ 892 if(w->inherits("QHeader")){
893 w->setMouseTracking(true); 893 w->setMouseTracking(true);
894 w->installEventFilter(this); 894 w->installEventFilter(this);
895 } 895 }
896 if(w-> inherits("QToolButton")) { 896 if(w-> inherits("QToolButton")) {
diff --git a/noncore/styles/liquid/plugin.cpp b/noncore/styles/liquid/plugin.cpp
index f149c29..5f4c8e5 100644
--- a/noncore/styles/liquid/plugin.cpp
+++ b/noncore/styles/liquid/plugin.cpp
@@ -64,48 +64,50 @@ Q_EXPORT_INTERFACE()
64 Q_CREATE_INSTANCE( LiquidInterface ) 64 Q_CREATE_INSTANCE( LiquidInterface )
65} 65}
66 66
67 67
68LiquidSettingsInterface::LiquidSettingsInterface ( ) : ref ( 0 ) 68LiquidSettingsInterface::LiquidSettingsInterface ( ) : ref ( 0 )
69{ 69{
70 m_widget = 0; 70 m_widget = 0;
71} 71}
72 72
73LiquidSettingsInterface::~LiquidSettingsInterface ( ) 73LiquidSettingsInterface::~LiquidSettingsInterface ( )
74{ 74{
75} 75}
76 76
77QWidget *LiquidSettingsInterface::create ( QWidget *parent, const char *name ) 77QWidget *LiquidSettingsInterface::create ( QWidget *parent, const char *name )
78{ 78{
79 m_widget = new LiquidSettings ( parent, name ? name : "LIQUID-SETTINGS" ); 79 m_widget = new LiquidSettings ( parent, name ? name : "LIQUID-SETTINGS" );
80 80
81 return m_widget; 81 return m_widget;
82} 82}
83 83
84bool LiquidSettingsInterface::accept ( ) 84bool LiquidSettingsInterface::accept ( )
85{ 85{
86 if ( !m_widget ) 86 if ( !m_widget )
87 return false; 87 return false;
88 88
89 return m_widget-> writeConfig ( ); 89 return m_widget-> writeConfig ( );
90} 90}
91 91
92void LiquidSettingsInterface::reject ( ) 92void LiquidSettingsInterface::reject ( )
93{ 93{
94} 94}
95 95
96QRESULT LiquidSettingsInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface ) 96QRESULT LiquidSettingsInterface::queryInterface ( const QUuid &uuid, QUnknownInterface **iface )
97{ 97{
98 *iface = 0; 98 *iface = 0;
99 99
100 100
101 if ( uuid == IID_QUnknown ) 101 if ( uuid == IID_QUnknown )
102 *iface = this; 102 *iface = this;
103 else if ( uuid == IID_StyleSettings ) 103 else if ( uuid == IID_StyleSettings )
104 *iface = this; 104 *iface = this;
105 105
106 if ( *iface ) 106 if ( *iface )
107 (*iface)-> addRef ( ); 107 (*iface)-> addRef ( );
108 108
109 return QS_OK; 109 return QS_OK;
110} 110}
111 111
112// Hack for Retail Z experiments
113extern "C" { QStyle *allocate ( ) { return new LiquidStyle ( ); } }