| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/mus/ws/platform_display.h" | 5 #include "components/mus/ws/platform_display.h" |
| 6 | 6 |
| 7 #include "base/numerics/safe_conversions.h" | 7 #include "base/numerics/safe_conversions.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "cc/ipc/quads.mojom.h" | 9 #include "cc/ipc/quads.mojom.h" |
| 10 #include "cc/output/compositor_frame.h" | 10 #include "cc/output/compositor_frame.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 if (!window->visible()) | 58 if (!window->visible()) |
| 59 return; | 59 return; |
| 60 | 60 |
| 61 ServerWindowSurface* default_surface = | 61 ServerWindowSurface* default_surface = |
| 62 window->surface_manager() ? window->surface_manager()->GetDefaultSurface() | 62 window->surface_manager() ? window->surface_manager()->GetDefaultSurface() |
| 63 : nullptr; | 63 : nullptr; |
| 64 | 64 |
| 65 const gfx::Rect absolute_bounds = | 65 const gfx::Rect absolute_bounds = |
| 66 window->bounds() + parent_to_root_origin_offset; | 66 window->bounds() + parent_to_root_origin_offset; |
| 67 std::vector<ServerWindow*> children(window->GetChildren()); | 67 std::vector<ServerWindow*> children(window->GetChildren()); |
| 68 // TODO(rjkroege, fsamuel): Make sure we're handling alpha correctly. | |
| 69 const float combined_opacity = opacity * window->opacity(); | 68 const float combined_opacity = opacity * window->opacity(); |
| 70 for (auto it = children.rbegin(); it != children.rend(); ++it) { | 69 for (auto it = children.rbegin(); it != children.rend(); ++it) { |
| 71 DrawWindowTree(pass, *it, absolute_bounds.OffsetFromOrigin(), | 70 DrawWindowTree(pass, *it, absolute_bounds.OffsetFromOrigin(), |
| 72 combined_opacity); | 71 combined_opacity); |
| 73 } | 72 } |
| 74 | 73 |
| 75 if (!window->surface_manager() || !window->surface_manager()->ShouldDraw()) | 74 if (!window->surface_manager() || !window->surface_manager()->ShouldDraw()) |
| 76 return; | 75 return; |
| 77 | 76 |
| 78 ServerWindowSurface* underlay_surface = | 77 ServerWindowSurface* underlay_surface = |
| 79 window->surface_manager()->GetUnderlaySurface(); | 78 window->surface_manager()->GetUnderlaySurface(); |
| 80 if (!default_surface && !underlay_surface) | 79 if (!default_surface && !underlay_surface) |
| 81 return; | 80 return; |
| 82 | 81 |
| 83 if (default_surface) { | 82 if (default_surface) { |
| 84 gfx::Transform quad_to_target_transform; | 83 gfx::Transform quad_to_target_transform; |
| 85 quad_to_target_transform.Translate(absolute_bounds.x(), | 84 quad_to_target_transform.Translate(absolute_bounds.x(), |
| 86 absolute_bounds.y()); | 85 absolute_bounds.y()); |
| 87 | 86 |
| 88 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 87 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
| 89 | 88 |
| 90 const gfx::Rect bounds_at_origin(window->bounds().size()); | 89 const gfx::Rect bounds_at_origin(window->bounds().size()); |
| 91 // TODO(fsamuel): These clipping and visible rects are incorrect. They need | 90 // TODO(fsamuel): These clipping and visible rects are incorrect. They need |
| 92 // to be populated from CompositorFrame structs. | 91 // to be populated from CompositorFrame structs. |
| 93 sqs->SetAll(quad_to_target_transform, | 92 sqs->SetAll(quad_to_target_transform, |
| 94 bounds_at_origin.size() /* layer_bounds */, | 93 bounds_at_origin.size() /* layer_bounds */, |
| 95 bounds_at_origin /* visible_layer_bounds */, | 94 bounds_at_origin /* visible_layer_bounds */, |
| 96 bounds_at_origin /* clip_rect */, false /* is_clipped */, | 95 bounds_at_origin /* clip_rect */, false /* is_clipped */, |
| 97 window->opacity(), SkXfermode::kSrcOver_Mode, | 96 combined_opacity, SkXfermode::kSrcOver_Mode, |
| 98 0 /* sorting-context_id */); | 97 0 /* sorting-context_id */); |
| 99 auto quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); | 98 auto quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); |
| 100 quad->SetAll(sqs, bounds_at_origin /* rect */, | 99 quad->SetAll(sqs, bounds_at_origin /* rect */, |
| 101 gfx::Rect() /* opaque_rect */, | 100 gfx::Rect() /* opaque_rect */, |
| 102 bounds_at_origin /* visible_rect */, true /* needs_blending*/, | 101 bounds_at_origin /* visible_rect */, true /* needs_blending*/, |
| 103 default_surface->id()); | 102 default_surface->id()); |
| 104 } | 103 } |
| 105 if (underlay_surface) { | 104 if (underlay_surface) { |
| 106 const gfx::Rect underlay_absolute_bounds = | 105 const gfx::Rect underlay_absolute_bounds = |
| 107 absolute_bounds - window->underlay_offset(); | 106 absolute_bounds - window->underlay_offset(); |
| 108 gfx::Transform quad_to_target_transform; | 107 gfx::Transform quad_to_target_transform; |
| 109 quad_to_target_transform.Translate(underlay_absolute_bounds.x(), | 108 quad_to_target_transform.Translate(underlay_absolute_bounds.x(), |
| 110 underlay_absolute_bounds.y()); | 109 underlay_absolute_bounds.y()); |
| 111 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); | 110 cc::SharedQuadState* sqs = pass->CreateAndAppendSharedQuadState(); |
| 112 const gfx::Rect bounds_at_origin( | 111 const gfx::Rect bounds_at_origin( |
| 113 underlay_surface->last_submitted_frame_size()); | 112 underlay_surface->last_submitted_frame_size()); |
| 114 sqs->SetAll(quad_to_target_transform, | 113 sqs->SetAll(quad_to_target_transform, |
| 115 bounds_at_origin.size() /* layer_bounds */, | 114 bounds_at_origin.size() /* layer_bounds */, |
| 116 bounds_at_origin /* visible_layer_bounds */, | 115 bounds_at_origin /* visible_layer_bounds */, |
| 117 bounds_at_origin /* clip_rect */, false /* is_clipped */, | 116 bounds_at_origin /* clip_rect */, false /* is_clipped */, |
| 118 window->opacity(), SkXfermode::kSrcOver_Mode, | 117 combined_opacity, SkXfermode::kSrcOver_Mode, |
| 119 0 /* sorting-context_id */); | 118 0 /* sorting-context_id */); |
| 120 | 119 |
| 121 auto quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); | 120 auto quad = pass->CreateAndAppendDrawQuad<cc::SurfaceDrawQuad>(); |
| 122 quad->SetAll(sqs, bounds_at_origin /* rect */, | 121 quad->SetAll(sqs, bounds_at_origin /* rect */, |
| 123 gfx::Rect() /* opaque_rect */, | 122 gfx::Rect() /* opaque_rect */, |
| 124 bounds_at_origin /* visible_rect */, true /* needs_blending*/, | 123 bounds_at_origin /* visible_rect */, true /* needs_blending*/, |
| 125 underlay_surface->id()); | 124 underlay_surface->id()); |
| 126 } | 125 } |
| 127 } | 126 } |
| 128 | 127 |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 409 | 408 |
| 410 void DefaultPlatformDisplay::RequestCopyOfOutput( | 409 void DefaultPlatformDisplay::RequestCopyOfOutput( |
| 411 std::unique_ptr<cc::CopyOutputRequest> output_request) { | 410 std::unique_ptr<cc::CopyOutputRequest> output_request) { |
| 412 if (display_compositor_) | 411 if (display_compositor_) |
| 413 display_compositor_->RequestCopyOfOutput(std::move(output_request)); | 412 display_compositor_->RequestCopyOfOutput(std::move(output_request)); |
| 414 } | 413 } |
| 415 | 414 |
| 416 } // namespace ws | 415 } // namespace ws |
| 417 | 416 |
| 418 } // namespace mus | 417 } // namespace mus |
| OLD | NEW |