232 lines
7.4 KiB
C
232 lines
7.4 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 : WIDGET.h
|
|
Purpose : Widget interface
|
|
---------------------------END-OF-HEADER------------------------------
|
|
*/
|
|
|
|
#ifndef WIDGET_H /* Avoid multiple inclusion */
|
|
#define WIDGET_H
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" { /* Make sure we have C-declarations in C++ programs */
|
|
#endif
|
|
|
|
#include "WM_Intern.h" /* Window manager, including some internals, which speed things up */
|
|
|
|
#if GUI_WINSUPPORT
|
|
|
|
#include "SCROLLBAR.h"
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* defines
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
#define WIDGET_H2P(hWin) ((WIDGET*)GUI_ALLOC_h2p(hWin))
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* States
|
|
*/
|
|
|
|
#define WIDGET_STATE_FOCUS (1<<0)
|
|
#define WIDGET_STATE_VERTICAL (1<<3)
|
|
#define WIDGET_STATE_FOCUSSABLE (1<<4)
|
|
|
|
#define WIDGET_STATE_USER0 (1<<8) /* Freely available for derived widget */
|
|
#define WIDGET_STATE_USER1 (1<<9) /* Freely available for derived widget */
|
|
#define WIDGET_STATE_USER2 (1<<10) /* Freely available for derived widget */
|
|
|
|
#define WIDGET_ITEM_DRAW 0
|
|
#define WIDGET_ITEM_GET_XSIZE 1
|
|
#define WIDGET_ITEM_GET_YSIZE 2
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Messages
|
|
*/
|
|
|
|
#define WM_WIDGET_SET_EFFECT WM_WIDGET + 0
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Create flags
|
|
*/
|
|
|
|
#define WIDGET_CF_VERTICAL WIDGET_STATE_VERTICAL
|
|
|
|
/*********************************************************************
|
|
*
|
|
* typedefs
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
typedef struct {
|
|
WM_HWIN hWin;
|
|
int Cmd; /* WIDGET_ITEM_GET_XSIZE, WIDGET_ITEM_GET_YSIZE, WIDGET_ITEM_DRAW, */
|
|
int ItemIndex;
|
|
int x0, y0;
|
|
} WIDGET_ITEM_DRAW_INFO;
|
|
|
|
typedef int WIDGET_DRAW_ITEM_FUNC(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Widget object
|
|
*
|
|
* The widget object is the base class for most widgets
|
|
*/
|
|
typedef struct {
|
|
void (*pfDrawUp)(void);
|
|
void (*pfDrawDown)(void);
|
|
void (*pfDrawUpRect) (const GUI_RECT *pRect);
|
|
void (*pfDrawDownRect)(const GUI_RECT *pRect);
|
|
void (*pfGetRect)(GUI_RECT *pRect);
|
|
int EffectSize;
|
|
} WIDGET_EFFECT;
|
|
|
|
typedef struct {
|
|
WM_Obj Win;
|
|
const WIDGET_EFFECT* pEffect;
|
|
I16 Id;
|
|
U16 State;
|
|
} WIDGET;
|
|
|
|
|
|
/*********************************************************************
|
|
*
|
|
* GUI_DRAW
|
|
*
|
|
* The GUI_DRAW object is used as base class for selfdrawing,
|
|
* non-windows objects. They are used as content of different widgets,
|
|
* such as the bitmap or header widgets.
|
|
*/
|
|
/* Declare Object struct */
|
|
typedef struct GUI_DRAW GUI_DRAW;
|
|
typedef void GUI_DRAW_SELF_CB (void);
|
|
/* Declare Object constants (member functions etc) */
|
|
typedef struct {
|
|
void (* pfDraw) (const GUI_DRAW * pObj, int x, int y);
|
|
int (* pfGetXSize)(const GUI_DRAW * pObj);
|
|
int (* pfGetYSize)(const GUI_DRAW * pObj);
|
|
} GUI_DRAW_CONSTS;
|
|
|
|
/* Declare Object */
|
|
struct GUI_DRAW {
|
|
const GUI_DRAW_CONSTS* pConsts;
|
|
union {
|
|
const void * pData;
|
|
GUI_DRAW_SELF_CB* pfDraw;
|
|
} Data;
|
|
I16 xOff, yOff;
|
|
};
|
|
|
|
typedef WM_HMEM GUI_DRAW_HANDLE;
|
|
|
|
/* GUI_DRAW_ API */
|
|
void GUI_DRAW__Draw (GUI_DRAW_HANDLE hDrawObj, int x, int y);
|
|
int GUI_DRAW__GetXSize(GUI_DRAW_HANDLE hDrawObj);
|
|
int GUI_DRAW__GetYSize(GUI_DRAW_HANDLE hDrawObj);
|
|
|
|
/* GUI_DRAW_ Constructurs for different objects */
|
|
WM_HMEM GUI_DRAW_BITMAP_Create (const GUI_BITMAP* pBitmap, int x, int y);
|
|
WM_HMEM GUI_DRAW_BMP_Create (const void* pBMP, int x, int y);
|
|
WM_HMEM GUI_DRAW_STREAMED_Create(const GUI_BITMAP_STREAM * pBitmap, int x, int y);
|
|
WM_HMEM GUI_DRAW_SELF_Create(GUI_DRAW_SELF_CB* pfDraw, int x, int y);
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Global data
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
extern const WIDGET_EFFECT WIDGET_Effect_3D;
|
|
extern const WIDGET_EFFECT WIDGET_Effect_3D1L;
|
|
extern const WIDGET_EFFECT WIDGET_Effect_3D2L;
|
|
extern const WIDGET_EFFECT WIDGET_Effect_None;
|
|
extern const WIDGET_EFFECT WIDGET_Effect_Simple;
|
|
|
|
/*********************************************************************
|
|
*
|
|
* Internal API routines
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
|
|
void WIDGET__DrawFocusRect(WIDGET* pWidget, const GUI_RECT* pRect, int Dist);
|
|
void WIDGET__DrawVLine(WIDGET* pWidget, int x, int y0, int y1);
|
|
void WIDGET__EFFECT_DrawDownRect(WIDGET* pWidget, GUI_RECT* pRect);
|
|
void WIDGET__EFFECT_DrawDown(WIDGET* pWidget);
|
|
void WIDGET__EFFECT_DrawUpRect(WIDGET* pWidget, GUI_RECT* pRect);
|
|
void WIDGET__FillRectEx(WIDGET* pWidget, const GUI_RECT* pRect);
|
|
int WIDGET__GetWindowSizeX(WM_HWIN hWin);
|
|
GUI_COLOR WIDGET__GetBkColor(WM_HWIN hObj);
|
|
int WIDGET__GetXSize(const WIDGET* pWidget);
|
|
int WIDGET__GetYSize(const WIDGET* pWidget);
|
|
void WIDGET__GetClientRect(WIDGET* pWidget, GUI_RECT* pRect);
|
|
void WIDGET__GetInsideRect(WIDGET* pWidget, GUI_RECT* pRect);
|
|
void WIDGET__Init(WIDGET* pWidget, int Id, U16 State);
|
|
void WIDGET__RotateRect90(WIDGET* pWidget, GUI_RECT* pDest, const GUI_RECT* pRect);
|
|
void WIDGET__SetScrollState(WM_HWIN hWin, const WM_SCROLL_STATE* pVState, const WM_SCROLL_STATE* pState);
|
|
void WIDGET__FillStringInRect(const char GUI_UNI_PTR * pText, const GUI_RECT * pFillRect, const GUI_RECT * pTextRectMax, const GUI_RECT * pTextRectAct);
|
|
|
|
/*********************************************************************
|
|
*
|
|
* API routines
|
|
*
|
|
**********************************************************************
|
|
*/
|
|
void WIDGET_SetState (WM_HWIN hObj, int State);
|
|
void WIDGET_AndState (WM_HWIN hObj, int State);
|
|
void WIDGET_OrState (WM_HWIN hObj, int State);
|
|
int WIDGET_HandleActive (WM_HWIN hObj, WM_MESSAGE* pMsg);
|
|
int WIDGET_GetState (WM_HWIN hObj);
|
|
int WIDGET_SetWidth (WM_HWIN hObj, int Width);
|
|
|
|
void WIDGET_EFFECT_3D_DrawUp(void);
|
|
|
|
void WIDGET_SetDefaultEffect_3D (void);
|
|
void WIDGET_SetDefaultEffect_3D1L (void);
|
|
void WIDGET_SetDefaultEffect_3D2L (void);
|
|
void WIDGET_SetDefaultEffect_None (void);
|
|
void WIDGET_SetDefaultEffect_Simple(void);
|
|
|
|
const WIDGET_EFFECT* WIDGET_SetDefaultEffect(const WIDGET_EFFECT* pEffect);
|
|
|
|
void WIDGET_SetEffect (WM_HWIN hObj, const WIDGET_EFFECT* pEffect);
|
|
|
|
const WIDGET_EFFECT* WIDGET_GetDefaultEffect(void);
|
|
int WIDGET_SetWidth(WM_HWIN hObj, int Width);
|
|
|
|
|
|
#endif /* GUI_WINSUPPORT */
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* SLIDER_H */
|
|
|
|
|
|
|
|
|