www.pudn.com > UCGUI390a.rar > GUICore.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        : GUICore.C 
Purpose     : Core routines 
---------------------------END-OF-HEADER------------------------------ 
*/ 
 
#include            /* needed for definition of NULL */ 
 
#define  GL_CORE_C 
 
#include "GUI_Private.h" 
#include "GUIDebug.h" 
 
#if GUI_WINSUPPORT 
  #include "WM_GUI.h" 
  #include "WM.h" 
#endif 
 
/********************************************************************* 
* 
*       Static data 
* 
********************************************************************** 
*/ 
#if GUI_SUPPORT_AA 
static const tLCD_HL_APIList _HL_APIList = { 
  LCD_DrawHLine, 
  LCD_DrawPixel 
}; 
#endif 
 
/********************************************************************* 
* 
*       Static code 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       _InitContext 
* 
* Purpose 
*   Initializes the given context. 
* 
* Special considerations 
*   Make sure that no GUI functions are called, because locking is 
*   not allowed here (GUITASK_INIT not yet called). 
*/ 
static void _InitContext(GUI_CONTEXT* pContext) { 
  /* memset(..,0,..) is not required, as this function is called only at startup of the GUI when data is 0 */ 
  #if GUI_SUPPORT_DEVICES 
    pContext->pDeviceAPI   = LCD_aAPI[0]; /* &LCD_L0_APIList; */ 
  #endif 
  pContext->pClipRect_HL = &GUI_Context.ClipRect; 
  LCD_L0_GetRect(&pContext->ClipRect); 
  #if GUI_SUPPORT_AA 
    pContext->pLCD_HL      = &_HL_APIList; 
  #endif 
  pContext->pAFont       = GUI_DEFAULT_FONT; 
  pContext->pClipRect_HL = &GUI_Context.ClipRect; 
  pContext->PenSize      = 1; 
  /* Variables in WM module */ 
  #if GUI_WINSUPPORT 
    pContext->hAWin    = WM_GetDesktopWindow(); 
  #endif 
  /* Variables in GUI_AA module */ 
  #if GUI_SUPPORT_AA 
    pContext->AA_Factor = 3; 
  #endif 
  pContext->Color   = GUI_INVALID_COLOR; 
  pContext->BkColor = GUI_INVALID_COLOR; 
  LCD_SetBkColor(GUI_DEFAULT_BKCOLOR); 
  LCD_SetColor(GUI_DEFAULT_COLOR); 
  pContext->pUC_API = &GUI__API_TableNone; 
} 
 
/********************************************************************* 
* 
*       Public code 
* 
********************************************************************** 
*/ 
/********************************************************************* 
* 
*       GUI_ClearRect 
*/ 
void GUI_ClearRect(int x0, int y0, int x1, int y1) { 
  GUI_DRAWMODE PrevDraw; 
  #if GUI_WINSUPPORT 
    GUI_RECT r; 
  #endif 
  GUI_LOCK(); 
  PrevDraw = LCD_SetDrawMode(GUI_DRAWMODE_REV); 
  #if GUI_WINSUPPORT 
    WM_ADDORG(x0,y0); 
    WM_ADDORG(x1,y1); 
    r.x0 = x0; 
    r.x1 = x1; 
    r.y0 = y0; 
    r.y1 = y1; 
    WM_ITERATE_START(&r) { 
  #endif 
  LCD_FillRect(x0,y0,x1,y1); 
  #if GUI_WINSUPPORT 
    } WM_ITERATE_END(); 
  #endif 
  LCD_SetDrawMode(PrevDraw); 
  GUI_UNLOCK(); 
} 
 
/********************************************************************* 
* 
*       GUI_Clear 
*/ 
void GUI_Clear(void) { 
  GUI_GotoXY(0,0);     /* Reset text cursor to upper left */ 
  GUI_ClearRect(GUI_XMIN, GUI_YMIN, GUI_XMAX, GUI_YMAX); 
} 
 
/********************************************************************* 
* 
*       GUI_Init 
* 
* Purpose: 
*   Init of GUI internal data structures & variables 
*/ 
int GUI_Init(void) { 
  int r; 
  GUI_DEBUG_LOG("\nGUI_Init()"); 
  /* Init system wide globals first */ 
  GUI_DecChar = '.'; 
  GUI_X_Init(); 
  /* Init context */ 
  _InitContext(&GUI_Context); 
  GUITASK_INIT(); 
  r = LCD_Init(); 
  #if GUI_WINSUPPORT 
    WM_Init(); 
  #endif 
  GUITASK_COPY_CONTEXT(); 
  #if defined(GUI_TRIAL_VERSION) 
  { 
    int i; 
    for (i = 0; i < 10; i++) { 
      GUI_DispString("This uC-GUI library\n" 
	                     "is for evaluation\n" 
	                     "purpose only.\n" 
	                     "A license is\n" 
	                     "required to use\n" 
	                     "it in a product\n\n" 
	                     "www.micrium.com\n"); 
      GUI_GotoXY(0, 0); 
    } 
  } 
  GUI_Clear(); 
  #endif 
  return r; 
} 
 
/*************************** End of file ****************************/