Title: [182175] trunk/Source
Revision
182175
Author
[email protected]
Date
2015-03-31 00:49:54 -0700 (Tue, 31 Mar 2015)

Log Message

[GTK] DnD icon/widget has odd background
https://bugs.webkit.org/show_bug.cgi?id=143217

Reviewed by Martin Robinson.

Source/WebCore:

Remove DragIcon class since it's no longer needed with GTK+3 and
the GTK+2 code there is unused. GTK+ knows what to do with a cairo
surface, I guess we migrated the GTK+2 code to GTK+3 without
realizing that using the surface was enough.

* PlatformGTK.cmake:
* platform/gtk/DragIcon.cpp: Removed.
* platform/gtk/DragIcon.h: Removed.

Source/WebKit2:

Use gtk_drag_set_icon_surface() to set the drag icon image,
instead of DragIcon class.

* UIProcess/API/gtk/WebKitWebView.cpp:
* UIProcess/gtk/DragAndDropHandler.cpp:
(WebKit::DragAndDropHandler::startDrag):
* UIProcess/gtk/DragAndDropHandler.h:

Modified Paths

Removed Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (182174 => 182175)


--- trunk/Source/WebCore/ChangeLog	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/ChangeLog	2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,3 +1,19 @@
+2015-03-31  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] DnD icon/widget has odd background
+        https://bugs.webkit.org/show_bug.cgi?id=143217
+
+        Reviewed by Martin Robinson.
+
+        Remove DragIcon class since it's no longer needed with GTK+3 and
+        the GTK+2 code there is unused. GTK+ knows what to do with a cairo
+        surface, I guess we migrated the GTK+2 code to GTK+3 without
+        realizing that using the surface was enough.
+
+        * PlatformGTK.cmake:
+        * platform/gtk/DragIcon.cpp: Removed.
+        * platform/gtk/DragIcon.h: Removed.
+
 2015-03-30  Alex Christensen  <[email protected]>
 
         Unreviewed build fix after r182168.

Modified: trunk/Source/WebCore/PlatformGTK.cmake (182174 => 182175)


--- trunk/Source/WebCore/PlatformGTK.cmake	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/PlatformGTK.cmake	2015-03-31 07:49:54 UTC (rev 182175)
@@ -213,7 +213,6 @@
     platform/gtk/CursorGtk.cpp
     platform/gtk/DataObjectGtk.cpp
     platform/gtk/DragDataGtk.cpp
-    platform/gtk/DragIcon.cpp
     platform/gtk/DragImageGtk.cpp
     platform/gtk/GRefPtrGtk.cpp
     platform/gtk/GtkUtilities.cpp

Deleted: trunk/Source/WebCore/platform/gtk/DragIcon.cpp (182174 => 182175)


--- trunk/Source/WebCore/platform/gtk/DragIcon.cpp	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/platform/gtk/DragIcon.cpp	2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2011 Igalia S.L.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "DragIcon.h"
-#include "GdkCairoUtilities.h"
-
-#include <gtk/gtk.h>
-
-namespace WebCore {
-
-#ifdef GTK_API_VERSION_2
-static gboolean dragIconWindowDrawEventCallback(GtkWidget*, GdkEventExpose* event, DragIcon* icon)
-{
-    RefPtr<cairo_t> context = adoptRef(gdk_cairo_create(event->window));
-    icon->draw(context.get());
-    return TRUE;
-}
-#else
-static gboolean dragIconWindowDrawEventCallback(GtkWidget*, cairo_t* context, DragIcon* icon)
-{
-    if (!gdk_cairo_get_clip_rectangle(context, 0))
-        return FALSE;
-    icon->draw(context);
-    return TRUE;
-}
-#endif // GTK_API_VERSION_2
-
-DragIcon::DragIcon()
-    : isComposited(gdk_screen_is_composited(gdk_screen_get_default()))
-    , m_window(0)
-{
-    if (!isComposited)
-        return;
-
-    m_window = gtk_window_new(GTK_WINDOW_POPUP);
-#ifdef GTK_API_VERSION_2
-    g_signal_connect(m_window, "expose-event", G_CALLBACK(dragIconWindowDrawEventCallback), this);
-#else
-    g_signal_connect(m_window, "draw", G_CALLBACK(dragIconWindowDrawEventCallback), this);
-#endif
-
-    // This strategy originally comes from Chromium: src/chrome/browser/gtk/tab_contents_drag_source.cc
-    GdkScreen* screen = gtk_widget_get_screen(m_window);
-#ifdef GTK_API_VERSION_2
-    GdkColormap* rgba = gdk_screen_get_rgba_colormap(screen);
-    if (rgba)
-        gtk_widget_set_colormap(m_window, rgba);
-#else
-    GdkVisual* visual = gdk_screen_get_rgba_visual(screen);
-    if (!visual)
-        visual = gdk_screen_get_system_visual(screen);
-    gtk_widget_set_visual(m_window, visual);
-#endif // GTK_API_VERSION_2
-}
-
-DragIcon::~DragIcon()
-{
-    if (m_window)
-        gtk_widget_destroy(m_window);
-}
-
-void DragIcon::draw(cairo_t* context)
-{
-    cairo_rectangle(context, 0, 0,
-                    cairo_image_surface_get_width(m_image.get()),
-                    cairo_image_surface_get_height(m_image.get()));
-    cairo_set_operator(context, CAIRO_OPERATOR_SOURCE);
-    cairo_set_source_surface(context, m_image.get(), 0, 0);
-    cairo_fill(context);
-}
-
-void DragIcon::setImage(cairo_surface_t* image)
-{
-    ASSERT(image);
-    m_image = image;
-    m_imageSize = IntSize(cairo_image_surface_get_width(image), cairo_image_surface_get_height(image));
-    if (isComposited) {
-        gtk_window_resize(GTK_WINDOW(m_window), m_imageSize.width(), m_imageSize.height());
-        return;
-    }
-
-#ifdef GTK_API_VERSION_2
-    m_pixbuf = adoptGRef(cairoSurfaceToGdkPixbuf(image));
-#endif
-}
-
-void DragIcon::useForDrag(GdkDragContext* context)
-{
-    IntPoint hotspot(m_imageSize);
-    hotspot.scale(0.5, 0.5);
-    useForDrag(context, hotspot);
-}
-
-void DragIcon::useForDrag(GdkDragContext* context, const IntPoint& hotspot)
-{
-    if (isComposited) {
-        gtk_drag_set_icon_widget(context, m_window, hotspot.x(), hotspot.y());
-        return;
-    }
-#ifdef GTK_API_VERSION_2
-    gtk_drag_set_icon_pixbuf(context, m_pixbuf.get(), hotspot.x(), hotspot.y());
-#else
-    gtk_drag_set_icon_surface(context, m_image.get());
-#endif
-}
-
-} // namespace WebCore

Deleted: trunk/Source/WebCore/platform/gtk/DragIcon.h (182174 => 182175)


--- trunk/Source/WebCore/platform/gtk/DragIcon.h	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebCore/platform/gtk/DragIcon.h	2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2011 Igalia S.L.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef DragIcon_h
-#define DragIcon_h
-
-#include "IntPoint.h"
-#include <RefPtrCairo.h>
-#include <wtf/gobject/GRefPtr.h>
-
-namespace WebCore {
-
-class DragIcon {
-public:
-    DragIcon();
-    virtual ~DragIcon();
-
-    void draw(cairo_t*);
-    void setImage(cairo_surface_t*);
-    void useForDrag(GdkDragContext*);
-    void useForDrag(GdkDragContext*, const IntPoint& hotspot);
-
-private:
-    bool isComposited;
-    GtkWidget* m_window;
-    RefPtr<cairo_surface_t> m_image;
-    IntSize m_imageSize;
-#ifdef GTK_API_VERSION_2
-    GRefPtr<GdkPixbuf> m_pixbuf;
-#endif
-};
-
-}
-
-#endif // DragIcon_h

Modified: trunk/Source/WebKit2/ChangeLog (182174 => 182175)


--- trunk/Source/WebKit2/ChangeLog	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/ChangeLog	2015-03-31 07:49:54 UTC (rev 182175)
@@ -1,3 +1,18 @@
+2015-03-31  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] DnD icon/widget has odd background
+        https://bugs.webkit.org/show_bug.cgi?id=143217
+
+        Reviewed by Martin Robinson.
+
+        Use gtk_drag_set_icon_surface() to set the drag icon image,
+        instead of DragIcon class.
+
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        * UIProcess/gtk/DragAndDropHandler.cpp:
+        (WebKit::DragAndDropHandler::startDrag):
+        * UIProcess/gtk/DragAndDropHandler.h:
+
 2015-03-30  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r182172.

Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (182174 => 182175)


--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp	2015-03-31 07:49:54 UTC (rev 182175)
@@ -62,7 +62,6 @@
 #include "WebKitWindowPropertiesPrivate.h"
 #include <_javascript_Core/APICast.h>
 #include <WebCore/CertificateInfo.h>
-#include <WebCore/DragIcon.h>
 #include <WebCore/GUniquePtrGtk.h>
 #include <WebCore/GUniquePtrSoup.h>
 #include <WebCore/GtkUtilities.h>

Modified: trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp (182174 => 182175)


--- trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.cpp	2015-03-31 07:49:54 UTC (rev 182175)
@@ -31,7 +31,6 @@
 #include "WebPageProxy.h"
 #include <WebCore/DataObjectGtk.h>
 #include <WebCore/DragData.h>
-#include <WebCore/DragIcon.h>
 #include <WebCore/GRefPtrGtk.h>
 #include <WebCore/GtkUtilities.h>
 #include <WebCore/PasteboardHelper.h>
@@ -121,8 +120,9 @@
 
     if (dragImage) {
         RefPtr<cairo_surface_t> image(dragImage->createCairoSurface());
-        m_dragIcon.setImage(image.get());
-        m_dragIcon.useForDrag(context);
+        // Use the center of the drag image as hotspot.
+        cairo_surface_set_device_offset(image.get(), -cairo_image_surface_get_width(image.get()) / 2, -cairo_image_surface_get_height(image.get()) / 2);
+        gtk_drag_set_icon_surface(context, image.get());
     } else
         gtk_drag_set_icon_default(context);
 }

Modified: trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h (182174 => 182175)


--- trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h	2015-03-31 07:34:11 UTC (rev 182174)
+++ trunk/Source/WebKit2/UIProcess/gtk/DragAndDropHandler.h	2015-03-31 07:49:54 UTC (rev 182175)
@@ -29,7 +29,7 @@
 #if ENABLE(DRAG_SUPPORT)
 
 #include <WebCore/DataObjectGtk.h>
-#include <WebCore/DragIcon.h>
+#include <WebCore/IntPoint.h>
 #include <wtf/HashMap.h>
 #include <wtf/Noncopyable.h>
 
@@ -38,7 +38,6 @@
 
 namespace WebCore {
 class DragData;
-class IntPoint;
 }
 
 namespace WebKit {
@@ -75,7 +74,6 @@
     WebCore::DataObjectGtk* requestDragData(GdkDragContext*, const WebCore::IntPoint& position, unsigned time);
 
     WebPageProxy& m_page;
-    WebCore::DragIcon m_dragIcon;
     HashMap<GdkDragContext*, std::unique_ptr<DroppingContext>> m_droppingContexts;
     HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk>> m_draggingDataObjects;
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to