[yast-commit] r43839 - in /trunk/qt/src: QY2Styler.cc QY2Styler.h YQWizard.cc
![](https://seccdn.libravatar.org/avatar/09d48268ad1ffb8c8e17fbc3b36e1480.jpg?s=120&d=mm&r=g)
Author: coolo
Date: Wed Jan 23 08:29:52 2008
New Revision: 43839
URL: http://svn.opensuse.org/viewcvs/yast?rev=43839&view=rev
Log:
to say it with ma: backup
Modified:
trunk/qt/src/QY2Styler.cc
trunk/qt/src/QY2Styler.h
trunk/qt/src/YQWizard.cc
Modified: trunk/qt/src/QY2Styler.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/QY2Styler.cc?rev=43839&r1=43838&r2=43839&view=diff
==============================================================================
--- trunk/qt/src/QY2Styler.cc (original)
+++ trunk/qt/src/QY2Styler.cc Wed Jan 23 08:29:52 2008
@@ -67,6 +67,59 @@
void QY2Styler::registerWidget( QWidget *widget )
{
widget->installEventFilter( this );
+ widget->setAutoFillBackground( true );
+}
+
+void QY2Styler::registerChildWidget( QWidget *parent, QWidget *widget )
+{
+ widget->installEventFilter( this );
+ _children[parent].push_back( widget );
+}
+
+void QY2Styler::renderParent( QWidget *wid )
+{
+ QString name = wid->objectName();
+
+ // if the parent does not have a background, this does not make sense
+ if ( _backgrounds[name].pix.isNull() )
+ return;
+
+ QRect fillRect = wid->contentsRect();
+ if ( _backgrounds[name].full )
+ fillRect = wid->rect();
+
+ QImage back = _backgrounds[name].pix.scaled( fillRect.width(), fillRect.height() );
+
+ QPainter pain( &back );
+ QWidget *child;
+ foreach( child, _children[wid] )
+ {
+ if (! child->isVisible() )
+ continue;
+
+ QString name = child->objectName();
+ QRect fillRect = child->contentsRect();
+ if ( _backgrounds[name].full )
+ fillRect = child->rect();
+
+ QString key = QString( "style_%1_%2_%3" ).arg( name ).arg( fillRect.width() ).arg( fillRect.height() );
+ QPixmap scaled;
+ if ( QPixmapCache::find( key, scaled ) )
+ {
+ qDebug() << "found " << qPrintable( key );
+ } else {
+ qDebug() << "scale " << qPrintable( name ) << " " << fillRect.width() << " " << fillRect.height();
+ scaled = QPixmap::fromImage( _backgrounds[name].pix.scaled( fillRect.width(), fillRect.height() ) );
+ QPixmapCache::insert( key, scaled );
+ }
+ pain.drawPixmap( wid->mapFromGlobal( child->mapToGlobal( fillRect.topLeft() ) ), scaled );
+
+ }
+ QPixmap result = QPixmap::fromImage( back );
+
+ QPalette p = wid->palette();
+ p.setBrush(QPalette::Window, result );
+ wid->setPalette( p );
}
bool QY2Styler::eventFilter( QObject * obj, QEvent * ev )
@@ -90,10 +143,21 @@
{
QString back = _backgrounds[ name ].filename;
_backgrounds[ name ].pix = QImage( back );
- //qDebug() << "loading " << qPrintable( back ) << " for " << qPrintable( name );
+ qDebug() << "loading " << qPrintable( back ) << " for " << qPrintable( name );
}
- wid->setAutoFillBackground( true );
+ // if it's a children itself, we have to do the full blow action
+ if ( !_children.contains( wid ) )
+ {
+ QWidget *parent = wid->parentWidget();
+ while ( parent && !_children.contains( parent ) )
+ parent = parent->parentWidget();
+ renderParent( parent );
+ return QObject::eventFilter( obj, ev );
+ } else {
+ renderParent( wid );
+ return QObject::eventFilter( obj, ev );
+ }
QPixmap result( wid->size() );
QRect fillRect = wid->contentsRect();
Modified: trunk/qt/src/QY2Styler.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/QY2Styler.h?rev=43839&r1=43838&r2=43839&view=diff
==============================================================================
--- trunk/qt/src/QY2Styler.h (original)
+++ trunk/qt/src/QY2Styler.h Wed Jan 23 08:29:52 2008
@@ -5,6 +5,7 @@
#include <QHash>
#include <QString>
#include <QImage>
+#include <QMap>
class QY2Styler : public QObject
{
@@ -16,12 +17,15 @@
void setStyleSheet( const QString &file );
QString themeDir() const;
void registerWidget( QWidget *widget );
+ void registerChildWidget( QWidget *parent, QWidget *widget );
static QY2Styler *self() {
return _self;
}
protected:
+ void renderParent( QWidget *wid );
+
void processUrls(QString &text);
/*
* Reimplemented from QObject.
@@ -36,6 +40,7 @@
};
QHash
participants (1)
-
coolo@svn.opensuse.org