hunting/middleware/GuiEngine/lvgl_common/GuiLvgl.cpp

141 lines
3.7 KiB
C++

/*
* Copyright (c) 2023 Fancy Code.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, softwareZhoufuwuqimima123
*
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "GuiLvgl.h"
#include "ILog.h"
#include "LvglWidget.h"
GuiLvgl::GuiLvgl()
{
}
/**
* @brief Get screen width
*
* @return Screen width value
*/
const int16_t GuiLvgl::GetScreenWidth(void)
{
return lv_obj_get_width(std::dynamic_pointer_cast<LvglWidget>(_ParWidget)->mWidget);
}
/**
* @brief Get screen height
*
* @return Screen height
*/
const int16_t GuiLvgl::GetScreenHeight(void)
{
return lv_obj_get_height(std::dynamic_pointer_cast<LvglWidget>(_ParWidget)->mWidget);
}
void FrameParObjectCb(i_lv_event_code_t e, void *userData)
{
if(VGuiEngine::GetInstance()->GetNowNode() != nullptr)
{
VGuiEngine::GetInstance()->GetNowNode()->EventSend(e, userData);
}
else
{
}
}
StatusCode GuiLvgl::CreateFrameParObject(int16_t widht, int16_t height, int16_t posX, int16_t posY)
{
std::shared_ptr<LvglWidget> widget = std::make_shared<LvglWidget>();
widget->mWidget = lv_obj_create(lv_scr_act());
widget->SetOpa(0);
widget->SetSize(widht, height);
widget->SetEventCb(FrameParObjectCb);
widget->SetPos(0, 0);
lv_refr_now(NULL);
_ParWidget = widget;
return CreateStatusCode(STATUS_CODE_OK);
}
std::shared_ptr<VWidget> GuiLvgl::GetFrameParObject(void)
{
return std::static_pointer_cast<LvglWidget>(_ParWidget);
}
StatusCode GuiLvgl::SetNowNode(std::shared_ptr<VWidget> widget)
{
_NowNode = widget;
return CreateStatusCode(STATUS_CODE_OK);
}
std::shared_ptr<VWidget> GuiLvgl::GetNowNode(void)
{
return _NowNode;
}
std::shared_ptr<VWidget> GuiLvgl::NewWidget(void)
{
std::shared_ptr<LvglWidget> widget = std::make_shared<LvglWidget>();
widget->mWidget = lv_obj_create(JudgeParent());
return widget;
}
std::shared_ptr<VWidget> GuiLvgl::NewPage(void)
{
return nullptr;
}
std::shared_ptr<VWidget> GuiLvgl::NewImage(void)
{
std::shared_ptr<LvglWidget> widget = std::make_shared<LvglWidget>();
widget->mWidget = lv_img_create(JudgeParent());
return widget;
}
std::shared_ptr<VWidget> GuiLvgl::NewButton(void)
{
std::shared_ptr<LvglWidget> widget = std::make_shared<ButtonWidget>();
widget->mWidget = lv_btn_create(JudgeParent());
lv_obj_set_pos(widget->mWidget, 0, 0); /*Set its position*/
lv_obj_set_size(widget->mWidget, 10, 10); /*Set its size*/
lv_obj_add_event_cb(widget->mWidget, nullptr, LV_EVENT_ALL, nullptr); /*Assign a callback to the button*/
return widget;
}
lv_obj_t* GuiLvgl::JudgeParent(void)
{
if (_NowNode != nullptr)
{
return (std::dynamic_pointer_cast<LvglWidget>(_NowNode)->mWidget);
}
else if (_ParWidget != nullptr)
{
// If no parent object is specified at the application layer, the parent window object of the application layer is used
return (std::dynamic_pointer_cast<LvglWidget>(_ParWidget)->mWidget);
}
else
{
//If the application layer does not specify a parent object, and the application layer's parent window object does not exist, LVGL's frame window object is used
return (lv_scr_act());
}
}