Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(218)

Side by Side Diff: Source/web/WebPluginContainerImpl.cpp

Issue 26936002: Remove Widget's dependency upon its own inheritor aka ScrollView. This was nasty from an OO design… (Closed) Base URL: https://chromium.googlesource.com/chromium/blink@master
Patch Set: Fix for clang compile error Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/web/WebPluginContainerImpl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « Source/web/WebPluginContainerImpl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698