亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mso_multiline_text.c

?? ZORAN 962/966 SOURCE CODE,DVD chip
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* **************************************************************************************
*  Copyright (c) 2004 ZORAN Corporation, All Rights Reserved
*  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
*
*  File: $Workfile: o_text.c $
*
* Description:
* ============
* Project definition of the MSO_NEW_TEXT functions
*
****************************************************************************************/
#include "Config.h"		// Global Configuration - do not remove!
#include "include\sysdefs.h"

#ifdef DEBUG_UI_TRACE
#undef IFTRACE
#define IFTRACE if (gTraceUI)
#include "Debug\DbgMain.h"
#endif //DEBUG_UI_TRACE


/////////////////////////////////////////////////////////////////////////////
// Include files
#include <stdio.h>
#include <string.h>
#include "include\math-macro.h"
#include "Playcore\ScPad\SCMGR.h"
#include "GUI\Menu_system\ms_object.h"
#include "gui\menu_system\osd_rendering.h"
#include "gui\menu_system\ms_display.h"
#include "GUI\Menu_system\ms_screen.h"
#include "GUI\Object_class\Multiline\mso_multiline_text.h"
#include "GUI\Object_class\Text\mso_text.h"
#include "Menu\menu_operation_def.h"

#include "Font\fonts.h"
#include "Library\Unicode.h"

#include "Playcore\scpad\scmgr.h"
#include "services\include\_heap.h"
#ifndef DEBUG_UI_TRACE
#undef dbg_printf(sMsg)
#define dbg_printf(sMsg)
#undef	dbgm_printf(sMsg, mode)
#define dbgm_printf(sMsg, mode)
#endif




#define pObjectMultilineText			((MSO_MULTILINE_TEXT __NEAR*)pThis)
#define pObjectText					((MSO_TEXT __NEAR*)&(pObjectMultilineText->moObject))

#define pDescriptorMultilineText		((MS_DESCRIPTOR_MULTILINE_TEXT *)(pThis->mpDescriptor))
#define pDescriptorText				((MS_DESCRIPTOR_TEXT *)&(pDescriptorMultilineText->moDescriptorText))

static void OMULTILINETEXT_InitialiseTextTable(MULTILINE_TEXT_TABLE *pTable, UINT8 cNumEntries)
{
	// Record the number of entries:
	pTable->mcTableEntryCount = cNumEntries;
	// Allocate an array to hold each entry:
	(SC_PTR*)(pTable->mwEntries) = (SC_PTR*)MEM_Allocate(UI_MEMPOOL, (sizeof(SC_PTR) * cNumEntries));
}

static void OMULTILINETEXT_MallocStrings(MULTILINE_TEXT_TABLE *pTable)
{
	int i;

	// Allocate memory on the scratch pad for each string:
	for(i = 0; i < pTable->mcTableEntryCount; i++)
	{
		pTable->mwEntries[i] = OSDR_MallocScFormUniStr();
	}
}

static void OMULTILINETEXT_ResizeStrings(MULTILINE_TEXT_TABLE *pTable, UINT8 cOriginalMaxItems)
{
	int i;

	for(i = pTable->mcTableEntryCount; i < cOriginalMaxItems; i++)
	{
		OSDR_FreeScFormUniStr(pTable->mwEntries[i]);
		pTable->mwEntries[i] = NULL_HANDLE;
	}
}


static void OMULTILINETEXT_ReleaseStrings(MULTILINE_TEXT_TABLE *pTable)
{
	int i;

	// Free the SCPAD memory first:
	for(i = (pTable->mcTableEntryCount - 1); i >= 0; i--)
	{
		OSDR_FreeScFormUniStr(pTable->mwEntries[i]);
		pTable->mwEntries[i] = NULL_HANDLE;
	}
}

static void OMULTILINETEXT_DeleteTextTable(MULTILINE_TEXT_TABLE *pTable)
{
	// Free the array holding the SCPAD addresses:
	MEM_Free(UI_MEMPOOL, pTable->mwEntries);
	pTable->mwEntries = NULL;
	pTable->mcTableEntryCount = 0;
}

/**************************************************************************
*	Function : _PrepareTextTableItem
*
*	In	:
*	Out	:
*	Desc :
 ***************************************************************************/
#pragma argsused
static UINT8 _PrepareTextTableItem(MSO_OBJECT __NEAR* pThis ,
									MULTILINE_TEXT_TABLE	 *pMultilineTextTable, 
									UINT8 cLineIndex, 
									FORMATED_UNICODE_STRING *pFormUniStr,
									UINT16 *wScByteOffset,
									UINT16 wMaxPixelWidth
#ifdef D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
									,
								       BOOL 	bRemoveAllNewLines
#endif//D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
								       )
{
	UINT8 bDone;
	UINT8 cStrPrevSpaceIndex;
	UINT8 cStrLen;
	UINT16 wPixelCount;
	UINT8 bUnicodeNewLine = 0;
	CONST FONT *pCurrentFont;

	bDone = 0;
    	wPixelCount = 0;

	// split multi line strings / strings that are too long
	cStrPrevSpaceIndex = 0;
	cStrLen = 0;
	
	pCurrentFont = pFonts[pFormUniStr->mtFontIndex];


	while (cStrLen < UNISTR_LENGTH_MAX && wPixelCount <= wMaxPixelWidth)
	{
		if (pFormUniStr->mszUniStr[cStrLen] == 0x0000)
		{
			bDone = 1;
			break;
		}
		else if(pFormUniStr->mszUniStr[cStrLen] == UNICODE_NEWLINE)
		{
        		cStrPrevSpaceIndex = cStrLen;
			bUnicodeNewLine = 1;

#if D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
			if(bRemoveAllNewLines&&  MS_MULTI_PREPARE_STR_FIT_1 == pDescriptorMultilineText->mMsMultiDisplayConfig)
			{
				pFormUniStr->mszUniStr[cStrLen] = UNICODE_SPACE;
				continue;
			}

	//          this is for the 0x0000 following the UNICODE_NEWLINE
			if( cStrLen < UNISTR_LENGTH_MAX - 1 && pFormUniStr->mszUniStr[cStrLen + 1] == 0x0000)
				bDone = 1;
#endif D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
			break;
		}
		// now all in unicode so can test for unicode space
		else if ((pFormUniStr->mszUniStr[cStrLen] == UNICODE_SPACE)
				||(pFormUniStr->mszUniStr[cStrLen] == UNICODE_NO_BREAK_SPACE))
		{
			cStrPrevSpaceIndex = cStrLen;
			wPixelCount += pCurrentFont->m_cCharPixelSpace;	// calculate pixelwidth
		}
		else
		{
			CONST BYTE **poUniPage;
			UINT16 wUnichar;
			// calculate pixelwidth
			wUnichar = pFormUniStr->mszUniStr[cStrLen];
			
   			poUniPage = Font_Get_Page(pCurrentFont, wUnichar);
   			wUnichar &= FONT_UNICODE_POSITION_MASK;// Get the position in current page
  #ifdef D_GUI_FONT_TRUE_TYPE_COMBINING
			wPixelCount += ((poUniPage[wUnichar][UNI_CHAR_CELLX])) ;
  #else
  			wPixelCount += ((poUniPage[wUnichar][UNI_CHAR_WIDTH]) + pCurrentFont->m_cInterCharPixelSpace);
  #endif//D_GUI_FONT_TRUE_TYPE_COMBINING
		}

		cStrLen++;
	}
#ifndef D_GUI_FONT_TRUE_TYPE_COMBINING
	wPixelCount -= pCurrentFont->m_cInterCharPixelSpace;	// calculate pixelwidth
#endif//D_GUI_FONT_TRUE_TYPE_COMBINING
	// If the string is longer than UNISTR_LENGTH_MAX, cut into 2 strings
	if (!bDone)
	{	
		if(    (UNICODE_NEWLINE == pFormUniStr->mszUniStr[cStrPrevSpaceIndex]) 
		    ||(UNICODE_SPACE == pFormUniStr->mszUniStr[cStrPrevSpaceIndex])
		    ||(UNICODE_NO_BREAK_SPACE == pFormUniStr->mszUniStr[cStrPrevSpaceIndex]))
		{
			cStrLen = cStrPrevSpaceIndex;
			*wScByteOffset += cStrLen+1;
		}
		else
		{	
			cStrPrevSpaceIndex = cStrLen;
			
			*wScByteOffset += cStrLen;//>>>>Teddy add this for a long word no interupt.
		}
		//pFormUniStr->mszUniStr[cStrLen] = 0;
        	pMultilineTextTable->mcTableEntryCount++;
       }
	else if(cStrLen > 0)
    	{
    		pMultilineTextTable->mcTableEntryCount++;
    	}

	pFormUniStr->mszUniStr[cStrLen] = 0;
	

	OSDR_FormatUniString((FORMATED_UNICODE_STRING __NEAR *)pFormUniStr);
	OSDR_SetScFormUniStr((FORMATED_UNICODE_STRING __NEAR*)pFormUniStr, pMultilineTextTable->mwEntries[cLineIndex]);
#ifdef D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
	if( MS_MULTI_PREPARE_STR_DEFAULT == pDescriptorMultilineText->mMsMultiDisplayConfig)
#endif//D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
	{
	if(!bDone && !bUnicodeNewLine)
	{	
		 int cCount;
		// get text
       	pDescriptorMultilineText->moDescriptorText.mText->mGetStr((FORMATED_UNICODE_STRING __NEAR*)pFormUniStr, 
       														OMULTILINETEXT_GetStrParamMake(pDescriptorMultilineText->moDescriptorText.mText->mParam ,((UINT32)(*wScByteOffset)) ));
       														
       	for( cCount = 0; cCount < UNISTR_LENGTH_MAX ; cCount++) 
       	{
       		if(0x00  == pFormUniStr->mszUniStr[cCount] )
       		{
       			break;
       		}
       		if(UNICODE_NEWLINE == pFormUniStr->mszUniStr[cCount] )
       		{
				*wScByteOffset += cCount + 1;
				break;
       		}
       	}
       		
	}
      	}
	return bDone;

}


/**************************************************************************
*	Function	:	OMultilineTextOperation
*
*	In		:
*
*	Out 		:
*
*	Desc		:
 ***************************************************************************/
MS_OP OMULTILINETEXT_Operation(MSO_OBJECT __NEAR* pThis, MS_OP MsOp, UINT32 lParam)
{
	switch (MsOp)
	{

	// operations to create/resize/delete text table data - provides a handler to allow functions to be hidden
	case MS_OP_INIT_TEXT_TABLE:
		OMULTILINETEXT_InitialiseTextTable((MULTILINE_TEXT_TABLE*)lParam, ((MS_DESCRIPTOR_MULTILINE_TEXT *)(pThis->mpDescriptor))->mcMaxTableLines);
		break;
	case MS_OP_ALLOCATE_TEXT_TABLE_SCPAD_MEMORY:
		OMULTILINETEXT_MallocStrings((MULTILINE_TEXT_TABLE*)lParam);
		break;
	case MS_OP_RESIZE_TEXT_TABLE_SCPAD_MEMORY:
		OMULTILINETEXT_ResizeStrings((MULTILINE_TEXT_TABLE*)lParam, ((MS_DESCRIPTOR_MULTILINE_TEXT *)(pThis->mpDescriptor))->mcMaxTableLines);
		break;
	case MS_OP_RELEASE_TEXT_TABLE_SCPAD_MEMORY:
		OMULTILINETEXT_ReleaseStrings((MULTILINE_TEXT_TABLE*)lParam);
		break;
	case MS_OP_DELETE_TEXT_TABLE:
		OMULTILINETEXT_DeleteTextTable((MULTILINE_TEXT_TABLE*)lParam);
		break;

	case MS_OP_POPULATE_TEXT_TABLE:
		{
			BOOL bDone = 0;
			UINT16 wScByteOffset = 0;
			UINT8 cLineIndex;
			UINT32 lwTextandOffset;
			UINT16 wPixelWidth;
#ifdef D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
			BOOL bRemoveAllNewLines= FALSE;
#endif//D_GUI_DESCRIPTOR_MULTILINETEXT_EXT1
			
				

			// no get string method specified
			if(pDescriptorMultilineText->moDescriptorText.mText == NULL) break;


			// ABS here allows right align to container xoffset (specified as a -ve number) to be used to limit pixel width
			// but also means a negative offsets cannot be used to place text outside area (when align to container)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品v国产精品v日韩精品| 精品捆绑美女sm三区| 91精品国产欧美一区二区18| 国产日韩欧美不卡| 日本视频中文字幕一区二区三区| 国产成人亚洲精品青草天美| 555夜色666亚洲国产免| 最新成人av在线| 国产一区二区三区四| 91精品国产麻豆| 亚洲自拍偷拍图区| 成人ar影院免费观看视频| 精品国产91乱码一区二区三区 | 国产欧美日韩在线| 制服.丝袜.亚洲.中文.综合| 1区2区3区国产精品| 国产激情视频一区二区三区欧美| 国产亚洲精品7777| 日韩中文字幕麻豆| 在线日韩av片| 成人欧美一区二区三区黑人麻豆 | 亚洲免费视频成人| www.综合网.com| 国产精品色在线观看| 国产福利一区二区三区视频| 欧美刺激午夜性久久久久久久 | 欧美老年两性高潮| 亚洲福中文字幕伊人影院| 色婷婷综合中文久久一本| 亚洲天堂av老司机| 99久久精品情趣| 中文字幕av一区二区三区免费看| 精品一区二区影视| 国产亚洲欧美色| 成人国产亚洲欧美成人综合网| 国产午夜精品一区二区三区视频| 国精品**一区二区三区在线蜜桃| 精品少妇一区二区三区日产乱码| 蜜臀久久99精品久久久久宅男| 欧美一区二区三区四区高清| 六月丁香综合在线视频| 2023国产精品视频| 国产成人精品www牛牛影视| 国产精品国产成人国产三级 | 日韩一级高清毛片| 精品一区二区日韩| 中文av一区二区| 欧美中文字幕一区二区三区亚洲| 亚洲一区二区综合| 日韩三级伦理片妻子的秘密按摩| 精品一区二区久久久| 国产精品日产欧美久久久久| 91成人看片片| 美女诱惑一区二区| 久久九九全国免费| 一本到高清视频免费精品| 亚洲成人一二三| 久久青草国产手机看片福利盒子 | 欧美日韩精品欧美日韩精品一 | 精品av综合导航| av成人老司机| 蜜臀精品久久久久久蜜臀| 久久久久99精品一区| 日本国产一区二区| 免费观看在线色综合| 中文字幕一区二区三区在线播放 | 色老头久久综合| 秋霞影院一区二区| 中文字幕免费不卡| 欧美日本一道本在线视频| 久久精品国产成人一区二区三区 | 久久精品国产亚洲a| 中文字幕欧美国产| 欧美福利一区二区| 成人美女视频在线看| 日韩高清中文字幕一区| 中文子幕无线码一区tr | 色婷婷综合久久久中文字幕| 美女视频黄久久| 亚洲欧美日韩系列| 久久久久成人黄色影片| 欧美性猛交一区二区三区精品| 久久99精品久久久久久动态图| 亚洲美女区一区| 久久免费国产精品| 这里只有精品视频在线观看| 成人av电影观看| 精品视频色一区| 成人小视频免费观看| 亚洲高清在线精品| 日本一二三四高清不卡| 日韩精品一区二区三区四区视频| 色婷婷亚洲综合| 不卡av免费在线观看| 国产在线国偷精品产拍免费yy| 婷婷开心久久网| 亚洲男同性视频| 国产精品网站导航| 国产喂奶挤奶一区二区三区| 91精品黄色片免费大全| 欧美视频一区在线观看| 91性感美女视频| av午夜一区麻豆| 成人福利视频在线看| 狠狠狠色丁香婷婷综合激情| 蜜芽一区二区三区| 日韩影视精彩在线| 丝瓜av网站精品一区二区 | 一本久久a久久免费精品不卡| 成人高清在线视频| 成人综合婷婷国产精品久久蜜臀 | 丁香婷婷综合网| 国产主播一区二区| 国内精品国产三级国产a久久| 日韩成人精品在线观看| 奇米精品一区二区三区在线观看 | 国产欧美1区2区3区| 欧美sm极限捆绑bd| 精品久久久久久久久久久久久久久久久| 欧美喷潮久久久xxxxx| 欧美日韩一级大片网址| 欧美日韩视频不卡| 欧美一区二区在线不卡| 日韩一区二区电影| 久久久亚洲精华液精华液精华液 | 欧美挠脚心视频网站| 激情文学综合丁香| 欧美一级在线视频| 成人av在线观| 色综合久久66| 欧美性xxxxx极品少妇| 欧美日韩国产小视频| 91精品蜜臀在线一区尤物| 欧美一区二区国产| 国产日韩欧美a| 亚洲日本在线a| 亚洲成人黄色小说| 精品一区二区三区在线播放视频| 国产一区二区91| 一本久道久久综合中文字幕| 欧美精品精品一区| 久久色.com| 一区二区三区日韩精品视频| 亚洲一区二区精品久久av| 毛片一区二区三区| av一区二区久久| 日韩一区二区视频| 欧美国产精品中文字幕| 伊人夜夜躁av伊人久久| 伦理电影国产精品| 色哟哟在线观看一区二区三区| 欧美美女直播网站| 国产嫩草影院久久久久| 99久久免费视频.com| 国产欧美日韩三级| 久久国产精品免费| 色综合天天综合| 亚洲6080在线| 一区二区三区四区高清精品免费观看| 亚洲妇女屁股眼交7| 久久成人免费网| 欧美性高清videossexo| 精品国产区一区| 香蕉影视欧美成人| 丁香婷婷深情五月亚洲| 欧美午夜一区二区三区| 国产日本欧美一区二区| 日本女优在线视频一区二区| 91在线小视频| 26uuu国产一区二区三区| 一区二区三区视频在线看| 国产成人免费视频一区| 91精品欧美福利在线观看| 亚洲精品高清视频在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产成人av| 成人一区二区三区视频| 日韩免费高清av| 午夜欧美视频在线观看| 91视频国产资源| 中文字幕va一区二区三区| 久久99国产精品免费网站| 欧美日韩国产美| 亚洲综合另类小说| 91蝌蚪porny九色| 中文字幕欧美国产| 国产一区欧美二区| 日韩色视频在线观看| 日欧美一区二区| 色婷婷久久99综合精品jk白丝| 欧美国产亚洲另类动漫| 国产成人免费xxxxxxxx| 久久伊99综合婷婷久久伊| 美女视频网站黄色亚洲| 91精品国产福利| 欧美aaaaaa午夜精品| 日韩欧美国产电影| 蜜桃精品视频在线| 精品少妇一区二区三区日产乱码 | 亚洲人成7777|