[PATCH] Add image thumbnail when drag-and-dropping images.
John Tapsell
john at geola.co.uk
Sun Jan 2 15:34:28 GMT 2005
You need to wrap your getenv check with
#ifdef Q_WS_X11
I would recommend defaulting to not showing the picture icon when this is not
defined, as windows has a maximum size, and you'll probably go over that.
Otherwise I like it.
JohnFlux
On Friday 31 December 2004 21:47, Michael Pyne wrote:
> Hi all,
>
> I'm including a patch to set a thumbnail image when dragging an image (that
> doesn't link to something) from KHTML. You can see a screenshot of the
> effect at
> http://grammarian.homelinux.net/~kde-cvs/khtml-drag-drop-screenie.png (51.7
> KB). I've tried to KolourPaint in about where the mouse cursor is since
> ksnapshot wasn't able to get it.
>
> The patch uses the standard "image" mimetype icon if the image isn't
> finished loading yet, or if the image is too small. The image scales the
> image below 300x200 using SmoothScale if necessary, and then applies a fade
> filter to enhance the iCandy-ness. ;)
>
> It may be a good idea to leave out the filter, as it makes khtml depend on
> kdefx (not a horrible problem), and obviously increases the time it takes
> to set the icon (could be problematic). I think the thing that takes the
> longest is actually the smoothScale(), however, so perhaps it would be best
> to use a faster, but less accurate scaling function?
>
> Also, the thumbnail setting code is skipped if DISPLAY doesn't appear to be
> a local machine.
>
> Please let me know what you guys think of the code. There's no need to CC:
> me, as I'm newly subscribed.
>
> Regards,
> - Michael Pyne
>
> The patch follows:
>
> Index: Makefile.am
> ===================================================================
> RCS file: /home/kde/kdelibs/khtml/Makefile.am,v
> retrieving revision 1.163
> diff -u -3 -p -r1.163 Makefile.am
> --- Makefile.am 21 Dec 2004 19:17:24 -0000 1.163
> +++ Makefile.am 31 Dec 2004 21:24:08 -0000
> @@ -54,6 +54,7 @@ libkhtml_la_LIBADD = ./xml/libkhtmlxml.l
> ./rendering/libkhtmlrender.la ./css/libkhtmlcss.la \
> ./misc/libkhtmlmisc.la ecma/libkjs_html.la ./dom/libkhtmldom.la
> $(LIBKJAVA) \
> $(LIB_KPARTS) \
> + $(LIB_KDEFX) \
> $(LIBTHAI) \
> $(top_builddir)/kdeprint/libkdeprint.la \
> $(top_builddir)/kutils/libkutils.la \
> Index: khtml_part.cpp
> ===================================================================
> RCS file: /home/kde/kdelibs/khtml/khtml_part.cpp,v
> retrieving revision 1.1069
> diff -u -3 -p -r1.1069 khtml_part.cpp
> --- khtml_part.cpp 25 Dec 2004 16:36:36 -0000 1.1069
> +++ khtml_part.cpp 31 Dec 2004 21:24:10 -0000
> @@ -60,11 +60,14 @@ using namespace DOM;
> #include <kjs/function.h>
> #include <kjs/interpreter.h>
>
> +#include <kimageeffect.h>
> +
> #include "htmlpageinfo.h"
>
> #include <sys/types.h>
> #include <assert.h>
> #include <unistd.h>
> +#include <stdlib.h>
>
> #include <config.h>
>
> @@ -6026,7 +6029,28 @@ void KHTMLPart::khtmlMouseMoveEvent( kht
> {
> img = static_cast<HTMLImageElementImpl *>(innerNode.handle());
> u =
> KURL( completeURL( khtml::parseURL(img->getAttribute(ATTR_SRC)).string() )
> ); - pix = KMimeType::mimeType("image/png")->pixmap(KIcon::Desktop); +
> char *displayName = getenv ( "DISPLAY" );
> +
> + // Check if the X Server is running locally. I wish I knew a better
> way
> + // to do this. Also make sure the image has actually downloaded.
> + if ( displayName && displayName[0] == ':' && img->complete() )
> + {
> + QImage image = img->currentImage();
> + if ( image.width() > 300 || image.height() > 200 )
> + image = image.smoothScale ( 300, 200, QImage::ScaleMin );
> +
> + // Only use the thumbnail if the image is "large enough", as
> there's + // no reason to thumbnail e.g. a 1x1 invisible gif.
> + if ( image.width() > 6 && image.height() > 6 )
> + {
> + KImageEffect::fade ( image, 0.37, gray );
> + pix = QPixmap ( image );
> + }
> + else
> + pix = KMimeType::mimeType("image/png")->pixmap(KIcon::Desktop);
> + }
> + else
> + pix = KMimeType::mimeType("image/png")->pixmap(KIcon::Desktop);
> }
> else
> {
More information about the kfm-devel
mailing list