Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index 870b65d89ba7b123085028c34359d4afbf122131..e55ba64e9976e1196c51137615819687d5a9227b 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -38,6 +38,7 @@ |
#include "cc/quads/render_pass_draw_quad.h" |
#include "cc/quads/shared_quad_state.h" |
#include "cc/quads/solid_color_draw_quad.h" |
+#include "cc/quads/texture_draw_quad.h" |
#include "cc/resources/memory_history.h" |
#include "cc/resources/picture_layer_tiling.h" |
#include "cc/resources/prioritized_resource_manager.h" |
@@ -194,6 +195,7 @@ LayerTreeHostImpl::LayerTreeHostImpl( |
last_sent_memory_use_bytes_(0), |
zero_budget_(false), |
device_scale_factor_(1.f), |
+ overhang_ui_resource_id_(0), |
overdraw_bottom_height_(0.f), |
external_stencil_test_enabled_(false), |
animation_registrar_(AnimationRegistrar::Create()), |
@@ -525,6 +527,8 @@ static void AppendQuadsForRenderSurfaceLayer( |
} |
static void AppendQuadsToFillScreen( |
+ ResourceProvider::ResourceId resource_id, |
+ gfx::SizeF resource_scaled_size, |
RenderPass* target_render_pass, |
LayerImpl* root_layer, |
SkColor screen_background_color, |
@@ -573,11 +577,31 @@ static void AppendQuadsToFillScreen( |
// no perspective, so mapping is sufficient (as opposed to projecting). |
gfx::Rect layer_rect = |
MathUtil::MapClippedRect(transform_to_layer_space, fill_rects.rect()); |
- // Skip the quad culler and just append the quads directly to avoid |
- // occlusion checks. |
- scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
- quad->SetNew(shared_quad_state, layer_rect, screen_background_color, false); |
- quad_culler.Append(quad.PassAs<DrawQuad>(), &append_quads_data); |
+ if (resource_id) { |
+ scoped_ptr<TextureDrawQuad> tex_quad = TextureDrawQuad::Create(); |
+ const float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f}; |
+ tex_quad->SetNew( |
+ shared_quad_state, |
+ layer_rect, |
+ layer_rect, |
+ resource_id, |
+ false, |
+ gfx::PointF(layer_rect.x() / resource_scaled_size.width(), |
+ layer_rect.y() / resource_scaled_size.height()), |
+ gfx::PointF(layer_rect.right() / resource_scaled_size.width(), |
+ layer_rect.bottom() / resource_scaled_size.height()), |
+ screen_background_color, |
+ vertex_opacity, |
+ false); |
+ quad_culler.Append(tex_quad.PassAs<DrawQuad>(), &append_quads_data); |
+ } else { |
+ // Skip the quad culler and just append the quads directly to avoid |
+ // occlusion checks. |
+ scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
+ quad->SetNew( |
+ shared_quad_state, layer_rect, screen_background_color, false); |
+ quad_culler.Append(quad.PassAs<DrawQuad>(), &append_quads_data); |
+ } |
} |
} |
@@ -789,7 +813,10 @@ bool LayerTreeHostImpl::CalculateRenderPasses(FrameData* frame) { |
if (!active_tree_->has_transparent_background()) { |
frame->render_passes.back()->has_transparent_background = false; |
- AppendQuadsToFillScreen(frame->render_passes.back(), |
+ AppendQuadsToFillScreen(ResourceIdForUIResource(overhang_ui_resource_id_), |
+ gfx::ScaleSize(overhang_ui_resource_size_, |
+ device_scale_factor_), |
+ frame->render_passes.back(), |
active_tree_->root_layer(), |
active_tree_->background_color(), |
occlusion_tracker); |
@@ -1792,6 +1819,13 @@ void LayerTreeHostImpl::SetOverdrawBottomHeight(float overdraw_bottom_height) { |
SetFullRootLayerDamage(); |
} |
+void LayerTreeHostImpl::SetOverhangUIResource( |
+ UIResourceId overhang_ui_resource_id, |
+ gfx::Size overhang_ui_resource_size) { |
+ overhang_ui_resource_id_ = overhang_ui_resource_id; |
+ overhang_ui_resource_size_ = overhang_ui_resource_size; |
+} |
+ |
void LayerTreeHostImpl::SetDeviceScaleFactor(float device_scale_factor) { |
if (device_scale_factor == device_scale_factor_) |
return; |