⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text.c

📁 MCB2300_ucgui_LCD320240.rar LPC2368的uc/gui的移植
💻 C
字号:
/*
*********************************************************************************************************
*   											 uC/GUI
*   					 Universal graphic software for embedded applications
*
*   					(c) Copyright 2002, Micrium Inc., Weston, FL
*   					(c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
*   		   礐/GUI is protected by international copyright laws. Knowledge of the
*   		   source code may not be used to write a similar product. This file may
*   		   only be used in accordance with a license and should not be redistributed
*   		   in any way. We appreciate your understanding and fairness.
*
----------------------------------------------------------------------
File		: TEXT.c
Purpose 	: Implementation of text widget
---------------------------END-OF-HEADER------------------------------
*/

#include <stdlib.h>
#include <string.h>
#include "TEXT_Private.h"
#include "WIDGET.h"
#include "GUIDebug.h"
#include "GUI_Protected.h"

#if GUI_WINSUPPORT

/*********************************************************************
*
*   	Private config defaults
*
**********************************************************************
*/

/* Define default fonts */
#ifndef TEXT_FONT_DEFAULT
#define TEXT_FONT_DEFAULT &GUI_Font13_1
#endif

#ifndef TEXT_DEFAULT_TEXT_COLOR
#define TEXT_DEFAULT_TEXT_COLOR GUI_BLACK
#endif

/*********************************************************************
*
*   	Static data
*
**********************************************************************
*/

static const GUI_FONT GUI_UNI_PTR * _pDefaultFont = TEXT_FONT_DEFAULT;
static GUI_COLOR		_DefaultTextColor = TEXT_DEFAULT_TEXT_COLOR;

/*********************************************************************
*
*   	Static routines
*
**********************************************************************
*/
/*********************************************************************
*
*   	_FreeAttached
*/
static void _FreeAttached(TEXT_Obj *pObj)
{
	GUI_ALLOC_FreePtr(&pObj->hpText);
}

/*********************************************************************
*
*   	_Paint
*/
static void _Paint(TEXT_Handle hObj, TEXT_Obj *pObj)
{
	const char * s;
	GUI_RECT Rect;
	GUI_USE_PARA(hObj);
	LCD_SetColor(pObj->TextColor);
	GUI_SetFont(pObj->pFont);
	/* Fill with parents background color */
#if !TEXT_SUPPORT_TRANSPARENCY   /* Not needed any more, since window is transparent*/
	if (pObj->BkColor == GUI_INVALID_COLOR)
	{
		LCD_SetBkColor(WIDGET__GetBkColor(hObj));
	}
	else
	{
		LCD_SetBkColor(pObj->BkColor);
	}
	GUI_Clear();
#else
	if (!WM_GetHasTrans(hObj))
	{
		LCD_SetBkColor(pObj->BkColor);
		GUI_Clear();
	}
#endif
	/* Show the text */
	if (pObj->hpText)
	{
		s = (const char *) GUI_ALLOC_h2p(pObj->hpText);
		GUI_SetTextMode(GUI_TM_TRANS);
		WM_GetClientRect(&Rect);
		GUI_DispStringInRect(s, &Rect, pObj->Align);
	}
}

/*********************************************************************
*
*   	_Delete
*/
static void _Delete(TEXT_Obj *pObj)
{
	/* Delete attached objects (if any) */
	GUI_DEBUG_LOG("TEXT: Delete() Deleting attached items");
	_FreeAttached(pObj);
}

/*********************************************************************
*
*   	_TEXT_Callback
*/
static void _TEXT_Callback(WM_MESSAGE *pMsg)
{
	TEXT_Handle hObj = pMsg->hWin;
	TEXT_Obj* pObj = TEXT_H2P(hObj);
	/* Let widget handle the standard messages */
	if (WIDGET_HandleActive(hObj, pMsg) == 0)
	{
		return;
	}
	switch (pMsg->MsgId)
	{
		case WM_PAINT:
			GUI_DEBUG_LOG("TEXT: _Callback(WM_PAINT)\n");
			_Paint(hObj, pObj);
			return;
		case WM_DELETE:
			GUI_DEBUG_LOG("TEXT: _Callback(WM_DELETE)\n");
			_Delete(pObj);
			break;  	 /* No return here ... WM_DefaultProc needs to be called */
	}
	WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*   	Exported routines:  Create
*
**********************************************************************
*/

/* Note: the parameters to a create function may vary.
		 Some widgets may have multiple create functions */

/*********************************************************************
*
*   	TEXT_CreateEx
*/
TEXT_Handle TEXT_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char *pText)
{
	TEXT_Handle hObj;
	/* Create the window */
#if TEXT_SUPPORT_TRANSPARENCY
	WinFlags |= WM_CF_HASTRANS;
#endif
	hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, _TEXT_Callback, sizeof(TEXT_Obj) - sizeof(WM_Obj));
	if (hObj)
	{
		TEXT_Obj* pObj;
		WM_HMEM hMem = 0;
		WM_LOCK();
		pObj = TEXT_H2P(hObj);
		/* init widget specific variables */
		WIDGET__Init(&pObj->Widget, Id, 0);
		/* init member variables */
		TEXT_INIT_ID(pObj);
		if (pText)
		{
			hMem = GUI_ALLOC_AllocZero(strlen(pText) + 1);
			if (hMem)
			{
				strcpy((char *) GUI_ALLOC_h2p(hMem), pText);
			}
		}
		pObj->hpText = hMem;
		pObj->Align = ExFlags;
		pObj->pFont = _pDefaultFont;
		pObj->BkColor = GUI_INVALID_COLOR;
		pObj->TextColor = _DefaultTextColor;
		WM_UNLOCK();
	}
	else
	{
		GUI_DEBUG_ERROROUT_IF(hObj == 0, "TEXT_Create failed")
	}
	return hObj;
}

/*********************************************************************
*
*   	Exported routines:  Various methods
*
**********************************************************************
*/
/*********************************************************************
*
*   	TEXT_SetDefaultFont
*/
void TEXT_SetDefaultFont(const GUI_FONT GUI_UNI_PTR *pFont)
{
	_pDefaultFont = pFont;
}

/*********************************************************************
*
*   	TEXT_SetDefaultTextColor
*/
void TEXT_SetDefaultTextColor(GUI_COLOR Color)
{
	_DefaultTextColor = Color;
}

/*********************************************************************
*
*   	TEXT_GetDefaultFont
*/
const GUI_FONT GUI_UNI_PTR * TEXT_GetDefaultFont(void)
{
	return _pDefaultFont;
}

#else /* avoid empty object files */

void TEXT_C(void);
void TEXT_C(void)
{
}

#endif  /* #if GUI_WINSUPPORT */


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -