| Index: components/view_manager/display_manager.cc
|
| diff --git a/components/view_manager/display_manager.cc b/components/view_manager/display_manager.cc
|
| index c0954615ffcf3ee0c53be6b43ad89d652fde96ae..0acc6213ab948911612dcde856668813d13824b0 100644
|
| --- a/components/view_manager/display_manager.cc
|
| +++ b/components/view_manager/display_manager.cc
|
| @@ -5,6 +5,11 @@
|
| #include "components/view_manager/display_manager.h"
|
|
|
| #include "base/numerics/safe_conversions.h"
|
| +#include "cc/output/compositor_frame.h"
|
| +#include "cc/output/delegated_frame_data.h"
|
| +#include "cc/quads/render_pass.h"
|
| +#include "cc/quads/shared_quad_state.h"
|
| +#include "cc/quads/surface_draw_quad.h"
|
| #include "components/view_manager/display_manager_factory.h"
|
| #include "components/view_manager/gles2/gpu_state.h"
|
| #include "components/view_manager/public/interfaces/gpu.mojom.h"
|
| @@ -21,6 +26,7 @@
|
| #include "mojo/converters/surfaces/surfaces_type_converters.h"
|
| #include "mojo/converters/surfaces/surfaces_utils.h"
|
| #include "mojo/converters/transform/transform_type_converters.h"
|
| +#include "third_party/skia/include/core/SkXfermode.h"
|
| #include "ui/events/event.h"
|
| #include "ui/events/event_utils.h"
|
| #include "ui/platform_window/platform_ime_controller.h"
|
| @@ -41,7 +47,7 @@ using mojo::Size;
|
| namespace view_manager {
|
| namespace {
|
|
|
| -void DrawViewTree(mojo::Pass* pass,
|
| +void DrawViewTree(cc::RenderPass* pass,
|
| const ServerView* view,
|
| const gfx::Vector2d& parent_to_root_origin_offset,
|
| float opacity) {
|
| @@ -59,32 +65,25 @@ void DrawViewTree(mojo::Pass* pass,
|
| combined_opacity);
|
| }
|
|
|
| - cc::SurfaceId node_id = view->surface_id();
|
| -
|
| - auto surface_quad_state = mojo::SurfaceQuadState::New();
|
| - surface_quad_state->surface = mojo::SurfaceId::From(node_id);
|
| -
|
| gfx::Transform node_transform;
|
| node_transform.Translate(absolute_bounds.x(), absolute_bounds.y());
|
| + cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState();
|
| + sqs->SetAll(node_transform /* quad_to_target_transform */,
|
| + view->bounds().size() /* layer_bounds */,
|
| + gfx::Rect(view->bounds().size()) /* visible_layer_rect */,
|
| + gfx::Rect(view->bounds().size()) /* clip_rect */,
|
| + false /* is_clipped */,
|
| + view->opacity() /* opacity */,
|
| + SkXfermode::kSrc_Mode,
|
| + 0 /* sorting-context_id */);
|
|
|
| const gfx::Rect bounds_at_origin(view->bounds().size());
|
| - auto surface_quad = mojo::Quad::New();
|
| - surface_quad->material = mojo::Material::MATERIAL_SURFACE_CONTENT;
|
| - surface_quad->rect = Rect::From(bounds_at_origin);
|
| - surface_quad->opaque_rect = Rect::From(bounds_at_origin);
|
| - surface_quad->visible_rect = Rect::From(bounds_at_origin);
|
| - surface_quad->needs_blending = true;
|
| - surface_quad->shared_quad_state_index =
|
| - base::saturated_cast<int32_t>(pass->shared_quad_states.size());
|
| - surface_quad->surface_quad_state = surface_quad_state.Pass();
|
| -
|
| - auto sqs = mojo::CreateDefaultSQS(view->bounds().size());
|
| - sqs->blend_mode = mojo::SK_XFERMODE_kSrcOver_Mode;
|
| - sqs->opacity = combined_opacity;
|
| - sqs->quad_to_target_transform = mojo::Transform::From(node_transform);
|
| -
|
| - pass->quads.push_back(surface_quad.Pass());
|
| - pass->shared_quad_states.push_back(sqs.Pass());
|
| + auto surface_quad =
|
| + pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>();
|
| + surface_quad->SetNew(sqs,
|
| + bounds_at_origin /* rect */,
|
| + bounds_at_origin /* visible_rect */,
|
| + view->surface_id());
|
| }
|
|
|
| float ConvertUIWheelValueToMojoValue(int offset) {
|
| @@ -201,15 +200,21 @@ void DefaultDisplayManager::SetImeVisibility(bool visible) {
|
| void DefaultDisplayManager::Draw() {
|
| if (!delegate_->GetRootView()->visible())
|
| return;
|
| - gfx::Rect rect(metrics_.size_in_pixels.To<gfx::Size>());
|
| - auto pass = mojo::CreateDefaultPass(1, rect);
|
| - pass->damage_rect = Rect::From(dirty_rect_);
|
|
|
| - DrawViewTree(pass.get(), delegate_->GetRootView(), gfx::Vector2d(), 1.0f);
|
| + scoped_ptr<cc::RenderPass> render_pass = cc::RenderPass::Create();
|
| + render_pass->damage_rect = dirty_rect_;
|
| + render_pass->output_rect = gfx::Rect(metrics_.size_in_pixels.To<gfx::Size>());
|
| +
|
| + DrawViewTree(render_pass.get(),
|
| + delegate_->GetRootView(),
|
| + gfx::Vector2d(), 1.0f);
|
| +
|
| + scoped_ptr<cc::DelegatedFrameData> frame_data(new cc::DelegatedFrameData);
|
| + frame_data->device_scale_factor = 1.f;
|
| + frame_data->render_pass_list.push_back(render_pass.Pass());
|
|
|
| - auto frame = mojo::Frame::New();
|
| - frame->passes.push_back(pass.Pass());
|
| - frame->resources.resize(0u);
|
| + scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
|
| + frame->delegated_frame_data = frame_data.Pass();
|
| frame_pending_ = true;
|
| if (top_level_display_client_) {
|
| top_level_display_client_->SubmitFrame(
|
|
|