You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
381 lines
11 KiB
381 lines
11 KiB
Index: kdefx/kstyle.cpp
|
|
===================================================================
|
|
--- kdefx/kstyle.cpp.orig
|
|
+++ kdefx/kstyle.cpp
|
|
@@ -154,6 +154,7 @@ struct KStylePrivate
|
|
bool menuAltKeyNavigation : 1;
|
|
bool menuDropShadow : 1;
|
|
bool sloppySubMenus : 1;
|
|
+ bool semiTransparentRubberband : 1;
|
|
int popupMenuDelay;
|
|
float menuOpacity;
|
|
|
|
@@ -187,6 +188,7 @@ KStyle::KStyle( KStyleFlags flags, KStyl
|
|
d->menuAltKeyNavigation = settings.readBoolEntry("/KStyle/Settings/MenuAltKeyNavigation", true);
|
|
d->scrollablePopupmenus = settings.readBoolEntry("/KStyle/Settings/ScrollablePopupMenus", false);
|
|
d->menuDropShadow = settings.readBoolEntry("/KStyle/Settings/MenuDropShadow", false);
|
|
+ d->semiTransparentRubberband = settings.readBoolEntry("/KStyle/Settings/SemiTransparentRubberband", false);
|
|
d->menuHandler = NULL;
|
|
|
|
if (useMenuTransparency) {
|
|
@@ -553,7 +555,57 @@ void KStyle::drawPrimitive( PrimitiveEle
|
|
else
|
|
// General handle, probably a kicker applet handle.
|
|
drawKStylePrimitive( KPE_GeneralHandle, p, widget, r, cg, flags, opt );
|
|
-
|
|
+#if QT_VERSION >= 0x030300
|
|
+#ifdef HAVE_XRENDER
|
|
+ } else if ( d->semiTransparentRubberband && pe == QStyle::PE_RubberBand ) {
|
|
+ QRect rect = r.normalize();
|
|
+ QPoint point;
|
|
+ point = p->xForm( point );
|
|
+
|
|
+ static XRenderColor clr = { 0, 0, 0, 0 };
|
|
+ static unsigned long fillColor = 0;
|
|
+ if ( fillColor != cg.highlight().rgb() ) {
|
|
+ fillColor = cg.highlight().rgb();
|
|
+
|
|
+ unsigned long color = fillColor << 8 | 0x40;
|
|
+
|
|
+ int red = (color >> 24) & 0xff;
|
|
+ int green = (color >> 16) & 0xff;
|
|
+ int blue = (color >> 8) & 0xff;
|
|
+ int alpha = (color >> 0) & 0xff;
|
|
+
|
|
+ red = red * alpha / 255;
|
|
+ green = green * alpha / 255;
|
|
+ blue = blue * alpha / 255;
|
|
+
|
|
+ clr.red = (red << 8) + red;
|
|
+ clr.green = (green << 8) + green;
|
|
+ clr.blue = (blue << 8) + blue;
|
|
+ clr.alpha = (alpha << 8) + alpha;
|
|
+ }
|
|
+
|
|
+ XRenderFillRectangle(
|
|
+ p->device()->x11Display(),
|
|
+ PictOpOver,
|
|
+ p->device()->x11RenderHandle(),
|
|
+ &clr,
|
|
+ rect.x() + point.x(),
|
|
+ rect.y() + point.y(),
|
|
+ rect.width(),
|
|
+ rect.height() );
|
|
+
|
|
+ p->save();
|
|
+ p->setRasterOp( Qt::CopyROP );
|
|
+ p->setPen( QPen( cg.highlight().dark( 160 ), 1 ) );
|
|
+ p->setBrush( NoBrush );
|
|
+ p->drawRect(
|
|
+ rect.x() + point.x(),
|
|
+ rect.y() + point.y(),
|
|
+ rect.width(),
|
|
+ rect.height() );
|
|
+ p->restore();
|
|
+#endif
|
|
+#endif
|
|
} else
|
|
QCommonStyle::drawPrimitive( pe, p, r, cg, flags, opt );
|
|
}
|
|
Index: kdeui/kiconview.cpp
|
|
===================================================================
|
|
--- kdeui/kiconview.cpp.orig
|
|
+++ kdeui/kiconview.cpp
|
|
@@ -548,7 +548,7 @@ void KIconViewItem::calcRect( const QStr
|
|
r = m_wordWrap->boundingRect();
|
|
|
|
int realWidth = QMAX( QMIN( r.width() + 4, tw ), fm->width( "X" ) );
|
|
- itemTextRect.setWidth( realWidth );
|
|
+ itemTextRect.setWidth( realWidth + 4 );
|
|
itemTextRect.setHeight( r.height() );
|
|
|
|
int w = 0; int h = 0; int y = 0;
|
|
@@ -699,11 +699,13 @@ void KIconViewItem::paintPixmap( QPainte
|
|
|
|
void KIconViewItem::paintText( QPainter *p, const QColorGroup &cg )
|
|
{
|
|
- int textX = textRect( false ).x() + 2;
|
|
+ int textX = textRect( false ).x() + 4;
|
|
int textY = textRect( false ).y();
|
|
|
|
if ( isSelected() ) {
|
|
- p->fillRect( textRect( false ), cg.highlight() );
|
|
+ p->setBrush(QBrush(cg.highlight()));
|
|
+ p->setPen(QPen(cg.highlight()));
|
|
+ p->drawRoundRect( textRect( false ) ,1000/textRect(false).width(),1000/textRect(false).height() );
|
|
p->setPen( QPen( cg.highlightedText() ) );
|
|
} else {
|
|
if ( iconView()->itemTextBackground() != NoBrush )
|
|
Index: kdeui/kjanuswidget.cpp
|
|
===================================================================
|
|
--- kdeui/kjanuswidget.cpp.orig
|
|
+++ kdeui/kjanuswidget.cpp
|
|
@@ -49,16 +49,19 @@ class KJanusWidget::IconListItem : publi
|
|
{
|
|
public:
|
|
IconListItem( QListBox *listbox, const QPixmap &pixmap,
|
|
- const QString &text );
|
|
+ const QString &text );
|
|
virtual int height( const QListBox *lb ) const;
|
|
virtual int width( const QListBox *lb ) const;
|
|
int expandMinimumWidth( int width );
|
|
+ void highlight( bool erase );
|
|
|
|
protected:
|
|
const QPixmap &defaultPixmap();
|
|
void paint( QPainter *painter );
|
|
-
|
|
+
|
|
private:
|
|
+ void paintContents( QPainter *painter );
|
|
+
|
|
QPixmap mPixmap;
|
|
int mMinimumWidth;
|
|
};
|
|
@@ -141,6 +144,8 @@ KJanusWidget::KJanusWidget( QWidget *par
|
|
|
|
mIconList->verticalScrollBar()->installEventFilter( this );
|
|
connect( mIconList, SIGNAL(selectionChanged()), SLOT(slotShowPage()));
|
|
+ connect( mIconList, SIGNAL(onItem(QListBoxItem *)), SLOT(slotOnItem(QListBoxItem *)));
|
|
+
|
|
hbox->addSpacing( KDialog::marginHint() );
|
|
page = new QFrame( this );
|
|
hbox->addWidget( page, 10 );
|
|
@@ -259,7 +264,7 @@ void KJanusWidget::slotReopen( QListView
|
|
}
|
|
|
|
QFrame *KJanusWidget::addPage( const QString &itemName, const QString &header,
|
|
- const QPixmap &pixmap )
|
|
+ const QPixmap &pixmap )
|
|
{
|
|
QStringList items;
|
|
items << itemName;
|
|
@@ -269,8 +274,8 @@ QFrame *KJanusWidget::addPage( const QSt
|
|
|
|
|
|
QVBox *KJanusWidget::addVBoxPage( const QStringList &items,
|
|
- const QString &header,
|
|
- const QPixmap &pixmap )
|
|
+ const QString &header,
|
|
+ const QPixmap &pixmap )
|
|
{
|
|
if( !mValid )
|
|
{
|
|
@@ -721,6 +726,12 @@ void KJanusWidget::slotItemClicked(QList
|
|
it->setOpen(!it->isOpen());
|
|
}
|
|
|
|
+// hack because qt does not support Q_OBJECT in nested classes
|
|
+void KJanusWidget::slotOnItem(QListBoxItem *qitem)
|
|
+{
|
|
+ mIconList->slotOnItem( qitem );
|
|
+}
|
|
+
|
|
void KJanusWidget::setFocus()
|
|
{
|
|
if( !mValid ) { return; }
|
|
@@ -929,11 +940,11 @@ bool KJanusWidget::eventFilter( QObject
|
|
KJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name,
|
|
WFlags f )
|
|
:KListBox( parent, name, f ), mShowAll(false), mHeightValid(false),
|
|
- mWidthValid(false)
|
|
+ mWidthValid(false),
|
|
+ mOldItem(0)
|
|
{
|
|
}
|
|
|
|
-
|
|
void KJanusWidget::IconListBox::updateMinimumHeight()
|
|
{
|
|
if( mShowAll && !mHeightValid )
|
|
@@ -995,6 +1006,45 @@ void KJanusWidget::IconListBox::setShowA
|
|
}
|
|
|
|
|
|
+void KJanusWidget::IconListBox::leaveEvent( QEvent *ev )
|
|
+{
|
|
+ KListBox::leaveEvent( ev );
|
|
+
|
|
+ if ( mOldItem && !mOldItem->isSelected() )
|
|
+ {
|
|
+ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true );
|
|
+ mOldItem = 0;
|
|
+ }
|
|
+}
|
|
+
|
|
+// hack because qt does not support Q_OBJECT in nested classes
|
|
+void KJanusWidget::IconListBox::slotOnItem(QListBoxItem *qitem)
|
|
+{
|
|
+ KListBox::slotOnItem( qitem );
|
|
+
|
|
+ if ( qitem == mOldItem )
|
|
+ {
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ if ( mOldItem && !mOldItem->isSelected() )
|
|
+ {
|
|
+ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true );
|
|
+ }
|
|
+
|
|
+ KJanusWidget::IconListItem *item = dynamic_cast< KJanusWidget::IconListItem * >( qitem );
|
|
+ if ( item && !item->isSelected() )
|
|
+ {
|
|
+ item->highlight( false );
|
|
+ mOldItem = item;
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ mOldItem = 0;
|
|
+ }
|
|
+}
|
|
+
|
|
+
|
|
|
|
KJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap,
|
|
const QString &text )
|
|
@@ -1006,6 +1056,7 @@ KJanusWidget::IconListItem::IconListItem
|
|
mPixmap = defaultPixmap();
|
|
}
|
|
setText( text );
|
|
+ setCustomHighlighting( true );
|
|
mMinimumWidth = 0;
|
|
}
|
|
|
|
@@ -1017,6 +1068,36 @@ int KJanusWidget::IconListItem::expandMi
|
|
}
|
|
|
|
|
|
+void KJanusWidget::IconListItem::highlight( bool erase )
|
|
+{
|
|
+ QRect r = listBox()->itemRect( this );
|
|
+ r.addCoords( 1, 1, -1, -1 );
|
|
+
|
|
+ QPainter p( listBox()->viewport() );
|
|
+ p.setClipRegion( r );
|
|
+
|
|
+ const QColorGroup &cg = listBox()->colorGroup();
|
|
+ if ( erase )
|
|
+ {
|
|
+ p.setPen( cg.base() );
|
|
+ p.setBrush( cg.base() );
|
|
+ p.drawRect( r );
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ p.setBrush( cg.highlight().light( 120 ) );
|
|
+ p.drawRect( r );
|
|
+
|
|
+ p.setPen( cg.highlight().dark( 140 ) );
|
|
+ p.drawRect( r );
|
|
+ }
|
|
+
|
|
+ p.setPen( cg.foreground() );
|
|
+ p.translate( r.x() - 1, r.y() - 1 );
|
|
+ paintContents( &p );
|
|
+}
|
|
+
|
|
+
|
|
const QPixmap &KJanusWidget::IconListItem::defaultPixmap()
|
|
{
|
|
static QPixmap *pix=0;
|
|
@@ -1044,15 +1125,34 @@ const QPixmap &KJanusWidget::IconListIte
|
|
|
|
void KJanusWidget::IconListItem::paint( QPainter *painter )
|
|
{
|
|
+ QRect itemPaintRegion( listBox()->itemRect( this ) );
|
|
+ QRect r( 1, 1, itemPaintRegion.width() - 2, itemPaintRegion.height() - 2);
|
|
+
|
|
+ if ( isSelected() )
|
|
+ {
|
|
+ painter->eraseRect( r );
|
|
+
|
|
+ painter->save();
|
|
+ painter->setPen( listBox()->colorGroup().highlight().dark( 160 ) );
|
|
+ painter->drawRect( r );
|
|
+ painter->restore();
|
|
+ }
|
|
+
|
|
+ paintContents( painter );
|
|
+}
|
|
+
|
|
+
|
|
+void KJanusWidget::IconListItem::paintContents( QPainter *painter )
|
|
+{
|
|
QFontMetrics fm = painter->fontMetrics();
|
|
int ht = fm.boundingRect( 0, 0, 0, 0, Qt::AlignCenter, text() ).height();
|
|
int wp = mPixmap.width();
|
|
int hp = mPixmap.height();
|
|
+ painter->drawPixmap( (mMinimumWidth - wp) / 2, 5, mPixmap );
|
|
|
|
- painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap );
|
|
if( !text().isEmpty() )
|
|
{
|
|
- painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() );
|
|
+ painter->drawText( 1, hp + 7, mMinimumWidth - 2, ht, Qt::AlignCenter, text() );
|
|
}
|
|
}
|
|
|
|
@@ -1082,6 +1182,7 @@ int KJanusWidget::IconListItem::width( c
|
|
void KJanusWidget::virtual_hook( int, void* )
|
|
{ /*BASE::virtual_hook( id, data );*/ }
|
|
|
|
+
|
|
// TODO: In TreeList, if the last child of a node is removed, and there is no corrsponding widget for that node, allow the caller to
|
|
// delete the node.
|
|
void KJanusWidget::removePage( QWidget *page )
|
|
@@ -1129,6 +1230,7 @@ void KJanusWidget::removePage( QWidget *
|
|
}
|
|
}
|
|
|
|
+
|
|
QString KJanusWidget::pageTitle(int index) const
|
|
{
|
|
if (!d || !d->mIntToTitle.contains(index))
|
|
@@ -1137,6 +1239,7 @@ QString KJanusWidget::pageTitle(int inde
|
|
return d->mIntToTitle[index];
|
|
}
|
|
|
|
+
|
|
QWidget *KJanusWidget::pageWidget(int index) const
|
|
{
|
|
if (!d || !d->mIntToPage.contains(index))
|
|
Index: kdeui/kjanuswidget.h
|
|
===================================================================
|
|
--- kdeui/kjanuswidget.h.orig
|
|
+++ kdeui/kjanuswidget.h
|
|
@@ -71,6 +71,8 @@ class KDEUI_EXPORT KJanusWidget : public
|
|
private:
|
|
class IconListBox : public KListBox
|
|
{
|
|
+ friend class KJanusWidget;
|
|
+
|
|
public:
|
|
IconListBox( QWidget *parent=0, const char *name=0, WFlags f=0 );
|
|
void updateMinimumHeight();
|
|
@@ -79,10 +81,15 @@ class KDEUI_EXPORT KJanusWidget : public
|
|
void invalidateWidth();
|
|
void setShowAll( bool showAll );
|
|
|
|
+ protected:
|
|
+ void slotOnItem( QListBoxItem *item );
|
|
+ virtual void leaveEvent( QEvent * );
|
|
+
|
|
private:
|
|
bool mShowAll;
|
|
bool mHeightValid;
|
|
bool mWidthValid;
|
|
+ QListBoxItem *mOldItem;
|
|
};
|
|
|
|
public:
|
|
@@ -558,6 +565,8 @@ class KDEUI_EXPORT KJanusWidget : public
|
|
private slots:
|
|
bool slotShowPage();
|
|
void slotFontChanged();
|
|
+
|
|
+ void slotOnItem(QListBoxItem *item);
|
|
void slotItemClicked(QListViewItem *it);
|
|
void pageGone(QObject *obj); // signal from the added page's "destroyed" signal
|
|
void slotReopen(QListViewItem *item);
|