[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