405 lines
14 KiB
C
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 ****************************/
|