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 UpdateLayerTransform(); | |
| 1551 } | |
| 1552 | |
| 1548 void PepperPluginInstanceImpl::UpdateLayerTransform() { | 1553 void PepperPluginInstanceImpl::UpdateLayerTransform() { |
| 1549 if (!bound_graphics_2d_platform_ || !texture_layer_) { | 1554 if (!bound_graphics_2d_platform_ || !texture_layer_) { |
| 1550 // Currently the transform is only applied for Graphics2D. | 1555 // Currently the transform is only applied for Graphics2D. |
| 1551 return; | 1556 return; |
| 1552 } | 1557 } |
| 1553 // Set the UV coordinates of the texture based on the size of the Graphics2D | 1558 // 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 | 1559 // 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 | 1560 // 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 | 1561 // 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 | 1562 // 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 | 1563 // 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 | 1564 // plugin to be rendered, then flickering behavior occurs as in |
| 1560 // crbug.com/353453. | 1565 // crbug.com/353453. |
| 1561 gfx::SizeF graphics_2d_size_in_dip = | 1566 gfx::SizeF graphics_2d_size_in_dip = |
| 1562 gfx::ScaleSize(gfx::SizeF(bound_graphics_2d_platform_->Size()), | 1567 gfx::ScaleSize(gfx::SizeF(bound_graphics_2d_platform_->Size()), |
| 1563 bound_graphics_2d_platform_->GetScale()); | 1568 bound_graphics_2d_platform_->GetScale()); |
| 1564 gfx::Size plugin_size_in_dip(view_data_.rect.size.width, | 1569 gfx::Size plugin_size_in_dip(view_data_.rect.size.width, |
| 1565 view_data_.rect.size.height); | 1570 view_data_.rect.size.height); |
| 1566 | 1571 |
| 1572 // Adding the SetLayerTransform from Graphics2D to the UV. | |
| 1573 // If the transform_ is te identity matrix | |
|
wjmaclean
2016/04/13 14:47:19
the
alessandroa
2016/04/21 15:39:21
Done.
| |
| 1574 // then UV will be top_left (0,0) and | |
| 1575 // lower_right (plugin_size_in_dip.width() / graphics_2d_size_in_dip.width(), | |
| 1576 // plugin_size_in_dip.height() / graphics_2d_size_in_dip.height()) | |
| 1577 gfx::PointF Translate = gfx::PointF(transform_.matrix().getFloat(0,3), | |
|
wjmaclean
2016/04/13 14:47:19
Add a comment to warn the reader here that we're a
alessandroa
2016/04/21 15:39:21
Nice one :)
| |
| 1578 transform_.matrix().getFloat(1,3)); | |
| 1579 float scale = transform_.matrix().getFloat(0,0); | |
| 1580 gfx::PointF top_left = gfx::PointF(-1 * Translate.x() / scale , | |
|
wjmaclean
2016/04/13 14:47:18
-Translate.x() ?
alessandroa
2016/04/21 15:39:21
Done.
| |
| 1581 -1 * Translate.y() / scale); | |
| 1582 gfx::PointF lower_right = gfx::PointF((1 / scale) * plugin_size_in_dip.width() | |
| 1583 - 1 * Translate.x() / scale, | |
|
wjmaclean
2016/04/13 14:47:18
Ditto. Also, even if you are using -1, you shouldn
alessandroa
2016/04/21 15:39:21
Acknowledged.
| |
| 1584 (1 / scale) * plugin_size_in_dip.height() | |
| 1585 - 1 * Translate.y() / scale); | |
| 1567 texture_layer_->SetUV( | 1586 texture_layer_->SetUV( |
| 1568 gfx::PointF(0.0f, 0.0f), | 1587 gfx::PointF(top_left.x() / graphics_2d_size_in_dip.width(), |
| 1588 top_left.y() / graphics_2d_size_in_dip.height()), | |
| 1569 gfx::PointF( | 1589 gfx::PointF( |
| 1570 plugin_size_in_dip.width() / graphics_2d_size_in_dip.width(), | 1590 lower_right.x() / graphics_2d_size_in_dip.width(), |
| 1571 plugin_size_in_dip.height() / graphics_2d_size_in_dip.height())); | 1591 lower_right.y() / graphics_2d_size_in_dip.height())); |
| 1572 } | 1592 } |
| 1573 | 1593 |
| 1574 bool PepperPluginInstanceImpl::PluginHasFocus() const { | 1594 bool PepperPluginInstanceImpl::PluginHasFocus() const { |
| 1575 return flash_fullscreen_ || (has_webkit_focus_ && has_content_area_focus_); | 1595 return flash_fullscreen_ || (has_webkit_focus_ && has_content_area_focus_); |
| 1576 } | 1596 } |
| 1577 | 1597 |
| 1578 void PepperPluginInstanceImpl::SendFocusChangeNotification() { | 1598 void PepperPluginInstanceImpl::SendFocusChangeNotification() { |
| 1579 // Keep a reference on the stack. RenderViewImpl::PepperFocusChanged may | 1599 // Keep a reference on the stack. RenderViewImpl::PepperFocusChanged may |
| 1580 // remove the <embed> from the DOM, which will make the PepperWebPluginImpl | 1600 // remove the <embed> from the DOM, which will make the PepperWebPluginImpl |
| 1581 // drop its reference, usually the last one. This is similar to possible | 1601 // 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 } | 3344 } |
| 3325 | 3345 |
| 3326 void PepperPluginInstanceImpl::ConvertDIPToViewport(gfx::Rect* rect) const { | 3346 void PepperPluginInstanceImpl::ConvertDIPToViewport(gfx::Rect* rect) const { |
| 3327 rect->set_x(rect->x() / viewport_to_dip_scale_); | 3347 rect->set_x(rect->x() / viewport_to_dip_scale_); |
| 3328 rect->set_y(rect->y() / viewport_to_dip_scale_); | 3348 rect->set_y(rect->y() / viewport_to_dip_scale_); |
| 3329 rect->set_width(rect->width() / viewport_to_dip_scale_); | 3349 rect->set_width(rect->width() / viewport_to_dip_scale_); |
| 3330 rect->set_height(rect->height() / viewport_to_dip_scale_); | 3350 rect->set_height(rect->height() / viewport_to_dip_scale_); |
| 3331 } | 3351 } |
| 3332 | 3352 |
| 3333 } // namespace content | 3353 } // namespace content |
| OLD | NEW |