Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37789761
en ru br
Репозитории ALT
S:3.3.8d-alt16.1
5.1: 3.3.8b-alt7
4.1: 3.3.8b-alt2.qa1
4.0: 3.3.8b-alt0.M40.1
3.0: 3.3.4-alt6
+updates:3.3.4-alt6.3.M30
www.altlinux.org/Changes

Группа :: Система/Библиотеки
Пакет: qt3

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: 0046-qiconview-no-useless-scrollbar.diff
Скачать


qt-bugs@ issue: N46490
bugs.kde.org number: 69589
applied: no
author: Benoit Walter <b.walter@free.fr>
Remove unnecessary scrollbar that may appear.
Test case (using konqueror icon view):
- The first icons are being shown (no scrollbar yet)
- When there is no space left, a vertical scrollbar is needed
- The vertical scrollbar may cover the right edge of the icons
(in the last column) => an horizontal scrollbar is needed :-(
Solution:
When using ScrollBarMode::Auto, prevent Qt from drawing icons on the
scrollbar area (before the scrollbar is shown).
Related to KDE bug #69589
Index: qiconview.cpp
===================================================================
RCS file: /home/kde/qt-copy/src/iconview/qiconview.cpp,v
retrieving revision 1.54
diff -u -3 -p -r1.54 qiconview.cpp
--- src/iconview/qiconview.cpp	2 Mar 2004 12:50:31 -0000	1.54
+++ src/iconview/qiconview.cpp	12 Apr 2004 10:07:28 -0000
@@ -1060,7 +1060,7 @@ void QIconViewItem::setText( const QStri
 
     if ( view ) {
 	if ( QRect( view->contentsX(), view->contentsY(),
-		    view->visibleWidth(), view->visibleHeight() ).
+		    view->visibleWidthSB(), view->visibleHeightSB() ).
 	     intersects( oR ) )
 	    view->repaintContents( oR.x() - 1, oR.y() - 1,
 				   oR.width() + 2, oR.height() + 2, FALSE );
@@ -1104,7 +1104,7 @@ void QIconViewItem::setPixmap( const QPi
 
     if ( view ) {
 	if ( QRect( view->contentsX(), view->contentsY(),
-		    view->visibleWidth(), view->visibleHeight() ).
+		    view->visibleWidthSB(), view->visibleHeightSB() ).
 	     intersects( oR ) )
 	    view->repaintContents( oR.x() - 1, oR.y() - 1,
 				   oR.width() + 2, oR.height() + 2, FALSE );
@@ -1140,7 +1140,7 @@ void QIconViewItem::setPicture( const QP
 
     if ( view ) {
 	if ( QRect( view->contentsX(), view->contentsY(),
-		    view->visibleWidth(), view->visibleHeight() ).
+		    view->visibleWidthSB(), view->visibleHeightSB() ).
 	     intersects( oR ) )
 	    view->repaintContents( oR.x() - 1, oR.y() - 1,
 				   oR.width() + 2, oR.height() + 2, FALSE );
@@ -1200,7 +1200,7 @@ void QIconViewItem::setPixmap( const QPi
 
 	    if ( view ) {
 		if ( QRect( view->contentsX(), view->contentsY(),
-			    view->visibleWidth(), view->visibleHeight() ).
+			    view->visibleWidthSB(), view->visibleHeightSB() ).
 		     intersects( oR ) )
 		    view->repaintContents( oR.x() - 1, oR.y() - 1,
 					   oR.width() + 2, oR.height() + 2, FALSE );
@@ -5448,8 +5448,8 @@ void QIconView::insertInGrid( QIconViewI
 	}
 	item->dirty = FALSE;
     } else {
-	QRegion r( QRect( 0, 0, QMAX( contentsWidth(), visibleWidth() ),
-			  QMAX( contentsHeight(), visibleHeight() ) ) );
+	QRegion r( QRect( 0, 0, QMAX( contentsWidth(), visibleWidthSB() ),
+			  QMAX( contentsHeight(), visibleHeightSB() ) ) );
 
 	QIconViewItem *i = d->firstItem;
 	int y = -1;
@@ -5707,7 +5707,7 @@ QIconViewItem *QIconView::makeRowLayout(
 	    QIconViewItem *item = begin;
 	    for (;;) {
 		x += d->spacing + item->width();
-		if ( x > visibleWidth() && item != begin ) {
+		if ( x > visibleWidthSB() && item != begin ) {
 		    item = item->prev;
 		    break;
 		}
@@ -5732,7 +5732,7 @@ QIconViewItem *QIconView::makeRowLayout(
 		int x;
 		if ( item == begin ) {
 		    if ( reverse )
-			x = visibleWidth() - d->spacing - item->width();
+			x = visibleWidthSB() - d->spacing - item->width();
 		    else
 			x = d->spacing;
 		} else {
@@ -5768,7 +5768,7 @@ QIconViewItem *QIconView::makeRowLayout(
 		    i += r;
 		    x = i * d->rastX + sp * d->spacing;
 		}
-		if ( x > visibleWidth() && item != begin ) {
+		if ( x > visibleWidthSB() && item != begin ) {
 		    item = item->prev;
 		    break;
 		}
@@ -5831,7 +5831,7 @@ QIconViewItem *QIconView::makeRowLayout(
 	    QIconViewItem *item = begin;
 	    for (;;) {
 		y += d->spacing + item->height();
-		if ( y > visibleHeight() && item != begin ) {
+		if ( y > visibleHeightSB() && item != begin ) {
 		    item = item->prev;
 		    break;
 		}
@@ -6378,4 +6378,24 @@ bool QIconView::isRenaming() const
 #endif
 }
 
+int QIconView::visibleWidthSB() const
+{
+    if ( vScrollBarMode() != Auto )
+        return visibleWidth();
+    
+    int offset = verticalScrollBar()->isVisible() ? 0
+        : style().pixelMetric( QStyle::PM_ScrollBarExtent, verticalScrollBar() );
+    return QMAX( 0, visibleWidth() - offset );
+}
+
+int QIconView::visibleHeightSB() const
+{
+    if ( hScrollBarMode() != Auto )
+        return visibleHeight();
+    
+    int offset = horizontalScrollBar()->isVisible() ? 0
+        : style().pixelMetric( QStyle::PM_ScrollBarExtent, horizontalScrollBar() );
+    return QMAX( 0, visibleHeight() - offset );
+}
+        
 #endif // QT_NO_ICONVIEW
Index: qiconview.h
===================================================================
RCS file: /home/kde/qt-copy/src/iconview/qiconview.h,v
retrieving revision 1.35
diff -u -3 -p -r1.35 qiconview.h
--- src/iconview/qiconview.h	16 May 2003 13:02:38 -0000	1.35
+++ src/iconview/qiconview.h	12 Apr 2004 10:07:58 -0000
@@ -496,6 +496,8 @@ private:
 			const QPoint &relativeTo,
 			const QIconViewItem *item ) const;
     QBitmap mask( QPixmap *pix ) const;
+    int visibleWidthSB() const;
+    int visibleHeightSB() const;
 
     QIconViewPrivate *d;
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin