| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 if (!parent()) | 117 if (!parent()) |
| 118 return; | 118 return; |
| 119 | 119 |
| 120 // Don't paint anything if the plugin doesn't intersect the damage rect. | 120 // Don't paint anything if the plugin doesn't intersect the damage rect. |
| 121 if (!frameRect().intersects(damageRect)) | 121 if (!frameRect().intersects(damageRect)) |
| 122 return; | 122 return; |
| 123 | 123 |
| 124 gc->save(); | 124 gc->save(); |
| 125 | 125 |
| 126 ASSERT(parent()->isFrameView()); | 126 ASSERT(parent()->isFrameView()); |
| 127 ScrollView* view = parent(); | 127 ScrollView* view = toScrollView(parent()); |
| 128 | 128 |
| 129 // The plugin is positioned in window coordinates, so it needs to be painted | 129 // The plugin is positioned in window coordinates, so it needs to be painted |
| 130 // in window coordinates. | 130 // in window coordinates. |
| 131 IntPoint origin = view->contentsToWindow(IntPoint(0, 0)); | 131 IntPoint origin = view->contentsToWindow(IntPoint(0, 0)); |
| 132 gc->translate(static_cast<float>(-origin.x()), static_cast<float>(-origin.y(
))); | 132 gc->translate(static_cast<float>(-origin.x()), static_cast<float>(-origin.y(
))); |
| 133 | 133 |
| 134 WebCanvas* canvas = gc->canvas(); | 134 WebCanvas* canvas = gc->canvas(); |
| 135 | 135 |
| 136 IntRect windowRect = view->contentsToWindow(damageRect); | 136 IntRect windowRect = view->contentsToWindow(damageRect); |
| 137 m_webPlugin->paint(canvas, windowRect); | 137 m_webPlugin->paint(canvas, windowRect); |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 239 if (isParentVisible() == parentVisible) | 239 if (isParentVisible() == parentVisible) |
| 240 return; // No change. | 240 return; // No change. |
| 241 | 241 |
| 242 Widget::setParentVisible(parentVisible); | 242 Widget::setParentVisible(parentVisible); |
| 243 if (!isSelfVisible()) | 243 if (!isSelfVisible()) |
| 244 return; // This widget has explicitely been marked as not visible. | 244 return; // This widget has explicitely been marked as not visible. |
| 245 | 245 |
| 246 m_webPlugin->updateVisibility(isVisible()); | 246 m_webPlugin->updateVisibility(isVisible()); |
| 247 } | 247 } |
| 248 | 248 |
| 249 void WebPluginContainerImpl::setParent(ScrollView* view) | 249 void WebPluginContainerImpl::setParent(Widget* widget) |
| 250 { | 250 { |
| 251 // We override this function so that if the plugin is windowed, we can call | 251 // We override this function so that if the plugin is windowed, we can call |
| 252 // NPP_SetWindow at the first possible moment. This ensures that | 252 // NPP_SetWindow at the first possible moment. This ensures that |
| 253 // NPP_SetWindow is called before the manual load data is sent to a plugin. | 253 // NPP_SetWindow is called before the manual load data is sent to a plugin. |
| 254 // If this order is reversed, Flash won't load videos. | 254 // If this order is reversed, Flash won't load videos. |
| 255 | 255 |
| 256 Widget::setParent(view); | 256 Widget::setParent(widget); |
| 257 if (view) | 257 if (widget) |
| 258 reportGeometry(); | 258 reportGeometry(); |
| 259 } | 259 } |
| 260 | 260 |
| 261 void WebPluginContainerImpl::setPlugin(WebPlugin* plugin) | 261 void WebPluginContainerImpl::setPlugin(WebPlugin* plugin) |
| 262 { | 262 { |
| 263 if (plugin != m_webPlugin) { | 263 if (plugin != m_webPlugin) { |
| 264 m_element->resetInstance(); | 264 m_element->resetInstance(); |
| 265 m_webPlugin = plugin; | 265 m_webPlugin = plugin; |
| 266 } | 266 } |
| 267 } | 267 } |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 if (Page* page = m_element->document().page()) { | 516 if (Page* page = m_element->document().page()) { |
| 517 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { | 517 if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordina
tor()) { |
| 518 if (parent() && parent()->isFrameView()) | 518 if (parent() && parent()->isFrameView()) |
| 519 scrollingCoordinator->frameViewLayoutUpdated(toFrameView(parent(
))); | 519 scrollingCoordinator->frameViewLayoutUpdated(toFrameView(parent(
))); |
| 520 } | 520 } |
| 521 } | 521 } |
| 522 } | 522 } |
| 523 | 523 |
| 524 WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) | 524 WebPoint WebPluginContainerImpl::windowToLocalPoint(const WebPoint& point) |
| 525 { | 525 { |
| 526 ScrollView* view = parent(); | 526 ScrollView* view = toScrollView(parent()); |
| 527 if (!view) | 527 if (!view) |
| 528 return point; | 528 return point; |
| 529 WebPoint windowPoint = view->windowToContents(point); | 529 WebPoint windowPoint = view->windowToContents(point); |
| 530 return roundedIntPoint(m_element->renderer()->absoluteToLocal(LayoutPoint(wi
ndowPoint), UseTransforms)); | 530 return roundedIntPoint(m_element->renderer()->absoluteToLocal(LayoutPoint(wi
ndowPoint), UseTransforms)); |
| 531 } | 531 } |
| 532 | 532 |
| 533 WebPoint WebPluginContainerImpl::localToWindowPoint(const WebPoint& point) | 533 WebPoint WebPluginContainerImpl::localToWindowPoint(const WebPoint& point) |
| 534 { | 534 { |
| 535 ScrollView* view = parent(); | 535 ScrollView* view = toScrollView(parent()); |
| 536 if (!view) | 536 if (!view) |
| 537 return point; | 537 return point; |
| 538 IntPoint absolutePoint = roundedIntPoint(m_element->renderer()->localToAbsol
ute(LayoutPoint(point), UseTransforms)); | 538 IntPoint absolutePoint = roundedIntPoint(m_element->renderer()->localToAbsol
ute(LayoutPoint(point), UseTransforms)); |
| 539 return view->contentsToWindow(absolutePoint); | 539 return view->contentsToWindow(absolutePoint); |
| 540 } | 540 } |
| 541 | 541 |
| 542 void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response
) | 542 void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response
) |
| 543 { | 543 { |
| 544 // Make sure that the plugin receives window geometry before data, or else | 544 // Make sure that the plugin receives window geometry before data, or else |
| 545 // plugins misbehave. | 545 // plugins misbehave. |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 currentPage->focusController().setFocusedElement(m_element, &containingF
rame); | 859 currentPage->focusController().setFocusedElement(m_element, &containingF
rame); |
| 860 else | 860 else |
| 861 containingFrame.document()->setFocusedElement(m_element); | 861 containingFrame.document()->setFocusedElement(m_element); |
| 862 } | 862 } |
| 863 | 863 |
| 864 void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect, | 864 void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect, |
| 865 IntRect& windowRect, | 865 IntRect& windowRect, |
| 866 IntRect& clipRect, | 866 IntRect& clipRect, |
| 867 Vector<IntRect>& cutOutRects) | 867 Vector<IntRect>& cutOutRects) |
| 868 { | 868 { |
| 869 windowRect = parent()->contentsToWindow(frameRect); | 869 windowRect = toScrollView(parent())->contentsToWindow(frameRect); |
| 870 | 870 |
| 871 // Calculate a clip-rect so that we don't overlap the scrollbars, etc. | 871 // Calculate a clip-rect so that we don't overlap the scrollbars, etc. |
| 872 clipRect = windowClipRect(); | 872 clipRect = windowClipRect(); |
| 873 clipRect.move(-windowRect.x(), -windowRect.y()); | 873 clipRect.move(-windowRect.x(), -windowRect.y()); |
| 874 | 874 |
| 875 getPluginOcclusions(m_element, this->parent(), frameRect, cutOutRects); | 875 getPluginOcclusions(m_element, this->parent(), frameRect, cutOutRects); |
| 876 // Convert to the plugin position. | 876 // Convert to the plugin position. |
| 877 for (size_t i = 0; i < cutOutRects.size(); i++) | 877 for (size_t i = 0; i < cutOutRects.size(); i++) |
| 878 cutOutRects[i].move(-frameRect.x(), -frameRect.y()); | 878 cutOutRects[i].move(-frameRect.x(), -frameRect.y()); |
| 879 } | 879 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 891 // Take our element and get the clip rect from the enclosing layer and | 891 // Take our element and get the clip rect from the enclosing layer and |
| 892 // frame view. | 892 // frame view. |
| 893 clipRect.intersect( | 893 clipRect.intersect( |
| 894 m_element->document().view()->windowClipRectForFrameOwner(m_element,
true)); | 894 m_element->document().view()->windowClipRectForFrameOwner(m_element,
true)); |
| 895 } | 895 } |
| 896 | 896 |
| 897 return clipRect; | 897 return clipRect; |
| 898 } | 898 } |
| 899 | 899 |
| 900 } // namespace WebKit | 900 } // namespace WebKit |
| OLD | NEW |