[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    extragear/graphics/gwenview
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2006-10-18 14:08:01
Message-ID: 1161180481.925038.2906.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 596791 by gateau:

Show preview of images when dragging them.


 M  +2 -0      NEWS  
 M  +1 -0      gvcore/Makefile.am  
 A             gvcore/dragpixmapgenerator.cpp   [License: GPL (v2+) (wrong address)]
 A             gvcore/dragpixmapgenerator.h   [License: GPL (v2+) (wrong address)]
 M  +32 -7     gvcore/filethumbnailview.cpp  


--- trunk/extragear/graphics/gwenview/NEWS #596790:596791
@@ -1,4 +1,6 @@
 2006.xx.xx - v1.4.1
+- New features:
+ - Show preview of images when dragging them.
 - Fixes:
  - Fix crash when showing current folder properties from context menu (Bug
    129890)
--- trunk/extragear/graphics/gwenview/gvcore/Makefile.am #596790:596791
@@ -20,6 +20,7 @@
 	thumbnailloadjob.cpp \
 	imageview.cpp \
 	imageviewcontroller.cpp \
+	dragpixmapgenerator.cpp \
 	document.cpp \
 	externaltoolmanager.cpp \
 	externaltoolcontext.cpp \
--- trunk/extragear/graphics/gwenview/gvcore/filethumbnailview.cpp #596790:596791
@@ -45,6 +45,7 @@
 #include "fileviewconfig.h"
 #include "filethumbnailviewitem.h"
 #include "archive.h"
+#include "dragpixmapgenerator.h"
 #include "thumbnailloadjob.h"
 #include "busylevelmanager.h"
 #include "imageloader.h"
@@ -69,6 +70,8 @@
 static const int RIGHT_TEXT_WIDTH=128;
 static const int BOTTOM_MIN_TEXT_WIDTH=96;
 
+// Offset between cursor and dragged images
+static const int DRAG_OFFSET=16;
 
 class ProgressWidget : public QFrame {
 	KProgress* mProgressBar;
@@ -773,11 +776,38 @@
 //
 //--------------------------------------------------------------------------
 void FileThumbnailView::startDrag() {
+	/**
+	 * The pixmap provider for DragPixmapGenerator
+	 */
+	struct PixmapProvider : public DragPixmapProvider<KFileItem*> {
+		PixmapProvider(FileThumbnailView* view)
+		: mView(view) {}
+
+		QPixmap pixmapForItem(KFileItem* fileItem) {
+			FileThumbnailViewItem* iconItem = viewItem(mView, fileItem);
+			Q_ASSERT(iconItem);
+			if (!iconItem) return QPixmap();
+			
+			QPixmap* pix = iconItem->pixmap();
+			Q_ASSERT(pix);
+			if (!pix) return QPixmap();
+			return *pix;
+		}
+		
+		FileThumbnailView* mView;
+	};
+	PixmapProvider provider(this);
+
+
 	KURL::List urls;
 	KFileItemListIterator it(*KFileView::selectedItems());
 
+	DragPixmapGenerator<KFileItem*> generator;
+	generator.setItemPixmapProvider(&provider);
+	
 	for ( ; it.current(); ++it ) {
 		urls.append(it.current()->url());
+		generator.addItem(it.current());
 	}
 
 	if (urls.isEmpty()) {
@@ -786,14 +816,9 @@
 	}
 
 	QDragObject* drag=new KURLDrag(urls, this, 0);
-	QPixmap dragPixmap;
-	if (urls.count()>1) {
-		dragPixmap=SmallIcon("kmultiple");
-	} else {
-		dragPixmap=KFileView::selectedItems()->getFirst()->pixmap(16);
-	}
-	drag->setPixmap( dragPixmap, QPoint(dragPixmap.width()/2, dragPixmap.height()/2) );
+	QPixmap dragPixmap = generator.generate();
 
+	drag->setPixmap( dragPixmap, QPoint(-DRAG_OFFSET, -DRAG_OFFSET));
 	drag->dragCopy();
 }
 
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic