OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> | 2 * Copyright (C) 1998, 1999 Torben Weis <weis@kde.org> |
3 * 1999 Lars Knoll <knoll@kde.org> | 3 * 1999 Lars Knoll <knoll@kde.org> |
4 * 1999 Antti Koivisto <koivisto@kde.org> | 4 * 1999 Antti Koivisto <koivisto@kde.org> |
5 * 2000 Simon Hausmann <hausmann@kde.org> | 5 * 2000 Simon Hausmann <hausmann@kde.org> |
6 * 2000 Stefan Schimanski <1Stein@gmx.de> | 6 * 2000 Stefan Schimanski <1Stein@gmx.de> |
7 * 2001 George Staikos <staikos@kde.org> | 7 * 2001 George Staikos <staikos@kde.org> |
8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 8 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> | 9 * Copyright (C) 2005 Alexey Proskuryakov <ap@nypop.com> |
10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 10 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1042 for (const Frame* frame = this; frame; frame = frame->tree()->traverseNext()
) { | 1042 for (const Frame* frame = this; frame; frame = frame->tree()->traverseNext()
) { |
1043 if (frame->document()) | 1043 if (frame->document()) |
1044 count += frame->document()->touchEventHandlerCount(); | 1044 count += frame->document()->touchEventHandlerCount(); |
1045 } | 1045 } |
1046 | 1046 |
1047 m_page->chrome()->client()->numTouchEventHandlersChanged(count); | 1047 m_page->chrome()->client()->numTouchEventHandlersChanged(count); |
1048 } | 1048 } |
1049 | 1049 |
1050 #if !PLATFORM(MAC) && !PLATFORM(WIN) | 1050 #if !PLATFORM(MAC) && !PLATFORM(WIN) |
1051 struct ScopedFramePaintingState { | 1051 struct ScopedFramePaintingState { |
1052 ScopedFramePaintingState(Frame* theFrame, RenderObject* theRenderer) | 1052 ScopedFramePaintingState(Frame* frame, Node* node) |
1053 : frame(theFrame) | 1053 : frame(frame) |
1054 , renderer(theRenderer) | 1054 , node(node) |
1055 , paintBehavior(frame->view()->paintBehavior()) | 1055 , paintBehavior(frame->view()->paintBehavior()) |
1056 , backgroundColor(frame->view()->baseBackgroundColor()) | 1056 , backgroundColor(frame->view()->baseBackgroundColor()) |
1057 { | 1057 { |
| 1058 ASSERT(!node || node->renderer()); |
| 1059 if (node) |
| 1060 node->renderer()->updateDragState(true); |
1058 } | 1061 } |
1059 | 1062 |
1060 ~ScopedFramePaintingState() | 1063 ~ScopedFramePaintingState() |
1061 { | 1064 { |
1062 if (renderer) | 1065 if (node && node->renderer()) |
1063 renderer->updateDragState(false); | 1066 node->renderer()->updateDragState(false); |
1064 frame->view()->setPaintBehavior(paintBehavior); | 1067 frame->view()->setPaintBehavior(paintBehavior); |
1065 frame->view()->setBaseBackgroundColor(backgroundColor); | 1068 frame->view()->setBaseBackgroundColor(backgroundColor); |
1066 frame->view()->setNodeToDraw(0); | 1069 frame->view()->setNodeToDraw(0); |
1067 } | 1070 } |
1068 | 1071 |
1069 Frame* frame; | 1072 Frame* frame; |
1070 RenderObject* renderer; | 1073 Node* node; |
1071 PaintBehavior paintBehavior; | 1074 PaintBehavior paintBehavior; |
1072 Color backgroundColor; | 1075 Color backgroundColor; |
1073 }; | 1076 }; |
1074 | 1077 |
1075 DragImageRef Frame::nodeImage(Node* node) | 1078 DragImageRef Frame::nodeImage(Node* node) |
1076 { | 1079 { |
1077 RenderObject* renderer = node->renderer(); | 1080 if (!node->renderer()) |
1078 if (!renderer) | |
1079 return 0; | 1081 return 0; |
1080 | 1082 |
1081 const ScopedFramePaintingState state(this, renderer); | 1083 const ScopedFramePaintingState state(this, node); |
1082 | 1084 |
1083 renderer->updateDragState(true); | |
1084 m_view->setPaintBehavior(state.paintBehavior | PaintBehaviorFlattenCompositi
ngLayers); | 1085 m_view->setPaintBehavior(state.paintBehavior | PaintBehaviorFlattenCompositi
ngLayers); |
1085 | 1086 |
1086 // When generating the drag image for an element, ignore the document backgr
ound. | 1087 // When generating the drag image for an element, ignore the document backgr
ound. |
1087 m_view->setBaseBackgroundColor(colorWithOverrideAlpha(Color::white, 1.0)); | 1088 m_view->setBaseBackgroundColor(colorWithOverrideAlpha(Color::white, 1.0)); |
1088 m_doc->updateLayout(); | 1089 m_doc->updateLayout(); |
1089 m_view->setNodeToDraw(node); // Enable special sub-tree drawing mode. | 1090 m_view->setNodeToDraw(node); // Enable special sub-tree drawing mode. |
1090 | 1091 |
| 1092 // Document::updateLayout may have blown away the original RenderObject. |
| 1093 RenderObject* renderer = node->renderer(); |
| 1094 if (!renderer) |
| 1095 return 0; |
| 1096 |
1091 LayoutRect topLevelRect; | 1097 LayoutRect topLevelRect; |
1092 IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLev
elRect)); | 1098 IntRect paintingRect = pixelSnappedIntRect(renderer->paintingRootRect(topLev
elRect)); |
1093 | 1099 |
1094 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), 1, Color
SpaceDeviceRGB)); | 1100 OwnPtr<ImageBuffer> buffer(ImageBuffer::create(paintingRect.size(), 1, Color
SpaceDeviceRGB)); |
1095 if (!buffer) | 1101 if (!buffer) |
1096 return 0; | 1102 return 0; |
1097 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); | 1103 buffer->context()->translate(-paintingRect.x(), -paintingRect.y()); |
1098 buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.ma
xY())); | 1104 buffer->context()->clip(FloatRect(0, 0, paintingRect.maxX(), paintingRect.ma
xY())); |
1099 | 1105 |
1100 m_view->paintContents(buffer->context(), paintingRect); | 1106 m_view->paintContents(buffer->context(), paintingRect); |
(...skipping 21 matching lines...) Expand all Loading... |
1122 | 1128 |
1123 m_view->paintContents(buffer->context(), paintingRect); | 1129 m_view->paintContents(buffer->context(), paintingRect); |
1124 | 1130 |
1125 RefPtr<Image> image = buffer->copyImage(); | 1131 RefPtr<Image> image = buffer->copyImage(); |
1126 return createDragImageFromImage(image.get()); | 1132 return createDragImageFromImage(image.get()); |
1127 } | 1133 } |
1128 | 1134 |
1129 #endif | 1135 #endif |
1130 | 1136 |
1131 } // namespace WebCore | 1137 } // namespace WebCore |
OLD | NEW |