/* --------------------------------------- 绘制文字 (实体/透明) --------------------------------------- */ static bool_t qst_crh_text ( __CR_IN__ void_t* parm, __CR_IN__ uint_t argc, __CR_IN__ ansi_t** argv ) { sRECT rect; bool_t rett; bool_t tran; ansi_t* temp; ansi_t* text; sIMAGE* draw; uint_t ww,hh; uint_t align; /* 参数解析 <X> <Y> <EscText> [Width Height Align] */ if (argc < 4) return (FALSE); if (s_font == NULL) return (FALSE); draw = ((sQstView2D*)parm)->paint; if (draw == NULL) return (FALSE); /* 必须使用转义字符串 */ temp = str_fmtA("\"%s\"", argv[3]); if (temp == NULL) return (FALSE); text = str_esc_dupU(temp); mem_free(temp); if (text == NULL) return (FALSE); /* 区分实体和透明, 两个命令合并起来了 */ if (str_cmpA(argv[0], "crh:texts") == 0) tran = FALSE; else tran = TRUE; rect.x1 = (sint_t)str2intxA(argv[1]); rect.y1 = (sint_t)str2intxA(argv[2]); if (argc > 6) { ww = str2intxA(argv[4]); hh = str2intxA(argv[5]); align = str2intxA(argv[6]); rect_set_wh(&rect, rect.x1, rect.y1, ww, hh); } else { align = 0; } rett = qst_crh_text_int(draw, tran, &rect, text, align); mem_free(text); return (rett); }
/* ======================================= 转义字符串发送 ======================================= */ CR_API void_t* qst_esc_tran ( __CR_IN__ const ansi_t* string, __CR_OT__ uint_t* ot_size ) { leng_t len; ansi_t* dat; ansi_t* str; str = str_fmtA("\"%s\"", string); if (str == NULL) return (NULL); dat = str_esc_dupU(str, &len); mem_free(str); *ot_size = len; return (dat); }
/* --------------------------------------- 绘制文字 (使用外部定义) --------------------------------------- */ static bool_t qst_crh_text_ex ( __CR_IN__ void_t* parm, __CR_IN__ uint_t argc, __CR_IN__ ansi_t** argv ) { sRECT* rect; bool_t free; bool_t rett; bool_t tran; uint_t algn; ansi_t* temp; ansi_t* text; sIMAGE* draw; /* 参数解析 <EscText/TextName> <RectName> <Align> [IsTextName] */ if (argc < 4) return (FALSE); if (s_font == NULL) return (FALSE); if (s_resx == NULL) return (FALSE); draw = ((sQstView2D*)parm)->paint; if (draw == NULL) return (FALSE); /* 查找目标矩形对象 */ rect = egui_res_get_rct(s_resx, argv[2]); if (rect == NULL) return (FALSE); /* 找不到或不使用文本名称的时候使用转义字符串 */ if (argc > 4) text = egui_res_get_txt(s_resx, argv[1]); else text = NULL; if (text == NULL) { temp = str_fmtA("\"%s\"", argv[1]); if (temp == NULL) return (FALSE); text = str_esc_dupU(temp); mem_free(temp); if (text == NULL) return (FALSE); free = TRUE; } else { free = FALSE; } /* 区分实体和透明, 两个命令合并起来了 */ if (str_cmpA(argv[0], "crh:texts_ex") == 0) tran = FALSE; else tran = TRUE; algn = str2intxA(argv[3]); rett = qst_crh_text_int(draw, tran, rect, text, algn); if (free) mem_free(text); return (rett); }