#include "include.h" #define TRACE_EN 0 #if TRACE_EN #define TRACE(...) printf(__VA_ARGS__) #else #define TRACE(...) #endif #define QRCODEBOX_PADDING (GUI_SCREEN_WIDTH / 10) //二维码和背景的间隙 /** * @brief 创建一个码 * @param[in] frm : 窗体指针 * @param[in] qr_type : 二维码或条形码 * @param[in] max_ch_cnt : 最大字符长度 * @return 返回码 **/ compo_qrcodebox_t *compo_qrcodebox_create(compo_form_t *frm, u8 qr_type, u16 max_ch_cnt) { compo_qrcodebox_t *qrcodebox = compo_create(frm, COMPO_TYPE_QRCODEBOX); //背景 widget_rect_t *bg = widget_rect_create(frm->page); if (!sco_is_connected() && bt_get_call_indicate() == BT_CALL_IDLE && !bt_get_siri_status()) { //与通话复用dram,sco建立时不创建二维码,防止8001蓝屏 //二维码/条形码 widget_qrcode_t *qrcode = widget_qrcode_create(frm->page, qr_type, max_ch_cnt); if (widget_get_parent(qrcode) != frm->page) { return NULL; } widget_set_pos(qrcode, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y); //白色背景区域 rect_t rect = widget_get_location(qrcode); widget_set_location(bg, rect.x, rect.y, rect.wid + QRCODEBOX_PADDING, rect.hei + QRCODEBOX_PADDING); qrcodebox->bg = bg; qrcodebox->qrcode = qrcode; } else { u16 side_len = MIN(GUI_SCREEN_WIDTH / 2, GUI_SCREEN_HEIGHT / 2); widget_set_location(bg, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y, side_len, side_len); } return qrcodebox; } /** * @author gzj * @brief 创建一个码-高度可调整 * @param[in] frm : 窗体指针 * @param[in] qr_type : 二维码或条形码 * @param[in] max_ch_cnt : 最大字符长度 * @return 返回码 **/ compo_qrcodebox_t *compo_qrcodebox_y_create(compo_form_t *frm, u8 qr_type, u16 max_ch_cnt,s16 y) { compo_qrcodebox_t *qrcodebox = compo_create(frm, COMPO_TYPE_QRCODEBOX); //背景 widget_rect_t *bg = widget_rect_create(frm->page_body); if (!sco_is_connected()) { //与通话复用dram,sco建立时不创建二维码,防止8001蓝屏 //二维码/条形码 widget_qrcode_t *qrcode = widget_qrcode_create(frm->page_body, qr_type, max_ch_cnt); widget_set_pos(qrcode, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + y); //白色背景区域 rect_t rect = widget_get_location(qrcode); widget_set_location(bg, rect.x, y, rect.wid + QRCODEBOX_PADDING, rect.hei + QRCODEBOX_PADDING); qrcodebox->bg = bg; qrcodebox->qrcode = qrcode; } else { u16 side_len = MIN(GUI_SCREEN_WIDTH / 2, GUI_SCREEN_HEIGHT / 2); widget_set_location(bg, GUI_SCREEN_CENTER_X, GUI_SCREEN_CENTER_Y + y, side_len, side_len); } return qrcodebox; } /** * @brief 设置码的内容 * @param[in] qrcodebox : 码指针 * @param[in] str : 字符内容 **/ void compo_qrcodebox_set(compo_qrcodebox_t *qrcodebox, const char *str) { if (qrcodebox->qrcode) { widget_qrcode_set(qrcodebox->qrcode, str); } } /** * @brief 设置码的内容 * @param[in] qrcodebox : 码指针 * @param[in] level: 纠错等级 **/ void compo_qrcodebox_set_level(compo_qrcodebox_t *qrcodebox, u8 level) { if (qrcodebox->qrcode) { widget_qrcode_set_level(qrcodebox->qrcode, level); } } /** * @brief 设置最小单位宽度 * @param[in] qrcodebox : 码指针 * @param[in] bit_wid : 设置像素宽度 **/ void compo_qrcodebox_set_bitwid(compo_qrcodebox_t *qrcodebox, u16 bit_wid) { widget_qrcode_t *qrcode = qrcodebox->qrcode; if (qrcode) { widget_qrcode_set_bitwid(qrcode, bit_wid); //更新白色背景区域 rect_t rect = widget_get_location(qrcode); widget_set_location(qrcodebox->bg, rect.x, rect.y, rect.wid + QRCODEBOX_PADDING, rect.hei + QRCODEBOX_PADDING); } } /** * @brief 设置最小单位宽度 * @param[in] qrcodebox : 码指针 * @param[in] qr_wid : 设置要显示宽度(高度=宽度) **/ void compo_qrcodebox_set_bitwid_by_qrwid(compo_qrcodebox_t *qrcodebox, u16 qr_wid) { widget_qrcode_t *qrcode = qrcodebox->qrcode; if (qrcode) { widget_qrcode_set_bitwid_by_qrwid(qrcode, qr_wid); //更新白色背景区域 rect_t rect = widget_get_location(qrcode); widget_set_location(qrcodebox->bg, rect.x, rect.y, rect.wid + QRCODEBOX_PADDING, rect.hei + QRCODEBOX_PADDING); } } void compo_qrcodebox_set_rect_size(compo_qrcodebox_t *qrcodebox, u16 wid, u16 hei) { widget_qrcode_t *qrcode = qrcodebox->qrcode; if (qrcode) { //更新白色背景区域 rect_t rect = widget_get_location(qrcode); widget_set_location(qrcodebox->bg, rect.x, rect.y, rect.wid + wid, rect.hei + hei); } } void compo_qrcodebox_pos(compo_qrcodebox_t *qrcodebox, s16 x, s16 y) { widget_set_pos(qrcodebox->bg, x, y); widget_set_pos(qrcodebox->qrcode, x, y); }