Commit 6cd1c82f authored by Aldo Culquicondor's avatar Aldo Culquicondor Committed by Commit Bot

VR: Move ButtonState and Handedness to ControllerModel

The models are the means by which the UI share its state with other
components. PlatformController should remain unknown to the UI.

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:linux_vr;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel
Change-Id: I48a917b2e144843173102494fe1b764cd30883f4
Reviewed-on: https://chromium-review.googlesource.com/1177894Reviewed-by: default avatarIan Vollick <vollick@chromium.org>
Commit-Queue: Aldo Culquicondor <acondor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583794}
parent d30507ca
......@@ -55,22 +55,22 @@ ControllerModel GvrControllerDelegate::GetModel(const RenderInfo& render_info) {
ControllerModel controller_model;
controller_->GetTransform(&controller_model.transform);
controller_model.touchpad_button_state = PlatformController::ButtonState::kUp;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kUp;
DCHECK(!(controller_->ButtonUpHappened(PlatformController::kButtonSelect) &&
controller_->ButtonDownHappened(PlatformController::kButtonSelect)))
<< "Cannot handle a button down and up event within one frame.";
if (controller_->ButtonState(gvr::kControllerButtonClick)) {
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
ControllerModel::ButtonState::kDown;
}
controller_model.app_button_state =
controller_->ButtonState(gvr::kControllerButtonApp)
? PlatformController::ButtonState::kDown
: PlatformController::ButtonState::kUp;
? ControllerModel::ButtonState::kDown
: ControllerModel::ButtonState::kUp;
controller_model.home_button_state =
controller_->ButtonState(gvr::kControllerButtonHome)
? PlatformController::ButtonState::kDown
: PlatformController::ButtonState::kUp;
? ControllerModel::ButtonState::kDown
: ControllerModel::ButtonState::kUp;
controller_model.opacity = controller_->GetOpacity();
controller_model.laser_direction = controller_direction;
controller_model.laser_origin = controller_->GetPointerStart();
......@@ -121,7 +121,8 @@ GvrControllerDelegate::GetInputSourceState() {
// Set handedness.
state->description->handedness =
controller_->GetHandedness() == PlatformController::kRightHanded
controller_->GetHandedness() ==
ControllerModel::Handedness::kRightHanded
? device::mojom::XRHandedness::RIGHT
: device::mojom::XRHandedness::LEFT;
......
......@@ -153,10 +153,10 @@ base::TimeTicks VrController::GetLastButtonTimestamp() const {
return last_button_timestamp_;
}
PlatformController::Handedness VrController::GetHandedness() const {
ControllerModel::Handedness VrController::GetHandedness() const {
return handedness_ == GVR_CONTROLLER_RIGHT_HANDED
? PlatformController::kRightHanded
: PlatformController::kLeftHanded;
? ControllerModel::kRightHanded
: ControllerModel::kLeftHanded;
}
bool VrController::GetRecentered() const {
......
......@@ -80,7 +80,7 @@ class VrController : public PlatformController {
base::TimeTicks GetLastOrientationTimestamp() const override;
base::TimeTicks GetLastTouchTimestamp() const override;
base::TimeTicks GetLastButtonTimestamp() const override;
PlatformController::Handedness GetHandedness() const override;
ControllerModel::Handedness GetHandedness() const override;
bool GetRecentered() const override;
int GetBatteryLevel() const override;
......
......@@ -224,6 +224,7 @@ component("vr_common") {
"fps_meter.h",
"gesture_detector.cc",
"gesture_detector.h",
"platform_controller.h",
"render_loop.cc",
"render_loop.h",
"render_loop_browser_interface.h",
......@@ -325,7 +326,6 @@ source_set("vr_base") {
"model/toolbar_state.h",
"model/ui_mode.h",
"model/web_vr_model.h",
"platform_controller.h",
"platform_input_handler.h",
"platform_ui_input_delegate.cc",
"platform_ui_input_delegate.h",
......
......@@ -6,7 +6,6 @@
#include "base/callback_helpers.h"
#include "base/time/time.h"
#include "chrome/browser/vr/platform_controller.h"
#include "chrome/browser/vr/platform_input_handler.h"
namespace vr {
......
......@@ -57,23 +57,23 @@ void ControllerDelegateForTesting::QueueControllerActionForTesting(
case VrControllerTestAction::kClick:
// Add in the button down action.
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
ControllerModel::ButtonState::kDown;
controller_model_queue_.push(controller_model);
// Add in the button up action.
controller_model.touchpad_button_state =
PlatformController::ButtonState::kUp;
ControllerModel::ButtonState::kUp;
controller_model_queue_.push(controller_model);
break;
case VrControllerTestAction::kHover:
FALLTHROUGH;
case VrControllerTestAction::kClickUp:
controller_model.touchpad_button_state =
PlatformController::ButtonState::kUp;
ControllerModel::ButtonState::kUp;
controller_model_queue_.push(controller_model);
break;
case VrControllerTestAction::kClickDown:
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
ControllerModel::ButtonState::kDown;
controller_model_queue_.push(controller_model);
break;
case VrControllerTestAction::kMove:
......
......@@ -73,8 +73,8 @@ class MockPlatformController : public PlatformController {
return base::TimeTicks();
}
vr::PlatformController::Handedness GetHandedness() const override {
return vr::PlatformController::kRightHanded;
vr::ControllerModel::Handedness GetHandedness() const override {
return vr::ControllerModel::kRightHanded;
}
bool GetRecentered() const override { return false; }
......
......@@ -6,7 +6,6 @@
#define CHROME_BROWSER_VR_MODEL_CONTROLLER_MODEL_H_
#include "base/time/time.h"
#include "chrome/browser/vr/platform_controller.h"
#include "chrome/browser/vr/vr_export.h"
#include "ui/gfx/geometry/point3_f.h"
#include "ui/gfx/transform.h"
......@@ -18,6 +17,16 @@ namespace vr {
// UiInputManager (for generating gestures), and by the UI for rendering the
// controller.
struct VR_EXPORT ControllerModel {
enum ButtonState {
kUp,
kDown,
};
enum Handedness {
kRightHanded,
kLeftHanded,
};
ControllerModel();
ControllerModel(const ControllerModel& other);
~ControllerModel();
......@@ -25,18 +34,15 @@ struct VR_EXPORT ControllerModel {
gfx::Transform transform;
gfx::Vector3dF laser_direction;
gfx::Point3F laser_origin;
PlatformController::ButtonState touchpad_button_state =
PlatformController::ButtonState::kUp;
PlatformController::ButtonState app_button_state =
PlatformController::ButtonState::kUp;
PlatformController::ButtonState home_button_state =
PlatformController::ButtonState::kUp;
ButtonState touchpad_button_state = kUp;
ButtonState app_button_state = kUp;
ButtonState home_button_state = kUp;
bool touching_touchpad = false;
gfx::PointF touchpad_touch_position;
float opacity = 1.0f;
bool resting_in_viewport = false;
bool recentered = false;
PlatformController::Handedness handedness = PlatformController::kRightHanded;
Handedness handedness = kRightHanded;
base::TimeTicks last_orientation_timestamp;
base::TimeTicks last_button_timestamp;
int battery_level = 0;
......
......@@ -6,6 +6,7 @@
#define CHROME_BROWSER_VR_PLATFORM_CONTROLLER_H_
#include "base/time/time.h"
#include "chrome/browser/vr/model/controller_model.h"
#include "chrome/browser/vr/vr_export.h"
namespace gfx {
......@@ -30,16 +31,6 @@ class VR_EXPORT PlatformController {
kButtonTypeNumber,
};
enum ButtonState {
kUp,
kDown,
};
enum Handedness {
kRightHanded,
kLeftHanded,
};
virtual ~PlatformController() {}
virtual bool IsButtonDown(ButtonType type) const = 0;
......@@ -50,7 +41,7 @@ class VR_EXPORT PlatformController {
virtual base::TimeTicks GetLastOrientationTimestamp() const = 0;
virtual base::TimeTicks GetLastTouchTimestamp() const = 0;
virtual base::TimeTicks GetLastButtonTimestamp() const = 0;
virtual Handedness GetHandedness() const = 0;
virtual ControllerModel::Handedness GetHandedness() const = 0;
virtual bool GetRecentered() const = 0;
virtual int GetBatteryLevel() const = 0;
};
......
......@@ -6,7 +6,6 @@
#include "base/callback_helpers.h"
#include "base/time/time.h"
#include "chrome/browser/vr/platform_controller.h"
#include "chrome/browser/vr/platform_input_handler.h"
namespace vr {
......
......@@ -63,7 +63,7 @@ void UiPixelTest::MakeUi(const UiInitialState& ui_initial_state,
void UiPixelTest::DrawUi(const gfx::Vector3dF& laser_direction,
const gfx::Point3F& laser_origin,
PlatformController::ButtonState button_state,
ControllerModel::ButtonState button_state,
float controller_opacity,
const gfx::Transform& controller_transform,
const gfx::Transform& view_matrix,
......@@ -74,8 +74,8 @@ void UiPixelTest::DrawUi(const gfx::Vector3dF& laser_direction,
controller_model.opacity = controller_opacity;
controller_model.laser_origin = laser_origin;
controller_model.touchpad_button_state = button_state;
controller_model.app_button_state = PlatformController::ButtonState::kUp;
controller_model.home_button_state = PlatformController::ButtonState::kUp;
controller_model.app_button_state = ControllerModel::ButtonState::kUp;
controller_model.home_button_state = ControllerModel::ButtonState::kUp;
RenderInfo render_info;
render_info.head_pose = view_matrix;
render_info.left_eye_model.view_matrix = view_matrix;
......
......@@ -30,7 +30,7 @@ class UiPixelTest : public testing::Test {
const ToolbarState& toolbar_state);
void DrawUi(const gfx::Vector3dF& laser_direction,
const gfx::Point3F& laser_origin,
PlatformController::ButtonState button_state,
ControllerModel::ButtonState button_state,
float controller_opacity,
const gfx::Transform& controller_transform,
const gfx::Transform& view_matrix,
......
......@@ -251,14 +251,13 @@ void UiTest::ClickElement(UiElement* element) {
controller_model.laser_direction = direction;
controller_model.laser_origin = origin;
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kDown;
ui_instance_->input_manager()->HandleInput(current_time_, render_info,
controller_model, &reticle_model,
&input_event_list);
OnBeginFrame();
controller_model.touchpad_button_state = PlatformController::ButtonState::kUp;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kUp;
ui_instance_->input_manager()->HandleInput(current_time_, render_info,
controller_model, &reticle_model,
&input_event_list);
......
......@@ -228,9 +228,9 @@ void VrTestContext::HandleInput(ui::Event* event) {
}
break;
case ui::DomCode::US_H:
handedness_ = handedness_ == PlatformController::kRightHanded
? PlatformController::kLeftHanded
: PlatformController::kRightHanded;
handedness_ = handedness_ == ControllerModel::kRightHanded
? ControllerModel::kLeftHanded
: ControllerModel::kRightHanded;
break;
case ui::DomCode::US_I:
incognito_ = !incognito_;
......@@ -415,8 +415,8 @@ ControllerModel VrTestContext::UpdateController(const RenderInfo& render_info,
ControllerModel controller_model;
controller_model.touchpad_button_state =
touchpad_pressed_ ? PlatformController::ButtonState::kDown
: PlatformController::ButtonState::kUp;
touchpad_pressed_ ? ControllerModel::ButtonState::kDown
: ControllerModel::ButtonState::kUp;
controller_model.touchpad_touch_position = touchpad_touch_position_;
controller_model.touching_touchpad = touching_touchpad_;
controller_model.recentered = recentered_;
......@@ -796,7 +796,7 @@ RenderInfo VrTestContext::GetRenderInfo() const {
gfx::Point3F VrTestContext::LaserOrigin() const {
gfx::Point3F origin = kDefaultLaserOrigin;
if (handedness_ == PlatformController::kLeftHanded) {
if (handedness_ == ControllerModel::kLeftHanded) {
origin.set_x(-origin.x());
}
return origin;
......
......@@ -120,7 +120,7 @@ class VrTestContext : public vr::UiBrowserInterface {
CompositorDelegate* compositor_delegate_;
TestKeyboardDelegate* keyboard_delegate_;
PlatformController::Handedness handedness_ = PlatformController::kRightHanded;
ControllerModel::Handedness handedness_ = ControllerModel::kRightHanded;
std::queue<InputEventList> input_event_lists_;
......
......@@ -16,7 +16,6 @@
#include "chrome/browser/vr/assets_load_status.h"
#include "chrome/browser/vr/browser_ui_interface.h"
#include "chrome/browser/vr/model/tab_model.h"
#include "chrome/browser/vr/platform_controller.h"
#include "chrome/browser/vr/ui_element_renderer.h"
#include "chrome/browser/vr/ui_initial_state.h"
#include "chrome/browser/vr/ui_interface.h"
......
......@@ -11,7 +11,6 @@
#include "base/memory/ptr_util.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/input_event.h"
#include "chrome/browser/vr/model/controller_model.h"
#include "chrome/browser/vr/model/reticle_model.h"
#include "chrome/browser/vr/model/text_input_info.h"
#include "chrome/browser/vr/render_info.h"
......@@ -155,10 +154,9 @@ void UiInputManager::SendFlingCancel(InputEventList* input_event_list,
fling_target_id_ = 0;
}
void UiInputManager::SendScrollEnd(
InputEventList* input_event_list,
const gfx::PointF& target_point,
PlatformController::ButtonState button_state) {
void UiInputManager::SendScrollEnd(InputEventList* input_event_list,
const gfx::PointF& target_point,
ControllerModel::ButtonState button_state) {
if (!in_scroll_) {
return;
}
......@@ -166,7 +164,7 @@ void UiInputManager::SendScrollEnd(
UiElement* element = scene_->GetUiElementById(input_capture_element_id_);
if (previous_button_state_ != button_state &&
button_state == PlatformController::ButtonState::kDown) {
button_state == ControllerModel::ButtonState::kDown) {
DCHECK_GT(input_event_list->size(), 0LU);
DCHECK_EQ(input_event_list->front()->type(), InputEvent::kScrollEnd);
}
......@@ -245,10 +243,10 @@ void UiInputManager::SendHoverMove(UiElement* target,
}
void UiInputManager::SendButtonUp(const gfx::PointF& target_point,
PlatformController::ButtonState button_state,
ControllerModel::ButtonState button_state,
base::TimeTicks timestamp) {
if (!in_click_ || previous_button_state_ == button_state ||
button_state != PlatformController::ButtonState::kUp) {
button_state != ControllerModel::ButtonState::kUp) {
return;
}
in_click_ = false;
......@@ -265,13 +263,12 @@ void UiInputManager::SendButtonUp(const gfx::PointF& target_point,
input_capture_element_id_ = 0;
}
void UiInputManager::SendButtonDown(
UiElement* target,
const gfx::PointF& target_point,
PlatformController::ButtonState button_state,
base::TimeTicks timestamp) {
void UiInputManager::SendButtonDown(UiElement* target,
const gfx::PointF& target_point,
ControllerModel::ButtonState button_state,
base::TimeTicks timestamp) {
if (previous_button_state_ == button_state ||
button_state != PlatformController::ButtonState::kDown) {
button_state != ControllerModel::ButtonState::kDown) {
return;
}
in_click_ = true;
......
......@@ -9,7 +9,7 @@
#include <vector>
#include "base/time/time.h"
#include "chrome/browser/vr/platform_controller.h"
#include "chrome/browser/vr/model/controller_model.h"
#include "chrome/browser/vr/vr_ui_export.h"
#include "ui/gfx/geometry/point3_f.h"
#include "ui/gfx/geometry/point_f.h"
......@@ -21,7 +21,6 @@ namespace vr {
class UiScene;
class UiElement;
class InputEvent;
struct ControllerModel;
struct RenderInfo;
struct ReticleModel;
struct EditedText;
......@@ -71,7 +70,7 @@ class VR_UI_EXPORT UiInputManager {
const gfx::PointF& target_point);
void SendScrollEnd(InputEventList* input_event_list,
const gfx::PointF& target_point,
PlatformController::ButtonState button_state);
ControllerModel::ButtonState button_state);
void SendScrollBegin(UiElement* target,
InputEventList* input_event_list,
const gfx::PointF& target_point);
......@@ -87,11 +86,11 @@ class VR_UI_EXPORT UiInputManager {
base::TimeTicks timestamp);
void SendButtonUp(const gfx::PointF& target_point,
PlatformController::ButtonState button_state,
ControllerModel::ButtonState button_state,
base::TimeTicks timestamp);
void SendButtonDown(UiElement* target,
const gfx::PointF& target_point,
PlatformController::ButtonState button_state,
ControllerModel::ButtonState button_state,
base::TimeTicks timestamp);
void SendTouchMove(const gfx::PointF& target_point,
base::TimeTicks timestamp);
......@@ -121,8 +120,8 @@ class VR_UI_EXPORT UiInputManager {
HitTestStrategy hit_test_strategy_ = HitTestStrategy::PROJECT_TO_WORLD_ORIGIN;
PlatformController::ButtonState previous_button_state_ =
PlatformController::ButtonState::kUp;
ControllerModel::ButtonState previous_button_state_ =
ControllerModel::ButtonState::kUp;
base::TimeTicks last_controller_outside_viewport_time_;
bool controller_resting_in_viewport_ = false;
......
......@@ -35,10 +35,9 @@ namespace vr {
namespace {
constexpr PlatformController::ButtonState kUp =
PlatformController::ButtonState::kUp;
constexpr PlatformController::ButtonState kDown =
PlatformController::ButtonState::kDown;
constexpr ControllerModel::ButtonState kUp = ControllerModel::ButtonState::kUp;
constexpr ControllerModel::ButtonState kDown =
ControllerModel::ButtonState::kDown;
constexpr gfx::Size kWindowSize = {1280, 720};
......@@ -118,13 +117,13 @@ class UiInputManagerTest : public testing::Test {
}
void HandleInput(const gfx::Vector3dF& laser_direction,
PlatformController::ButtonState button_state) {
ControllerModel::ButtonState button_state) {
HandleInput({0, 0, 0}, laser_direction, button_state);
}
void HandleInput(const gfx::Point3F& laser_origin,
const gfx::Vector3dF& laser_direction,
PlatformController::ButtonState button_state) {
ControllerModel::ButtonState button_state) {
RenderInfo render_info;
controller_model_.laser_direction = laser_direction;
controller_model_.laser_origin = laser_origin;
......@@ -504,8 +503,7 @@ TEST_F(UiInputManagerContentTest, NoMouseMovesDuringClick) {
ControllerModel controller_model;
controller_model.laser_direction = content_quad_center - origin;
controller_model.laser_origin = origin;
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kDown;
ReticleModel reticle_model;
InputEventList input_event_list;
input_manager_->HandleInput(MsToTicks(1), RenderInfo(), controller_model,
......@@ -536,8 +534,7 @@ TEST_F(UiInputManagerContentTest, AudioPermissionPromptHitTesting) {
ControllerModel controller_model;
controller_model.laser_direction = url_bar_center - origin;
controller_model.laser_origin = origin;
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kDown;
ReticleModel reticle_model;
InputEventList input_event_list;
input_manager_->HandleInput(MsToTicks(1), RenderInfo(), controller_model,
......@@ -563,8 +560,7 @@ TEST_F(UiInputManagerContentTest, TreeVsZOrder) {
ControllerModel controller_model;
controller_model.laser_direction = content_quad_center - origin;
controller_model.laser_origin = origin;
controller_model.touchpad_button_state =
PlatformController::ButtonState::kDown;
controller_model.touchpad_button_state = ControllerModel::ButtonState::kDown;
ReticleModel reticle_model;
InputEventList input_event_list;
input_manager_->HandleInput(MsToTicks(1), RenderInfo(), controller_model,
......
......@@ -37,7 +37,7 @@ TEST_F(UiPixelTest, MAYBE(DrawVrBrowsingMode)) {
// Draw UI.
DrawUi(gfx::Vector3dF(0.0f, 0.0f, -1.0f), gfx::Point3F(0.5f, -0.5f, 0.0f),
PlatformController::ButtonState::kUp, 1.0f, kIdentity, kIdentity,
ControllerModel::ButtonState::kUp, 1.0f, kIdentity, kIdentity,
GetPixelDaydreamProjMatrix());
// Read pixels into SkBitmap.
......
......@@ -562,15 +562,15 @@ std::unique_ptr<UiElement> CreateControllerLabel(UiElementName name,
layout->set_contributes_to_parent_bounds(false);
layout->AddBinding(VR_BIND_FUNC(
LayoutAlignment, Model, model,
model->controller.handedness == PlatformController::kRightHanded ? LEFT
: RIGHT,
model->controller.handedness == ControllerModel::kRightHanded ? LEFT
: RIGHT,
LinearLayout, layout.get(), set_x_centering));
layout->AddBinding(VR_BIND_FUNC(
LinearLayout::Direction, Model, model,
model->controller.handedness == PlatformController::kRightHanded
? LinearLayout::kRight
: LinearLayout::kLeft,
LinearLayout, layout.get(), set_direction));
layout->AddBinding(
VR_BIND_FUNC(LinearLayout::Direction, Model, model,
model->controller.handedness == ControllerModel::kRightHanded
? LinearLayout::kRight
: LinearLayout::kLeft,
LinearLayout, layout.get(), set_direction));
auto spacer = std::make_unique<UiElement>();
spacer->SetType(kTypeSpacer);
......@@ -624,7 +624,7 @@ std::unique_ptr<UiElement> CreateControllerElement(Model* model) {
touchpad_button->AddBinding(
VR_BIND_FUNC(SkColor, Model, model,
model->controller.touchpad_button_state ==
PlatformController::ButtonState::kDown
ControllerModel::ButtonState::kDown
? model->color_scheme().controller_button_down
: model->color_scheme().controller_button,
Rect, touchpad_button.get(), SetColor));
......@@ -637,13 +637,12 @@ std::unique_ptr<UiElement> CreateControllerElement(Model* model) {
app_button->SetSize(kControllerSmallButtonSize, kControllerSmallButtonSize);
app_button->SetRotate(1, 0, 0, -base::kPiFloat / 2);
app_button->SetTranslate(0.0f, 0.0f, kControllerAppButtonZ);
app_button->AddBinding(
VR_BIND_FUNC(SkColor, Model, model,
model->controller.app_button_state ==
PlatformController::ButtonState::kDown
? model->color_scheme().controller_button_down
: model->color_scheme().controller_button,
VectorIcon, app_button.get(), SetColor));
app_button->AddBinding(VR_BIND_FUNC(
SkColor, Model, model,
model->controller.app_button_state == ControllerModel::ButtonState::kDown
? model->color_scheme().controller_button_down
: model->color_scheme().controller_button,
VectorIcon, app_button.get(), SetColor));
controller->AddChild(std::move(app_button));
auto home_button =
......@@ -653,13 +652,12 @@ std::unique_ptr<UiElement> CreateControllerElement(Model* model) {
home_button->SetSize(kControllerSmallButtonSize, kControllerSmallButtonSize);
home_button->SetRotate(1, 0, 0, -base::kPiFloat / 2);
home_button->SetTranslate(0.0f, 0.0f, kControllerHomeButtonZ);
home_button->AddBinding(
VR_BIND_FUNC(SkColor, Model, model,
model->controller.home_button_state ==
PlatformController::ButtonState::kDown
? model->color_scheme().controller_button_down
: model->color_scheme().controller_button,
VectorIcon, home_button.get(), SetColor));
home_button->AddBinding(VR_BIND_FUNC(
SkColor, Model, model,
model->controller.home_button_state == ControllerModel::ButtonState::kDown
? model->color_scheme().controller_button_down
: model->color_scheme().controller_button,
VectorIcon, home_button.get(), SetColor));
controller->AddChild(std::move(home_button));
auto battery_layout =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment