OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "chrome/browser/android/vr_shell/vr_shell_gl.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell_gl.h" |
6 | 6 |
7 #include <chrono> | 7 #include <chrono> |
8 #include <limits> | 8 #include <limits> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
598 target_element_ = plane.get(); | 598 target_element_ = plane.get(); |
599 target_x = x; | 599 target_x = x; |
600 target_y = y; | 600 target_y = y; |
601 } | 601 } |
602 | 602 |
603 // Handle input targeting on the content quad, ignoring any other elements. | 603 // Handle input targeting on the content quad, ignoring any other elements. |
604 // Content is treated specially to accomodate scrolling, flings, etc. | 604 // Content is treated specially to accomodate scrolling, flings, etc. |
605 InputTarget input_target = InputTarget::NONE; | 605 InputTarget input_target = InputTarget::NONE; |
606 int pixel_x = 0; | 606 int pixel_x = 0; |
607 int pixel_y = 0; | 607 int pixel_y = 0; |
608 if (target_element_ != nullptr && target_element_->fill == Fill::CONTENT) { | 608 if (target_element_ != nullptr && target_element_->fill() == Fill::CONTENT) { |
609 input_target = InputTarget::CONTENT; | 609 input_target = InputTarget::CONTENT; |
610 gfx::RectF pixel_rect(0, 0, content_tex_css_width_, | 610 gfx::RectF pixel_rect(0, 0, content_tex_css_width_, |
611 content_tex_css_height_); | 611 content_tex_css_height_); |
612 pixel_x = pixel_rect.x() + pixel_rect.width() * target_x; | 612 pixel_x = pixel_rect.x() + pixel_rect.width() * target_x; |
613 pixel_y = pixel_rect.y() + pixel_rect.height() * target_y; | 613 pixel_y = pixel_rect.y() + pixel_rect.height() * target_y; |
614 } | 614 } |
615 SendInputToContent(input_target, pixel_x, pixel_y); | 615 SendInputToContent(input_target, pixel_x, pixel_y); |
616 | 616 |
617 // Handle input targeting on all non-content elements. | 617 // Handle input targeting on all non-content elements. |
618 SendInputToUiElements(target_element_); | 618 SendInputToUiElements(target_element_); |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
728 if (current_input_target_ != InputTarget::NONE) { | 728 if (current_input_target_ != InputTarget::NONE) { |
729 WebInputEvent::Type type = | 729 WebInputEvent::Type type = |
730 new_target ? WebInputEvent::kMouseEnter : WebInputEvent::kMouseMove; | 730 new_target ? WebInputEvent::kMouseEnter : WebInputEvent::kMouseMove; |
731 SendGestureToContent(MakeMouseEvent(type, timestamp, pixel_x, pixel_y)); | 731 SendGestureToContent(MakeMouseEvent(type, timestamp, pixel_x, pixel_y)); |
732 } | 732 } |
733 } | 733 } |
734 | 734 |
735 void VrShellGl::SendInputToUiElements(UiElement* target_element) { | 735 void VrShellGl::SendInputToUiElements(UiElement* target_element) { |
736 if (target_element != previous_target_element_) { | 736 if (target_element != previous_target_element_) { |
737 if (previous_target_element_ && | 737 if (previous_target_element_ && |
738 previous_target_element_->fill != Fill::CONTENT) { | 738 previous_target_element_->fill() != Fill::CONTENT) { |
739 task_runner_->PostTask( | 739 task_runner_->PostTask( |
740 FROM_HERE, base::Bind(&UiElement::OnHoverLeave, | 740 FROM_HERE, base::Bind(&UiElement::OnHoverLeave, |
741 base::Unretained(previous_target_element_))); | 741 base::Unretained(previous_target_element_))); |
742 } | 742 } |
743 if (target_element && target_element->fill != Fill::CONTENT) { | 743 if (target_element && target_element->fill() != Fill::CONTENT) { |
744 task_runner_->PostTask(FROM_HERE, | 744 task_runner_->PostTask(FROM_HERE, |
745 base::Bind(&UiElement::OnHoverEnter, | 745 base::Bind(&UiElement::OnHoverEnter, |
746 base::Unretained(target_element))); | 746 base::Unretained(target_element))); |
747 } | 747 } |
748 click_target_element_ = nullptr; | 748 click_target_element_ = nullptr; |
749 } | 749 } |
750 if (target_element && target_element->fill != Fill::CONTENT) { | 750 if (target_element && target_element->fill() != Fill::CONTENT) { |
751 if (controller_->ButtonDownHappened( | 751 if (controller_->ButtonDownHappened( |
752 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_CLICK)) { | 752 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_CLICK)) { |
753 task_runner_->PostTask(FROM_HERE, | 753 task_runner_->PostTask(FROM_HERE, |
754 base::Bind(&UiElement::OnButtonDown, | 754 base::Bind(&UiElement::OnButtonDown, |
755 base::Unretained(target_element))); | 755 base::Unretained(target_element))); |
756 click_target_element_ = target_element; | 756 click_target_element_ = target_element; |
757 } | 757 } |
758 if (controller_->ButtonUpHappened( | 758 if (controller_->ButtonUpHappened( |
759 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_CLICK)) { | 759 gvr::ControllerButton::GVR_CONTROLLER_BUTTON_CLICK)) { |
760 if (click_target_element_ == target_element) { | 760 if (click_target_element_ == target_element) { |
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 } | 1000 } |
1001 } | 1001 } |
1002 } | 1002 } |
1003 | 1003 |
1004 void VrShellGl::DrawElements(const vr::Mat4f& view_proj_matrix, | 1004 void VrShellGl::DrawElements(const vr::Mat4f& view_proj_matrix, |
1005 const std::vector<const UiElement*>& elements) { | 1005 const std::vector<const UiElement*>& elements) { |
1006 for (const auto* rect : elements) { | 1006 for (const auto* rect : elements) { |
1007 vr::Mat4f transform; | 1007 vr::Mat4f transform; |
1008 vr::MatrixMul(view_proj_matrix, rect->TransformMatrix(), &transform); | 1008 vr::MatrixMul(view_proj_matrix, rect->TransformMatrix(), &transform); |
1009 | 1009 |
1010 switch (rect->fill) { | 1010 switch (rect->fill()) { |
1011 case Fill::OPAQUE_GRADIENT: { | 1011 case Fill::OPAQUE_GRADIENT: { |
1012 vr_shell_renderer_->GetGradientQuadRenderer()->Draw( | 1012 vr_shell_renderer_->GetGradientQuadRenderer()->Draw( |
1013 transform, rect->edge_color, rect->center_color, | 1013 transform, rect->edge_color(), rect->center_color(), |
1014 rect->computed_opacity); | 1014 rect->computed_opacity()); |
1015 break; | 1015 break; |
1016 } | 1016 } |
1017 case Fill::GRID_GRADIENT: { | 1017 case Fill::GRID_GRADIENT: { |
1018 vr_shell_renderer_->GetGradientGridRenderer()->Draw( | 1018 vr_shell_renderer_->GetGradientGridRenderer()->Draw( |
1019 transform, rect->edge_color, rect->center_color, | 1019 transform, rect->edge_color(), rect->center_color(), |
1020 rect->gridline_count, rect->computed_opacity); | 1020 rect->gridline_count(), rect->computed_opacity()); |
1021 break; | 1021 break; |
1022 } | 1022 } |
1023 case Fill::CONTENT: { | 1023 case Fill::CONTENT: { |
1024 gfx::RectF copy_rect(0, 0, 1, 1); | 1024 gfx::RectF copy_rect(0, 0, 1, 1); |
1025 vr_shell_renderer_->GetExternalTexturedQuadRenderer()->Draw( | 1025 vr_shell_renderer_->GetExternalTexturedQuadRenderer()->Draw( |
1026 content_texture_id_, transform, copy_rect, rect->computed_opacity); | 1026 content_texture_id_, transform, copy_rect, |
| 1027 rect->computed_opacity()); |
1027 break; | 1028 break; |
1028 } | 1029 } |
1029 case Fill::SELF: { | 1030 case Fill::SELF: { |
1030 rect->Render(vr_shell_renderer_.get(), transform); | 1031 rect->Render(vr_shell_renderer_.get(), transform); |
1031 break; | 1032 break; |
1032 } | 1033 } |
1033 default: | 1034 default: |
1034 break; | 1035 break; |
1035 } | 1036 } |
1036 } | 1037 } |
(...skipping 15 matching lines...) Expand all Loading... |
1052 float distance = | 1053 float distance = |
1053 std::fabs(vr::MatrixVectorMul(view_matrix, element_position).z()); | 1054 std::fabs(vr::MatrixVectorMul(view_matrix, element_position).z()); |
1054 zOrderedElementPairs.push_back(std::make_pair(distance, element)); | 1055 zOrderedElementPairs.push_back(std::make_pair(distance, element)); |
1055 } | 1056 } |
1056 | 1057 |
1057 // Sort elements primarily based on their draw phase (lower draw phase first) | 1058 // Sort elements primarily based on their draw phase (lower draw phase first) |
1058 // and secondarily based on their distance (larger distance first). | 1059 // and secondarily based on their distance (larger distance first). |
1059 std::sort( | 1060 std::sort( |
1060 zOrderedElementPairs.begin(), zOrderedElementPairs.end(), | 1061 zOrderedElementPairs.begin(), zOrderedElementPairs.end(), |
1061 [](const DistanceElementPair& first, const DistanceElementPair& second) { | 1062 [](const DistanceElementPair& first, const DistanceElementPair& second) { |
1062 if (first.second->draw_phase != second.second->draw_phase) { | 1063 if (first.second->draw_phase() != second.second->draw_phase()) { |
1063 return first.second->draw_phase < second.second->draw_phase; | 1064 return first.second->draw_phase() < second.second->draw_phase(); |
1064 } else { | 1065 } else { |
1065 return first.first > second.first; | 1066 return first.first > second.first; |
1066 } | 1067 } |
1067 }); | 1068 }); |
1068 | 1069 |
1069 std::vector<const UiElement*> zOrderedElements; | 1070 std::vector<const UiElement*> zOrderedElements; |
1070 zOrderedElements.reserve(elements.size()); | 1071 zOrderedElements.reserve(elements.size()); |
1071 for (auto distanceElementPair : zOrderedElementPairs) { | 1072 for (auto distanceElementPair : zOrderedElementPairs) { |
1072 zOrderedElements.push_back(distanceElementPair.second); | 1073 zOrderedElements.push_back(distanceElementPair.second); |
1073 } | 1074 } |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1336 // This assumes that the initial webvr_surface_size_ was set to the | 1337 // This assumes that the initial webvr_surface_size_ was set to the |
1337 // appropriate recommended render resolution as the default size during | 1338 // appropriate recommended render resolution as the default size during |
1338 // InitializeGl. Revisit if the initialization order changes. | 1339 // InitializeGl. Revisit if the initialization order changes. |
1339 device::mojom::VRDisplayInfoPtr info = | 1340 device::mojom::VRDisplayInfoPtr info = |
1340 device::GvrDelegate::CreateVRDisplayInfo(gvr_api_.get(), | 1341 device::GvrDelegate::CreateVRDisplayInfo(gvr_api_.get(), |
1341 webvr_surface_size_, device_id); | 1342 webvr_surface_size_, device_id); |
1342 browser_->RunVRDisplayInfoCallback(callback, &info); | 1343 browser_->RunVRDisplayInfoCallback(callback, &info); |
1343 } | 1344 } |
1344 | 1345 |
1345 } // namespace vr_shell | 1346 } // namespace vr_shell |
OLD | NEW |