Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(114)

Side by Side Diff: chrome/browser/android/vr_shell/vr_shell_gl.cc

Issue 2856023003: Make UiElement a class (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_gl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_gl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698