This repository has been archived on 2025-02-28. You can view files and clone it, but cannot push or open issues or pull requests.
controller-hd/User/lib/lcd/gui/Widget/TEXT.c

225 lines
6.2 KiB
C

/*
*********************************************************************************************************
* uC/GUI
* Universal graphic software for embedded applications
*
* (c) Copyright 2002, Micrium Inc., Weston, FL
* (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
*
* µC/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 */