158 lines
5.0 KiB
C
158 lines
5.0 KiB
C
#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);
|
||
} |