📄 sdrv_charoutrect_latin1.c
字号:
/*
********************************************************************************
* ACTOS
* ui dirver show picture
*
* (c) Copyright 2002-2003, Actions Co,Ld.
* All Right Reserved
*
* File : sdrv_charOutrect.c
* By : Rcmai
* Version: 1> v1.00 first version 10/17/2003 10:46PM
********************************************************************************
*/
#include "display.h"
#include "Drv_S6B33B0A.h"
//#pragma codeseg(UI_RCODE)
#pragma memory=constseg(BBS_PUTS)
#pragma memory=default
#pragma memory=dataseg(BBD_PUTS)
#pragma memory=default
#pragma codeseg(BBC_PUTS)
////*******************************************************************************/
///*
//** FUNCTION: Sdrv_CharOutRect
//**
//** Description: 在指定的区域上打出一个字符,超出区域部分不显示,没有超出屏幕的部分将正常显示。
//**
//** input
//** code: 字符的码值
//** CRregion: 要求输出的区域
//** colcnt: 要求从汉字的哪一列开始输出
//** output
//** bool: 当指定列数超出该字的总列数时返回FALSE,否则返回TRUE
//********************************************************************************/
non_banked bool Sdrv_CharOutRect(int code, int nextcode, region_t *CRregion, BYTE colcnt)
{
char charmode;
bool putchar_result;
char tmpwidth;
if (CRregion->width == NULL)
{
return FALSE;
}
PutCharErrFlag = RESULT_PUTCHAR_OK; //默认为OK
Hdrv_SetDrawMode(DrawModeV_def); //把显示模式设置成竖向显示模式(与旧字库兼容)
Sdrv_GetFontPoint(code, CharPointBuffer);//取点阵
//charmode = CharMode0608;
charmode = CheckCharMode(code);
switch(charmode)
{
case CharMode0608://06*08点阵模式(ascii小字体)
if (colcnt >= 6)
{//计数值超出
Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
return FALSE;
}
//确定输出区域
region.x = CRregion->x;
region.y = CRregion->y;
region.width = CRregion->width;
region.height = ASCII_SMALL_HEIGHT_DEF;
Hdrv_SetWindow(®ion);
//取最小的值.
tmpwidth = (CRregion->width < (6-colcnt))? (CRregion->width):(6-colcnt);
//把黑白字模转为彩色字模放在Buff中
BlackCharToColor(ASCII_SMALL_WIDTH_DEF, CharPointBuffer);
//把暂时显存区的数据送到LCM
Hdrv_BuffDataTrans(DisplayBuffer+colcnt*ASCII_SMALL_HEIGHT_DEF*2,
ASCII_SMALL_HEIGHT_DEF*tmpwidth*2);
//region.x += ASCII_SMALL_WIDTH_DEF;//坐标移到下一个字的左上角
break;
case CharMode0816://08*16点阵模式(ascii大字体)
//设置字模输出的大小//上半个字
//region.width = ASCII_LARGE_WIDTH_DEF;
if (colcnt >= 8)
{//计数值超出
Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
return FALSE;
}
//确定输出区域
region.x = CRregion->x;
region.y = CRregion->y;
region.width = CRregion->width;
region.height = ASCII_LARGE_HEIGHT_DEF/2;
region.y += ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
Hdrv_SetWindow(®ion);
//取最小的值.
tmpwidth = (CRregion->width < (8-colcnt))? (CRregion->width):(8-colcnt);
//把黑白字模转为彩色字模放在Buff中(上区)
//BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF);
//把暂时显存区的数据送到LCM
Hdrv_BuffDataTrans(DisplayBuffer+colcnt*(ASCII_LARGE_HEIGHT_DEF/2)*2,
(ASCII_LARGE_HEIGHT_DEF/2)*tmpwidth*2);
region.y -= ASCII_LARGE_HEIGHT_DEF/2;//Y坐标加8准备输出下区(下半个字)
Hdrv_SetWindow(®ion);
//BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer + ASCII_LARGE_WIDTH_DEF);
BlackCharToColor(ASCII_LARGE_WIDTH_DEF, CharPointBuffer);
//把暂时显存区的数据送到LCM
Hdrv_BuffDataTrans(DisplayBuffer+colcnt*(ASCII_LARGE_HEIGHT_DEF/2)*2,
(ASCII_LARGE_HEIGHT_DEF/2)*tmpwidth*2);
//坐标移到下一个字的左上角
//region.x += ASCII_LARGE_WIDTH_DEF;
//region.y -= ASCII_LARGE_HEIGHT_DEF/2;
break;
default:
break;
}
Hdrv_SetDrawMode(DrawModeH_def); //把显示模式设置成横向显示模
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -