Changeset 96339 in webkit


Ignore:
Timestamp:
Sep 29, 2011 10:35:41 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

[GTK] Dragging a selection does not produce a drag image
https://bugs.webkit.org/show_bug.cgi?id=69064

Patch by Martin Robinson <mrobinson@igalia.com> on 2011-09-29
Reviewed by Andreas Kling.

Moved Chromium's generic implementation of Frame::nodeImage and
Frame::dragImageForSeletion to Frame.cpp and simply excluded via
#ifdefs platforms that do not have their own implementation. Removed
all empty implementations of these functions and Qt's which was
functionally identical.

No new tests. Drag-and-drop drag image functionality changes
are incredibly difficult to test in a non-manual way.

  • CMakeListsEfl.txt: Delist FrameEfl.cpp.
  • GNUmakefile.list.am: Delist FrameGtk.cpp.
  • WebCore.gypi: Delist removed Frame*.cpp.
  • WebCore.pro: Delist FrameQt.cpp.
  • page/Frame.cpp: Moved FrameChromium implementation here.

(WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
(WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
(WebCore::Frame::nodeImage):
(WebCore::Frame::dragImageForSelection):

  • page/chromium/FrameChromium.cpp: Removed.
  • page/efl/FrameEfl.cpp: Removed.
  • page/gtk/FrameGtk.cpp: Removed.
  • page/qt/FrameQt.cpp: Removed.
  • page/wx/FrameWx.cpp: Removed.
  • platform/gtk/ClipboardGtk.cpp:

(WebCore::ClipboardGtk::createDragImage): Call nodeImage to get
the drag image for a node.

Location:
trunk/Source/WebCore
Files:
5 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeListsEfl.txt

    r95998 r96339  
    2121  page/efl/DragControllerEfl.cpp
    2222  page/efl/EventHandlerEfl.cpp
    23   page/efl/FrameEfl.cpp
    2423  platform/Cursor.cpp
    2524  platform/efl/ClipboardEfl.cpp
  • trunk/Source/WebCore/ChangeLog

    r96338 r96339  
     12011-09-29  Martin Robinson  <mrobinson@igalia.com>
     2
     3        [GTK] Dragging a selection does not produce a drag image
     4        https://bugs.webkit.org/show_bug.cgi?id=69064
     5
     6        Reviewed by Andreas Kling.
     7
     8        Moved Chromium's generic implementation of Frame::nodeImage and
     9        Frame::dragImageForSeletion to Frame.cpp and simply excluded via
     10        #ifdefs platforms that do not have their own implementation. Removed
     11        all empty implementations of these functions and Qt's which was
     12        functionally identical.
     13
     14        No new tests. Drag-and-drop drag image functionality changes
     15        are incredibly difficult to test in a non-manual way.
     16
     17        * CMakeListsEfl.txt: Delist FrameEfl.cpp.
     18        * GNUmakefile.list.am: Delist FrameGtk.cpp.
     19        * WebCore.gypi: Delist removed Frame*.cpp.
     20        * WebCore.pro: Delist FrameQt.cpp.
     21        * page/Frame.cpp: Moved FrameChromium implementation here.
     22        (WebCore::ScopedFramePaintingState::ScopedFramePaintingState):
     23        (WebCore::ScopedFramePaintingState::~ScopedFramePaintingState):
     24        (WebCore::Frame::nodeImage):
     25        (WebCore::Frame::dragImageForSelection):
     26        * page/chromium/FrameChromium.cpp: Removed.
     27        * page/efl/FrameEfl.cpp: Removed.
     28        * page/gtk/FrameGtk.cpp: Removed.
     29        * page/qt/FrameQt.cpp: Removed.
     30        * page/wx/FrameWx.cpp: Removed.
     31        * platform/gtk/ClipboardGtk.cpp:
     32        (WebCore::ClipboardGtk::createDragImage): Call nodeImage to get
     33        the drag image for a node.
     34
    1352011-09-29  Noel Gordon  <noel.gordon@gmail.com>
    236
  • trunk/Source/WebCore/GNUmakefile.list.am

    r96299 r96339  
    39553955        Source/WebCore/page/gtk/DragControllerGtk.cpp \
    39563956        Source/WebCore/page/gtk/EventHandlerGtk.cpp \
    3957         Source/WebCore/page/gtk/FrameGtk.cpp \
    39583957        Source/WebCore/platform/cairo/WidgetBackingStore.h \
    39593958        Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r96313 r96339  
    29682968            'page/chromium/DragControllerChromium.cpp',
    29692969            'page/chromium/EventHandlerChromium.cpp',
    2970             'page/chromium/FrameChromium.cpp',
    29712970            'page/efl/DragControllerEfl.cpp',
    29722971            'page/efl/EventHandlerEfl.cpp',
    2973             'page/efl/FrameEfl.cpp',
    29742972            'page/gtk/DragControllerGtk.cpp',
    29752973            'page/gtk/EventHandlerGtk.cpp',
    2976             'page/gtk/FrameGtk.cpp',
    29772974            'page/mac/ChromeMac.mm',
    29782975            'page/mac/DragControllerMac.mm',
     
    29822979            'page/qt/DragControllerQt.cpp',
    29832980            'page/qt/EventHandlerQt.cpp',
    2984             'page/qt/FrameQt.cpp',
    29852981            'page/win/DragControllerWin.cpp',
    29862982            'page/win/EventHandlerWin.cpp',
     
    29922988            'page/wx/DragControllerWx.cpp',
    29932989            'page/wx/EventHandlerWx.cpp',
    2994             'page/wx/FrameWx.cpp',
    29952990            'platform/Arena.cpp',
    29962991            'platform/Arena.h',
  • trunk/Source/WebCore/WebCore.pro

    r96215 r96339  
    25832583    page/qt/DragControllerQt.cpp \
    25842584    page/qt/EventHandlerQt.cpp \
    2585     page/qt/FrameQt.cpp \
    25862585    platform/graphics/qt/TransformationMatrixQt.cpp \
    25872586    platform/graphics/qt/ColorQt.cpp \
  • trunk/Source/WebCore/page/Frame.cpp

    r95715 r96339  
    1010 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
    1111 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
     12 * Copyright (C) 2008 Google Inc.
    1213 *
    1314 * This library is free software; you can redistribute it and/or
     
    5960#include "HTMLTableCellElement.h"
    6061#include "HitTestResult.h"
     62#include "ImageBuffer.h"
    6163#include "InspectorInstrumentation.h"
    6264#include "Logging.h"
     
    10591061}
    10601062
     1063#if !PLATFORM(MAC) && !PLATFORM(WIN) && !PLATFORM(WX)
     1064struct ScopedFramePaintingState {
     1065    ScopedFramePaintingState(Frame* theFrame, RenderObject* theRenderer)
     1066        : frame(theFrame)
     1067        , renderer(theRenderer)
     1068        , paintBehavior(frame->view()->paintBehavior())
     1069        , backgroundColor(frame->view()->baseBackgroundColor())
     1070    {
     1071    }
     1072
     1073    ~ScopedFramePaintingState()
     1074    {
     1075        if (renderer)
     1076            renderer->updateDragState(false);
     1077        frame->view()->setPaintBehavior(paintBehavior);
     1078        frame->view()->setBaseBackgroundColor(backgroundColor);
     1079        frame->view()->setNodeToDraw(0);
     1080    }
     1081
     1082    Frame* frame;
     1083    RenderObject* renderer;
     1084    PaintBehavior paintBehavior;
     1085    Color backgroundColor;
     1086};
     1087
     1088DragImageRef Frame::nodeImage(Node* node)
     1089{
     1090    RenderObject* renderer = node->renderer();
     1091    if (!renderer)
     1092        return 0;
     1093
     1094    const ScopedFramePaintingState state(this, renderer);
     1095
     1096    renderer->updateDragState(true);
     1097    m_view->setPaintBehavior(state.paintBehavior | PaintBehaviorFlattenCompositingLayers);
     1098
     1099    // When generating the drag image for an element, ignore the document background.
     1100    m_view->setBaseBackgroundColor(colorWithOverrideAlpha(Color::white, 1.0));
     1101    m_doc->updateLayout();
     1102    m_view->setNodeToDraw(node); // Enable special sub-tree drawing mode.
     1103
     1104    IntRect topLevelRect;
     1105    IntRect paintingRect = renderer->paintingRootRect(topLevelRect);
     1106
     1107    OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size()));
     1108    if (!buffer)
     1109        return 0;
     1110    buffer->context()->translate(-paintingRect.x(), -paintingRect.y());
     1111    buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY()));
     1112
     1113    m_view->paintContents(buffer->context(), paintingRect);
     1114
     1115    RefPtr<Image> image = buffer->copyImage();
     1116    return createDragImageFromImage(image.get());
     1117}
     1118
     1119DragImageRef Frame::dragImageForSelection()
     1120{
     1121    if (!selection()->isRange())
     1122        return 0;
     1123
     1124    const ScopedFramePaintingState state(this, 0);
     1125    m_view->setPaintBehavior(PaintBehaviorSelectionOnly);
     1126    m_doc->updateLayout();
     1127
     1128    IntRect paintingRect = enclosingIntRect(selection()->bounds());
     1129
     1130    OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size()));
     1131    if (!buffer)
     1132        return 0;
     1133    buffer->context()->translate(-paintingRect.x(), -paintingRect.y());
     1134    buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.maxY()));
     1135
     1136    m_view->paintContents(buffer->context(), paintingRect);
     1137
     1138    RefPtr<Image> image = buffer->copyImage();
     1139    return createDragImageFromImage(image.get());
     1140}
     1141
     1142#endif
     1143
    10611144} // namespace WebCore
  • trunk/Source/WebCore/platform/gtk/ClipboardGtk.cpp

    r92769 r96339  
    260260{
    261261    location = m_dragLoc;
    262     if (!m_dragImage)
    263         return 0;
    264 
    265     return createDragImageFromImage(m_dragImage->image());
     262
     263    if (m_dragImage)
     264        return createDragImageFromImage(m_dragImage->image());
     265    if (m_dragImageElement && m_frame)
     266        return m_frame->nodeImage(m_dragImageElement.get());
     267
     268    return 0; // We do not have enough information to create a drag image, use the default icon.
    266269}
    267270
Note: See TracChangeset for help on using the changeset viewer.