📄 brw_disp.c
字号:
/**************************************************************************
Copyright (C) 2005 SHENZHEN MEIJIN CO.LTD
FILE NAME: brw_disp.C
MODULE NAME: browser
DESCRIPTION: 提供了浏览器对显示的函数
对外函数声明:
BrowserDrawPage 显示一页数据
BrowserDrawOneLine 显示一行的数据
BrowserMarkPage 显示Mark
BrowserDrawUnderLine 画下划线
**************************************************************************
DTAE AUTHOR VERSION REMARKS
=========== ========== ========= ======================================
2006-3-5 gaolinhui V1.0 create
***************************************************************************/
#include "kernel.h"
#include "BrowserIn.h"
/************************************************************************/
/* 函数名称: BrowserDrawPage */
/* 函数描述: 显示一屏 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* NONE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
VOID BrowserDrawPage(MBrowser *handle)
{
UINT32 lineNum,i;
UINT16 wStateBack;
UINT16 font,wBackFont;
if (handle->pBrwInfo->pBuffer == NULL)
{
return;
}
font = handle->pBrwInfo->wFontID;
wBackFont = GraphGetFontID();
GraphDisableRefresh();
/*清除所占区域*/
GraphClearRect(handle->pBrwInfo->nX,handle->pBrwInfo->nY,
handle->pBrwInfo->nX+handle->pBrwInfo->wWidth - 1,
handle->pBrwInfo->nY+handle->pBrwInfo->wHeight - 1);
/*一屏总行数*/
lineNum = BrowserPageLineSum(handle,handle->pBrwInfo->dwTopLine);
//先保存当前的状态
wStateBack = handle->pBrwInfo->wStates;
/*****************gaolinhui,added, 06-6-3*********************/
if(1) //每次Draw前,先将浏览器状态调整到当前顶行的状态
{
MLineInfo lineinfo;
if(GetLineInfo(handle,handle->pBrwInfo->dwTopLine, &lineinfo))
{
handle->pBrwInfo->wStates = lineinfo.wStates;
}
}
/************************************************************/
for (i = 0;i < lineNum;i ++)
{
BrowserDrawOneLine(handle,(i + handle->pBrwInfo->dwTopLine));
}
//恢复当前的状态
handle->pBrwInfo->wStates = wStateBack;
if (handle->pBrwInfo->wStates & BROWSER_STATE_MARKING)
{
BrowserMarkPage(handle);
}
GraphEnableRefresh();
handle->pBrwInfo->wStates &= ~BROWSER_STATE_NODRAW;
handle->pBrwInfo->wFontID = font;
GraphSetFontID(wBackFont);
ClrFontInvertStyle();
return;
}
/************************************************************************/
/* 函数名称: BrowserDrawOneLine */
/* 函数描述: 显示一行数据 */
/* 当前版本: 1.0 */
/* 作 者: gaolinhui */
/* 输入参数: */
/* handle - 对象句柄 */
/* line - 行号 */
/* 输出参数: */
/* NONE */
/* 返回值 : */
/* NONE */
/* 更改记录: */
/* =====================================================================*/
/* 日期 人员 版本 描述 */
/* =====================================================================*/
/* 2006-3-1 gaolinhui 1.0 创建 */
/************************************************************************/
VOID BrowserDrawOneLine(MBrowser *handle,UINT32 line)
{
UINT8 *pData;
UINT16 moveLen,height;
UINT16 wUnitWidth,wTotalCol,wCurCol;
UINT32 dwCurLine;
UINT8* pUnitBuff;
UINT16 memLen,markLen;
MLineInfo LineInfo;
UINT16 x,y;
UINT16 x0,y0;
UINT16 wState0,wColStart,wTempState;
UINT32 dwLineStart;
UINT8 *pString,*pNext;
//申请内存
pUnitBuff = BROWSER_STACK_ALLOC(handle,BROWSER_UNIT_MAXLEN);
pString = BROWSER_STACK_ALLOC(handle,100);
/*起始坐标*/
x0 = handle->pBrwInfo->nX;
y0 = handle->pBrwInfo->nY;
/*行高*/
height = BrowserLinesHeight(handle,line,line);
/*当前行*/
dwCurLine = line - handle->pBrwInfo->dwTopLine;
/*当前列*/
wCurCol = 0;
/*总列数*/
wTotalCol = handle->pBrwInfo->wTotalCol;
/*行数据指针*/
/*顶行指针*/
GetLineInfo(handle, line, &LineInfo);
pData = LineInfo.pLinePtr;
/*下一行指针*/
GetLineInfo(handle, line+1, &LineInfo);
pNext = LineInfo.pLinePtr;
/*设置起始字体*/
BrowserSetPositionFont(handle,pData);
/*清除所占区域*/
BrowserLineColToXY(handle,dwCurLine,0,&x,&y);
GraphClearRect(x0+0,y0+y,x0+handle->pBrwInfo->wWidth - 1,
y0+y+ height - 1);
/*开始显示,以unit为单位*/
wState0 = handle->pBrwInfo->wStates;
dwLineStart = dwCurLine;
wColStart = 0;
memset(pString,0,100);
while (1)
{
if (pNext && (pData >= pNext))
{
break;
}
/*得到一个unit*/
wUnitWidth = BrowserGetOneUnit(handle,pData,
pUnitBuff,&moveLen,BROWSER_DRAWING);
/*需要换行*/
if (handle->pBrwInfo->wStates & BROWSER_STATE_RETURN)
{
if (wCurCol != 0)
{
break;
}
handle->pBrwInfo->wStates &= ~BROWSER_STATE_RETURN;
}
/*换行符*/
if (wUnitWidth == BROWSER_RESULT_RETURN)
{
/*另起一行*/
if (wCurCol != 0)
{
break;
}
pData += moveLen;
continue;
}
/*数据结束符*/
else if (wUnitWidth == 0 )
{
/*返回*/
break;
}
/* 单词显示长度大于行最大显示长度 */
else if (wUnitWidth > wTotalCol)
{
UINT8 *p,*ptr;
UINT range;
UINT8 temp;
/*是否为新行*/
if (wCurCol != 0)
{
break;
}
/*标记符号长度*/
markLen = moveLen - (UINT16)strlen(pUnitBuff);
memLen = 0;
ptr = pUnitBuff + memLen;
/*计算一行可显示内容*/
range = wTotalCol;
p = BrwWidthCutStr(ptr,FontGetLib(),
0, &range);
/*显示字串内存长度*/
memLen = p - pUnitBuff;
if (pNext)
{
if ((pNext - pData) < memLen)
{
memLen = (pNext - pData);
}
}
/*截断字符串*/
temp = pUnitBuff[memLen];
pUnitBuff[memLen] = 0;
/*显示*/
BrowserDrawOneUnit(handle,pUnitBuff,dwCurLine,
wCurCol);
/*恢复字符串*/
pUnitBuff[memLen] = temp;
break;
}
else if ((wCurCol + wUnitWidth) > wTotalCol)
{
break;
}
/*居中显示*/
if (handle->pBrwInfo->wStates & BROWSER_STATE_CENTER)
{
UINT16 co;
/*起始位置*/
co = BrowserCenterStart(handle,pData,wCurCol,wTotalCol);
if (co != 0)
{
wCurCol += co;
handle->pBrwInfo->wStates &= ~BROWSER_STATE_CENTER;
wColStart = wCurCol;
}
}
/*缩进*/
if (handle->pBrwInfo->wStates & BROWSER_STATE_TAB)
{
if (wCurCol == 0)
{
if (handle->pBrwInfo->byTabGrade == 0)
{
wCurCol = BROWSER_TAB_LENGTH;
handle->pBrwInfo->byTabGrade = 1;
}
else
{
wCurCol = handle->pBrwInfo->wTabWidth;
}
wColStart = wCurCol;
}
}
/*显示当前unit*/
if (wState0 == handle->pBrwInfo->wStates)
{
strcat(pString,pUnitBuff);
}
else
{
if (strlen(pString) != 0)
{
wTempState = handle->pBrwInfo->wStates;
handle->pBrwInfo->wStates = wState0;
BrowserDrawOneUnit(handle,pString,dwLineStart,wColStart);
handle->pBrwInfo->wStates = wTempState;
BrowserSetFontID(handle);
}
wColStart = wCurCol;
dwLineStart = dwCurLine;
wState0 = handle->pBrwInfo->wStates;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -