/* * 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 "LvglWidget.h" #include "ILog.h" #include "images_handle.h" i_lv_event_code_t transitionEventCode_MidApp(lv_event_code_t code) { switch (code) { case LV_EVENT_CLICKED: return i_lv_event_code_t::I_LV_EVENT_CLICKED; default: return i_lv_event_code_t::I_LV_EVENT_ALL; } } lv_event_code_t transitionEventCode_AppMid(i_lv_event_code_t code) { switch (code) { case i_lv_event_code_t::I_LV_EVENT_CLICKED: return LV_EVENT_CLICKED; default: return LV_EVENT_ALL; } } lv_align_t transitionAlignCode_AppMid(i_lv_align_t align) { switch (align) { case i_lv_align_t::I_LV_ALIGN_DEFAULT: return LV_ALIGN_DEFAULT; case i_lv_align_t::I_LV_ALIGN_TOP_LEFT: return LV_ALIGN_TOP_LEFT; case i_lv_align_t::I_LV_ALIGN_TOP_MID: return LV_ALIGN_TOP_MID; case i_lv_align_t::I_LV_ALIGN_TOP_RIGHT: return LV_ALIGN_TOP_RIGHT; case i_lv_align_t::I_LV_ALIGN_BOTTOM_LEFT: return LV_ALIGN_BOTTOM_LEFT; case i_lv_align_t::I_LV_ALIGN_BOTTOM_MID: return LV_ALIGN_BOTTOM_MID; case i_lv_align_t::I_LV_ALIGN_BOTTOM_RIGHT: return LV_ALIGN_BOTTOM_RIGHT; case i_lv_align_t::I_LV_ALIGN_LEFT_MID: return LV_ALIGN_LEFT_MID; case i_lv_align_t::I_LV_ALIGN_RIGHT_MID: return LV_ALIGN_RIGHT_MID; case i_lv_align_t::I_LV_ALIGN_CENTER: return LV_ALIGN_CENTER; case i_lv_align_t::I_LV_ALIGN_OUT_TOP_LEFT: return LV_ALIGN_OUT_TOP_LEFT; case i_lv_align_t::I_LV_ALIGN_OUT_TOP_MID: return LV_ALIGN_OUT_TOP_MID; case i_lv_align_t::I_LV_ALIGN_OUT_TOP_RIGHT: return LV_ALIGN_OUT_TOP_RIGHT; case i_lv_align_t::I_LV_ALIGN_OUT_BOTTOM_LEFT: return LV_ALIGN_OUT_BOTTOM_LEFT; case i_lv_align_t::I_LV_ALIGN_OUT_BOTTOM_MID: return LV_ALIGN_OUT_BOTTOM_MID; case i_lv_align_t::I_LV_ALIGN_OUT_BOTTOM_RIGHT: return LV_ALIGN_OUT_BOTTOM_RIGHT; case i_lv_align_t::I_LV_ALIGN_OUT_LEFT_TOP: return LV_ALIGN_OUT_LEFT_TOP; case i_lv_align_t::I_LV_ALIGN_OUT_LEFT_MID: return LV_ALIGN_OUT_LEFT_MID; case i_lv_align_t::I_LV_ALIGN_OUT_LEFT_BOTTOM: return LV_ALIGN_OUT_LEFT_BOTTOM; case i_lv_align_t::I_LV_ALIGN_OUT_RIGHT_TOP: return LV_ALIGN_OUT_RIGHT_TOP; case i_lv_align_t::I_LV_ALIGN_OUT_RIGHT_MID: return LV_ALIGN_OUT_RIGHT_MID; case i_lv_align_t::I_LV_ALIGN_OUT_RIGHT_BOTTOM: return LV_ALIGN_OUT_RIGHT_BOTTOM; default: return LV_ALIGN_CENTER; } } void LvglWidget::AlignTo(std::shared_ptr base, i_lv_align_t align, int16_t posX, int16_t posY) { if (mWidget) { if(base == nullptr) { lv_obj_align_to(mWidget, nullptr, transitionAlignCode_AppMid(align), posX, posY); } else { std::shared_ptr _base = std::dynamic_pointer_cast(base); lv_obj_align_to(mWidget, _base->mWidget, transitionAlignCode_AppMid(align), posX, posY); } } } void LvglWidget::SetPos(int16_t posX, int16_t posY) { if (mWidget) { lv_obj_set_pos(mWidget, posX, posY); } } /** * @brief aligns the object to the center of its parent object. * * Note that if the size of the parent element changes, 'obj' needs to be manually aligned again */ void LvglWidget::Center(void) { if (mWidget) { lv_obj_center(mWidget); } } /** * @brief deletes the LvglWidget object * * Deletes the current LvglWidget object and frees the associated resources. */ void LvglWidget::Delete(void) { if (mWidget) { lv_obj_del(mWidget); mWidget = nullptr; } } void LvglWidget::SetOpa(const uint8_t opaValue) { if (mWidget) { lv_obj_set_style_bg_opa(mWidget, opaValue, 0); } } void LvglWidget::SetSize(const int16_t width, const int16_t height) { if (mWidget) { lv_obj_set_size(mWidget, width, height); } } void LvglWidget::SetColor(uint32_t color) { if (mWidget) { lv_obj_set_style_bg_color(mWidget, lv_color_hex(color), 0); } } static void publicEventCb(lv_event_t * e) { LvglWidget * kb = (LvglWidget *)lv_event_get_user_data(e); lv_event_code_t code = lv_event_get_code(e); kb->mEventCb(transitionEventCode_MidApp(code), nullptr); // 这里的 nullptr 需要改, 不是这样的,而是根据具体的需求 } void LvglWidget::SetEventCb(i_lv_event_cb_t eventCb) { if (mWidget) { mEventCb = eventCb; lv_obj_add_event_cb(mWidget, publicEventCb, LV_EVENT_ALL, this); } } void LvglWidget::EventSend(i_lv_event_code_t e, void * userData) { if (mWidget) { lv_event_send(mWidget, transitionEventCode_AppMid(e), nullptr); } } void ImageWidget::ImageSetSrc(const void *src) { if (mWidget) { // LogInfo("================================= image src = %s\n", (char *)src); lv_img_set_src(mWidget, src); } } /** * @brief sets the label text * * @param text Indicates the text content */ void LabelWidget::SetText(const char *text) { if (mWidget) { lv_label_set_text(mWidget, text); } } /** * @brief Sets the color of the button control * * @param color Color value */ void ButtonWidget::SetColor(uint32_t color) { if (mWidget) { // 打桩 } }