system/lib/lcd/gui/Core/GUI_Protected.h

405 lines
14 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 : GUI_Protected.h
Purpose : GUI internal declarations
---------------------------END-OF-HEADER------------------------------
*/
#ifndef GUI_PROTECTED_H
#define GUI_PROTECTED_H
#include "GUI.h"
#include "LCD_Protected.h"
#include "GUIDebug.h"
#if GUI_WINSUPPORT
#include "WM_GUI.h"
#endif
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
/**********************************************************************
*
* Defaults for config switches
*
***********************************************************************
The config switches below do not affect the interface in GUI.h and
are therefor not required to be in GUI.h.
*/
/* Short address area.
For most compilers, this is "near" or "__near"
We do not use this except for some CPUs which we know to always have some
near memory, because the GUI_Context ans some other data will be declared
to be in this short address (near) memory area as it has a major effect
on performance.
Please define in GUIConf.h (if you want to use it)
*/
#ifndef GUI_SADDR
#define GUI_SADDR
#endif
#ifndef GUI_DEFAULT_FONT
#define GUI_DEFAULT_FONT &GUI_Font6x8
#endif
#ifndef GUI_DEFAULT_CURSOR
#define GUI_DEFAULT_CURSOR &GUI_CursorArrowM
#endif
#ifndef GUI_DEFAULT_BKCOLOR
#define GUI_DEFAULT_BKCOLOR GUI_BLACK
#endif
#ifndef GUI_DEFAULT_COLOR
#define GUI_DEFAULT_COLOR GUI_WHITE
#endif
#ifndef GUI_X_SIGNAL_EVENT
#define GUI_X_SIGNAL_EVENT()
#endif
#ifndef GUI_X_WAIT_EVENT
#define GUI_X_WAIT_EVENT() GUI_X_ExecIdle()
#endif
/* *********************************
* *
* Angles *
* *
*********************************
*/
#define GUI_45DEG 512
#define GUI_90DEG (2*GUI_45DEG)
#define GUI_180DEG (4*GUI_45DEG)
#define GUI_360DEG (8*GUI_45DEG)
/*****************************************************
*
* Locking checks
*
******************************************************
*/
#if defined (WIN32) && defined (_DEBUG) && GUI_OS
#define GUI_ASSERT_LOCK() GUITASK_AssertLock()
#define GUI_ASSERT_NO_LOCK() GUITASK_AssertNoLock()
void GUITASK_AssertLock(void);
void GUITASK_AssertNoLock(void);
#else
#define GUI_ASSERT_LOCK()
#define GUI_ASSERT_NO_LOCK()
#endif
/*****************************************************
*
* Usage internals
*
******************************************************
*/
typedef enum { GUI_WRAPMODE_NONE, GUI_WRAPMODE_WORD, GUI_WRAPMODE_CHAR } GUI_WRAPMODE;
typedef GUI_HMEM GUI_USAGE_Handle;
typedef struct tsUSAGE_APIList tUSAGE_APIList;
typedef struct GUI_Usage GUI_USAGE;
#define GUI_USAGE_h GUI_USAGE_Handle
typedef GUI_USAGE_h tUSAGE_CreateCompatible(GUI_USAGE* p);
typedef void tUSAGE_AddPixel (GUI_USAGE* p, int x, int y);
typedef void tUSAGE_AddHLine (GUI_USAGE* p, int x0, int y0, int len);
typedef void tUSAGE_Clear (GUI_USAGE* p);
typedef void tUSAGE_Delete (GUI_USAGE_h h);
typedef int tUSAGE_GetNextDirty (GUI_USAGE* p, int *pxOff, int yOff);
#define GUI_USAGE_H2P(h) ((GUI_USAGE*)GUI_ALLOC_h2p(h))
void GUI_USAGE_DecUseCnt(GUI_USAGE_Handle hUsage);
GUI_USAGE_Handle GUI_USAGE_BM_Create(int x0, int y0, int xsize, int ysize, int Flags);
void GUI_USAGE_Select(GUI_USAGE_Handle hUsage);
void GUI_USAGE_AddRect(GUI_USAGE* pUsage, int x0, int y0, int xSize, int ySize);
#define GUI_USAGE_AddPixel(p, x,y) p->pAPI->pfAddPixel(p,x,y)
#define GUI_USAGE_AddHLine(p,x,y,len) p->pAPI->pfAddHLine(p,x,y,len)
#define GUI_USAGE_Clear(p) p->pAPI->pfClear(p)
#define GUI_USAGE_Delete(p) p->pAPI->pfDelete(p)
#define GUI_USAGE_GetNextDirty(p,pxOff, yOff) p->pAPI->pfGetNextDirty(p,pxOff, yOff)
struct tsUSAGE_APIList {
tUSAGE_AddPixel* pfAddPixel;
tUSAGE_AddHLine* pfAddHLine;
tUSAGE_Clear* pfClear;
tUSAGE_CreateCompatible* pfCreateCompatible;
tUSAGE_Delete* pfDelete;
tUSAGE_GetNextDirty* pfGetNextDirty;
} ;
struct GUI_Usage {
I16P x0, y0, XSize, YSize;
const tUSAGE_APIList *pAPI;
I16 UseCnt;
};
/*****************************************************
*
* GUI_MEMDEV
*
******************************************************
*/
#if GUI_SUPPORT_MEMDEV
typedef struct /*GUI_MEMDEV*/ {
I16P x0, y0, XSize, YSize;
int NumColors;
unsigned BytesPerLine;
unsigned BitsPerPixel;
unsigned LayerIndex;
GUI_HMEM hUsage;
tLCDDEV_Color2Index* pfColor2Index;
tLCDDEV_Index2Color* pfIndex2Color;
tLCDDEV_GetIndexMask* pfGetIndexMask;
const tLCDDEV_APIList* pAPIList;
} GUI_MEMDEV;
#define GUI_MEMDEV_H2P(h) ((GUI_MEMDEV*)GUI_ALLOC_h2p(h))
void GUI_MEMDEV__CopyFromLCD (GUI_MEMDEV_Handle hMem);
void GUI_MEMDEV__GetRect (GUI_RECT* pRect);
unsigned GUI_MEMDEV__Color2Index (LCD_COLOR Color);
LCD_COLOR GUI_MEMDEV__Index2Color (int Index);
unsigned int GUI_MEMDEV__GetIndexMask(void);
GUI_MEMDEV_Handle GUI_MEMDEV__CreateFixed(int x0, int y0, int xsize, int ysize, int Flags
,const tLCDDEV_APIList * pMemDevAPI
,tLCDDEV_Color2Index* pfColor2Index
,tLCDDEV_Index2Color* pfIndex2Color
,tLCDDEV_GetIndexMask* pfGetIndexMask);
#endif
/*******************************************************************
*
* LCD_HL_ level defines
*
********************************************************************
*/
#if GUI_SUPPORT_AA
#define LCD_HL_DrawHLine GUI_Context.pLCD_HL->pfDrawHLine
#define LCD_HL_DrawPixel GUI_Context.pLCD_HL->pfDrawPixel
#else
#define LCD_HL_DrawHLine LCD_DrawHLine
#define LCD_HL_DrawPixel LCD_DrawPixel
#endif
/*********************************************************************
*
* Helper functions
*
***********************************************************************
*/
#define GUI_ZEROINIT(Obj) GUI_MEMSET(Obj, 0, sizeof(Obj))
int GUI_cos(int angle);
int GUI_sin(int angle);
void GL_DrawLine1(int x0, int y0, int x1, int y1);
extern const U32 GUI_Pow10[10];
/* GUIAALib.c --- direct anti-aliased drawing */
int GUI_AA_Init(int x0, int x1);
int GUI_AA_Init_HiRes(int x0, int x1);
void GUI_AA_Exit(void);
I16 GUI_AA_HiRes2Pixel(int HiRes);
void GL_FillCircleAA_HiRes(int x0, int y0, int r);
/* Conversion routines */
void GUI_AddHex (U32 v, U8 Len, char**ps);
void GUI_AddBin (U32 v, U8 Len, char**ps);
void GUI_AddDecMin (I32 v, char**ps);
void GUI_AddDec (I32 v, U8 Len, char**ps);
void GUI_AddDecShift(I32 v, U8 Len, U8 Shift, char**ps);
long GUI_AddSign (long v, char**ps);
int GUI_Long2Len (I32 v);
#define GUI_UC__GetCharSize(sText) GUI_Context.pUC_API->pfGetCharSize(sText)
#define GUI_UC__GetCharCode(sText) GUI_Context.pUC_API->pfGetCharCode(sText)
int GUI_UC__CalcSizeOfChar (U16 Char);
U16 GUI_UC__GetCharCodeInc (const char GUI_UNI_PTR ** ps);
int GUI_UC__NumChars2NumBytes(const char GUI_UNI_PTR * s, int NumChars);
int GUI_UC__NumBytes2NumChars(const char GUI_UNI_PTR * s, int NumBytes);
int GUI__GetLineNumChars (const char GUI_UNI_PTR *s, int MaxNumChars);
int GUI__GetNumChars (const char GUI_UNI_PTR *s);
int GUI__GetLineDistX (const char GUI_UNI_PTR *s, int Len);
int GUI__GetFontSizeY (void);
int GUI__HandleEOLine (const char GUI_UNI_PTR **ps);
void GUI__DispLine (const char GUI_UNI_PTR *s, int Len, const GUI_RECT* pr);
void GUI__AddSpaceHex (U32 v, U8 Len, char**ps);
void GUI__CalcTextRect (const char GUI_UNI_PTR* pText, const GUI_RECT* pTextRectIn, GUI_RECT* pTextRectOut, int TextAlign);
int GUI__WrapGetNumCharsDisp (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
int GUI__WrapGetNumCharsToNextLine (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
int GUI__WrapGetNumBytesToNextLine (const char GUI_UNI_PTR * pText, int xSize, GUI_WRAPMODE WrapMode);
void GUI__memset (U8 * p, U8 Fill, int NumBytes);
void GUI__memset16 (U16* p, U16 Fill, int NumWords);
int GUI__strlen (const char GUI_UNI_PTR * s);
int GUI__strcmp (const char GUI_UNI_PTR * s0, const char GUI_UNI_PTR * s1);
int GUI__strcmp_hp (GUI_HMEM hs0, const char GUI_UNI_PTR * s1);
/* Reading data routines */
U16 GUI__Read16(const U8 ** ppData);
U32 GUI__Read32(const U8 ** ppData);
/*********************************************************************
*
* 2d - GL
*
**********************************************************************
*/
void GL_DispChar (U16 c);
void GL_DrawArc (int x0, int y0, int rx, int ry, int a0, int a1);
void GL_DrawBitmap (const GUI_BITMAP GUI_UNI_PTR * pBM, int x0, int y0);
void GL_DrawCircle (int x0, int y0, int r);
void GL_DrawEllipse (int x0, int y0, int rx, int ry);
void GL_DrawHLine (int y0, int x0, int x1);
void GL_DrawPolygon (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
void GL_DrawPoint (int x, int y);
void GL_DrawLineRel (int dx, int dy);
void GL_DrawLineTo (int x, int y);
void GL_DrawLine (int x0, int y0, int x1, int y1);
void GL_MoveTo (int x, int y);
void GL_FillCircle (int x0, int y0, int r);
void GL_FillCircleAA (int x0, int y0, int r);
void GL_FillEllipse (int x0, int y0, int rx, int ry);
void GL_FillPolygon (const GUI_POINT* pPoints, int NumPoints, int x0, int y0);
void GL_SetDefault (void);
/************************************************************
*
* Callback pointers for dynamic linkage
*
*************************************************************
Dynamic linkage pointers reduces configuration hassles.
*/
typedef int GUI_tfTimer(void);
typedef char GUI_CURSOR_tfTempHide (const GUI_RECT* pRect);
typedef void GUI_CURSOR_tfTempUnhide(void);
typedef int WM_tfHandlePID(void);
/************************************************************
*
* Cursors
*
*************************************************************
*/
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowS[45];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowM[60];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_ArrowL[150];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossS[33];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossM[126];
extern GUI_CONST_STORAGE unsigned char GUI_Pixels_CrossL[248];
extern GUI_CONST_STORAGE unsigned char GUI_PixelsHeaderM[5 * 17];
extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPal;
extern GUI_CONST_STORAGE GUI_LOGPALETTE GUI_CursorPalI;
/************************************************************
*
* Text rotation
*
*************************************************************
*/
extern GUI_RECT GUI_RectDispString; /* Used by LCD_Rotate...() and GUI_DispStringInRect() */
/*********************************************************************
*
* Bitmap related functions
*
**********************************************************************
*/
int GUI_GetBitmapPixelIndex(const GUI_BITMAP GUI_UNI_PTR * pBMP, unsigned x, unsigned y);
GUI_COLOR GUI_GetBitmapPixelColor(const GUI_BITMAP GUI_UNI_PTR * pBMP, unsigned x, unsigned y);
#if defined(__cplusplus)
}
#endif
#endif /* Avoid multiple inclusion */
/************************************************************
*
* GUI_EXTERN declartions/definitions
*
*************************************************************
*/
#ifdef GL_CORE_C
#define GUI_EXTERN
#else
#if defined(__cplusplus)
#define GUI_EXTERN extern "C"
#else
#define GUI_EXTERN extern
#endif
#endif
GUI_EXTERN GUI_SADDR GUI_CONTEXT GUI_Context; /* Thread wide globals */
GUI_EXTERN GUI_SADDR char GUI_DecChar;
GUI_EXTERN GUI_tfTimer* GUI_pfTimerExec;
GUI_EXTERN WM_tfHandlePID* WM_pfHandlePID;
GUI_EXTERN void (*GUI_pfDispCharStyle)(U16 Char);
#if GUI_COMPILER_SUPPORTS_FP && GUI_SUPPORT_ROTATION
GUI_EXTERN const tLCD_APIList * GUI_pLCD_APIList; /* Used for rotating text */
#endif
#if GUI_SUPPORT_CURSOR
GUI_EXTERN GUI_CURSOR_tfTempHide* GUI_CURSOR_pfTempHide;
GUI_EXTERN GUI_CURSOR_tfTempUnhide* GUI_CURSOR_pfTempUnhide;
#endif
#if defined(__cplusplus)
extern "C" { /* Make sure we have C-declarations in C++ programs */
#endif
extern const GUI_UC_ENC_APILIST GUI__API_TableNone;
#if defined(__cplusplus)
}
#endif
#undef GUI_EXTERN
/*************************** End of file ****************************/