Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" | 5 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bit_cast.h" | 10 #include "base/bit_cast.h" |
| (...skipping 1527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1538 | 1538 |
| 1539 bool PepperPluginInstanceImpl::LoadTextInputInterface() { | 1539 bool PepperPluginInstanceImpl::LoadTextInputInterface() { |
| 1540 if (!plugin_textinput_interface_) { | 1540 if (!plugin_textinput_interface_) { |
| 1541 plugin_textinput_interface_ = static_cast<const PPP_TextInput_Dev*>( | 1541 plugin_textinput_interface_ = static_cast<const PPP_TextInput_Dev*>( |
| 1542 module_->GetPluginInterface(PPP_TEXTINPUT_DEV_INTERFACE)); | 1542 module_->GetPluginInterface(PPP_TEXTINPUT_DEV_INTERFACE)); |
| 1543 } | 1543 } |
| 1544 | 1544 |
| 1545 return !!plugin_textinput_interface_; | 1545 return !!plugin_textinput_interface_; |
| 1546 } | 1546 } |
| 1547 | 1547 |
| 1548 void PepperPluginInstanceImpl::SetLayerTransform(gfx::Transform transform) { | |
| 1549 transform_ = transform; | |
| 1550 DCHECK(transform.IsScaleOrTranslation()); | |
| 1551 | |
| 1552 UpdateLayerTransform(); | |
| 1553 } | |
| 1554 | |
| 1548 void PepperPluginInstanceImpl::UpdateLayerTransform() { | 1555 void PepperPluginInstanceImpl::UpdateLayerTransform() { |
| 1549 if (!bound_graphics_2d_platform_ || !texture_layer_) { | 1556 if (!bound_graphics_2d_platform_ || !texture_layer_) { |
| 1550 // Currently the transform is only applied for Graphics2D. | 1557 // Currently the transform is only applied for Graphics2D. |
| 1551 return; | 1558 return; |
| 1552 } | 1559 } |
| 1553 // Set the UV coordinates of the texture based on the size of the Graphics2D | 1560 // Set the UV coordinates of the texture based on the size of the Graphics2D |
| 1554 // context. By default a texture gets scaled to the size of the layer. But | 1561 // context. By default a texture gets scaled to the size of the layer. But |
| 1555 // if the size of the Graphics2D context doesn't match the size of the plugin | 1562 // if the size of the Graphics2D context doesn't match the size of the plugin |
| 1556 // then it will be incorrectly stretched. This also affects how the plugin | 1563 // then it will be incorrectly stretched. This also affects how the plugin |
| 1557 // is painted when it is being resized. If the Graphics2D contents are | 1564 // is painted when it is being resized. If the Graphics2D contents are |
| 1558 // stretched when a plugin is resized while waiting for a new frame from the | 1565 // stretched when a plugin is resized while waiting for a new frame from the |
| 1559 // plugin to be rendered, then flickering behavior occurs as in | 1566 // plugin to be rendered, then flickering behavior occurs as in |
| 1560 // crbug.com/353453. | 1567 // crbug.com/353453. |
| 1561 gfx::SizeF graphics_2d_size_in_dip = | 1568 gfx::SizeF graphics_2d_size_in_dip = |
| 1562 gfx::ScaleSize(gfx::SizeF(bound_graphics_2d_platform_->Size()), | 1569 gfx::ScaleSize(gfx::SizeF(bound_graphics_2d_platform_->Size()), |
| 1563 bound_graphics_2d_platform_->GetScale()); | 1570 bound_graphics_2d_platform_->GetScale()); |
| 1564 gfx::Size plugin_size_in_dip(view_data_.rect.size.width, | 1571 gfx::Size plugin_size_in_dip(view_data_.rect.size.width, |
| 1565 view_data_.rect.size.height); | 1572 view_data_.rect.size.height); |
| 1566 | 1573 |
| 1574 // Adding the SetLayerTransform from Graphics2D to the UV. | |
| 1575 // If the transform_ is the identity matrix | |
| 1576 // then UV will be top_left (0,0) and | |
| 1577 // lower_right (plugin_size_in_dip.width() / graphics_2d_size_in_dip.width(), | |
| 1578 // plugin_size_in_dip.height() / graphics_2d_size_in_dip.height()) | |
| 1579 gfx::PointF Translate = gfx::PointF(transform_.matrix().getFloat(0,3), | |
| 1580 transform_.matrix().getFloat(1,3)); | |
| 1581 float scale = transform_.matrix().getFloat(0,0); | |
| 1582 gfx::PointF top_left = gfx::PointF(-Translate.x() / scale , | |
| 1583 -Translate.y() / scale); | |
| 1584 gfx::PointF lower_right = gfx::PointF((1 / scale) * plugin_size_in_dip.width() | |
| 1585 -Translate.x() / scale, | |
|
wjmaclean
2016/04/14 20:14:16
I hadn't realized this is the continuation of an e
alessandroa
2016/04/21 15:39:21
Acknowledged.
| |
| 1586 (1 / scale) * plugin_size_in_dip.height( ) | |
|
wjmaclean
2016/04/14 20:14:16
Why is this wrapping around? Is this line longer t
alessandroa
2016/04/21 15:39:21
Yep .. much longer but solved
| |
| 1587 -Translate.y() / scale); | |
| 1567 texture_layer_->SetUV( | 1588 texture_layer_->SetUV( |
| 1568 gfx::PointF(0.0f, 0.0f), | 1589 gfx::PointF(top_left.x() / graphics_2d_size_in_dip.width(), |
| 1590 top_left.y() / graphics_2d_size_in_dip.height()), | |
| 1569 gfx::PointF( | 1591 gfx::PointF( |
| 1570 plugin_size_in_dip.width() / graphics_2d_size_in_dip.width(), | 1592 lower_right.x() / graphics_2d_size_in_dip.width(), |
| 1571 plugin_size_in_dip.height() / graphics_2d_size_in_dip.height())); | 1593 lower_right.y() / graphics_2d_size_in_dip.height())); |
| 1572 } | 1594 } |
| 1573 | 1595 |
| 1574 bool PepperPluginInstanceImpl::PluginHasFocus() const { | 1596 bool PepperPluginInstanceImpl::PluginHasFocus() const { |
| 1575 return flash_fullscreen_ || (has_webkit_focus_ && has_content_area_focus_); | 1597 return flash_fullscreen_ || (has_webkit_focus_ && has_content_area_focus_); |
| 1576 } | 1598 } |
| 1577 | 1599 |
| 1578 void PepperPluginInstanceImpl::SendFocusChangeNotification() { | 1600 void PepperPluginInstanceImpl::SendFocusChangeNotification() { |
| 1579 // Keep a reference on the stack. RenderViewImpl::PepperFocusChanged may | 1601 // Keep a reference on the stack. RenderViewImpl::PepperFocusChanged may |
| 1580 // remove the <embed> from the DOM, which will make the PepperWebPluginImpl | 1602 // remove the <embed> from the DOM, which will make the PepperWebPluginImpl |
| 1581 // drop its reference, usually the last one. This is similar to possible | 1603 // drop its reference, usually the last one. This is similar to possible |
| (...skipping 1742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3324 } | 3346 } |
| 3325 | 3347 |
| 3326 void PepperPluginInstanceImpl::ConvertDIPToViewport(gfx::Rect* rect) const { | 3348 void PepperPluginInstanceImpl::ConvertDIPToViewport(gfx::Rect* rect) const { |
| 3327 rect->set_x(rect->x() / viewport_to_dip_scale_); | 3349 rect->set_x(rect->x() / viewport_to_dip_scale_); |
| 3328 rect->set_y(rect->y() / viewport_to_dip_scale_); | 3350 rect->set_y(rect->y() / viewport_to_dip_scale_); |
| 3329 rect->set_width(rect->width() / viewport_to_dip_scale_); | 3351 rect->set_width(rect->width() / viewport_to_dip_scale_); |
| 3330 rect->set_height(rect->height() / viewport_to_dip_scale_); | 3352 rect->set_height(rect->height() / viewport_to_dip_scale_); |
| 3331 } | 3353 } |
| 3332 | 3354 |
| 3333 } // namespace content | 3355 } // namespace content |
| OLD | NEW |