summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdelibs/rubberband-selection.diff
diff options
context:
space:
mode:
authorRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
committerRobert Xu <robxu9@gmail.com>2011-11-10 18:04:39 -0500
commit21fcfa3348213aa87f0e3aef62ca4720c6d31cb7 (patch)
tree2cfb64c59322628e613ed0895e3c3694d3abe6bd /opensuse/core/tdelibs/rubberband-selection.diff
parent8667643bff14a60d8571c599efd3e48bed3e3b12 (diff)
downloadtde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.tar.gz
tde-packaging-21fcfa3348213aa87f0e3aef62ca4720c6d31cb7.zip
initial commit to suse branch: eclipse integration
Diffstat (limited to 'opensuse/core/tdelibs/rubberband-selection.diff')
-rw-r--r--opensuse/core/tdelibs/rubberband-selection.diff380
1 files changed, 380 insertions, 0 deletions
diff --git a/opensuse/core/tdelibs/rubberband-selection.diff b/opensuse/core/tdelibs/rubberband-selection.diff
new file mode 100644
index 000000000..d2b75f17c
--- /dev/null
+++ b/opensuse/core/tdelibs/rubberband-selection.diff
@@ -0,0 +1,380 @@
+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);