コード例 #1
0
ファイル: obj_multitext.c プロジェクト: Janesak1977/ali3602
void OSD_GetMTextInfor(PMULTI_TEXT pCtrl,mtxtinfo_t * pInfo)
{
	PTEXT_CONTENT pText;
	UINT16 width,height;
	UINT16 total_lines = 0,page_lines = 0,lines;
	INT16  lidx;
	UINT32 i;
	UINT8 *pStr;

	width  = pCtrl->rcText.uWidth;
	page_lines = 0;

	for(i=0; i<pCtrl->bCount; i++)
	{
		pText = &pCtrl->pTextTable[i];

		if(pText == NULL)
			continue;

		if(pText->bTextType == (UINT8)STRING_ID)
			pStr = OSD_GetUnicodeString(pText->text.wStringID);
		else
			pStr = (UINT8*)pText->text.pString;
		if(pStr== NULL)
			continue;
        
		lidx = (INT16)pInfo->topline_idx - (INT16)total_lines;

		lines = OSD_GetTextTotalLine(pStr,pCtrl->head.bFont,width,lidx,&pInfo->topline_pstr,&pInfo->line_height[total_lines]);
		if(pInfo->topline_idx >= total_lines 
			&& pInfo->topline_idx< lines + total_lines)
			pInfo->topline_tblidx = i;        
		total_lines += lines;
	}

	/* Total lines */
	pInfo->total_lines = total_lines;

	/* Get the total logical height.*/
	pInfo->total_height = 0;
	for(i=0;i<total_lines;i++)
	{
		pInfo->total_height += pInfo->line_height[i];
		if( i> 0)
			pInfo->total_height += C_LINE_GAP;
	}

	/* One page's height */
	pInfo->page_height = pCtrl->rcText.uHeight;

	if(pInfo->topline_idx >= total_lines)
		pInfo->topline_idx = 0;

#if 0
    /* Check the topline_idx */
CHECK_TOP_LINE: 
    height = 0;
    for(i=pInfo->topline_idx;i<total_lines;i++)
    {
        height += pInfo->line_height[i];
        if(i != pInfo->topline_idx)
            height += C_LINE_GAP;
    }
    if(pInfo->topline_idx> 0 && height < pInfo->page_height)
    {
        if(height + pInfo->line_height[total_lines - 1] + C_LINE_GAP <= pInfo->page_height)
        {
            pInfo->topline_idx -= 1;        
            goto CHECK_TOP_LINE;
        }
    }
#endif

    /* Get Current Page's lines */
	height = 0;
	//for(i=pInfo->topline_idx;i<total_lines;i++)
	for(i=0;i<total_lines;i++)
	{
		height += pInfo->line_height[i];
		if(i != pInfo->topline_idx)
			height += C_LINE_GAP;
		if(height > pInfo->page_height)
			break;
	}

	page_lines = i;
	pInfo->page_lines  = page_lines;    
}
コード例 #2
0
ファイル: obj_multitext.c プロジェクト: jinfeng-geeya/3202C
void OSD_GetMTextInfor(PMULTI_TEXT pCtrl,mtxtinfo_t * pInfo)
{
	UINT32 i;
	UINT8 mtfont,*pStr;
	PTEXT_CONTENT pText;
	UINT16 lidx,total_lines,page_lines,lines,width,height;

	page_lines = 0;
	total_lines = 0;
	width  = pCtrl->rcText.uWidth;
	MEMSET(&(pInfo->line_height[0]),0x0,MAX_LINE_NUM*sizeof((pInfo->line_height[0])));
	
	if(OSD_GetAttrSlave(pCtrl))
		mtfont = (pCtrl->head.bFont)|C_FONT_SLVMASK;
	else
		mtfont = pCtrl->head.bFont;
		
	for(i=0; i<pCtrl->bCount; i++)
	{
		pText = &pCtrl->pTextTable[i];

		if(pText == NULL)
			continue;

		if(pText->bTextType == (UINT8)STRING_ID)
			pStr = OSD_GetUnicodeString(pText->text.wStringID);
		else
			pStr = (UINT8*)pText->text.pString;
		if(pStr== NULL)
			continue;
        
		lidx = (INT16)pInfo->topline_idx - (INT16)total_lines;
		lines = OSD_GetTextTotalLine(pStr,mtfont,width,lidx,&pInfo->topline_pstr,&pInfo->line_height[total_lines]);
		if(pInfo->topline_idx >= total_lines&& pInfo->topline_idx< lines + total_lines)
			pInfo->topline_tblidx = i;
		
		total_lines += lines;
    }

	pInfo->total_lines = total_lines;
	pInfo->total_height = 0;
	for(i=0;i<total_lines;i++)
	{
		pInfo->total_height += pInfo->line_height[i];
		if( i> 0)
			pInfo->total_height += C_LINE_GAP;
	}

	pInfo->page_height = pCtrl->rcText.uHeight;
	if(pInfo->topline_idx >= total_lines)
		pInfo->topline_idx = 0;

    /* Check the topline_idx */
CHECK_TOP_LINE: 
    height = 0;
    for(i=pInfo->topline_idx;i<total_lines;i++)
    {
        height += pInfo->line_height[i];
        if(i != pInfo->topline_idx)
            height += C_LINE_GAP;
    }
    if(pInfo->topline_idx> 0 && height < pInfo->page_height)
    {
        if(height + pInfo->line_height[total_lines - 1] + C_LINE_GAP <= pInfo->page_height)
        {
            pInfo->topline_idx -= 1;        
            goto CHECK_TOP_LINE;
        }
    }

    /* Get Current Page's lines */
    height = 0;
    for(i=pInfo->topline_idx;i<total_lines;i++)
    {
        height += pInfo->line_height[i];
        if(i != pInfo->topline_idx)
            height += C_LINE_GAP;
        if(height > pInfo->page_height)
            break;
    }

    page_lines = i - pInfo->topline_idx;
    pInfo->page_lines  = page_lines;    
}