Files
2021-01-30 11:26:41 +08:00

400 lines
15 KiB
C

/*********************************************************************
* Portions COPYRIGHT 2016 STMicroelectronics *
* Portions SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications *
**********************************************************************
* *
* (c) 1996 - 2015 SEGGER Microcontroller GmbH & Co. KG *
* *
* Internet: www.segger.com Support: support@segger.com *
* *
**********************************************************************
** emWin V5.32 - Graphical user interface for embedded applications **
All Intellectual Property rights in the Software belongs to SEGGER.
emWin 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 the following terms:
The software has been licensed to STMicroelectronics International
N.V. a Dutch company with a Swiss branch and its headquarters in Plan-
les-Ouates, Geneva, 39 Chemin du Champ des Filles, Switzerland for the
purposes of creating libraries for ARM Cortex-M-based 32-bit microcon_
troller products commercialized by Licensee only, sublicensed and dis_
tributed under the terms and conditions of the End User License Agree_
ment supplied by STMicroelectronics International N.V.
Full source code is available at: www.segger.com
We appreciate your understanding and fairness.
----------------------------------------------------------------------
File : WIDGET.h
Purpose : Widget interface
---------------------------END-OF-HEADER------------------------------
*/
/**
******************************************************************************
* @attention
*
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
*
* http://www.st.com/software_license_agreement_liberty_v2
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
******************************************************************************
*/
#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
/*********************************************************************
*
* Typedefs
*
**********************************************************************
*/
typedef struct {
WM_HWIN hWin;
int Cmd; /* WIDGET_ITEM_GET_XSIZE, WIDGET_ITEM_GET_YSIZE, WIDGET_ITEM_DRAW, */
int ItemIndex;
int Col;
int x0, y0, x1, y1;
void * p;
} WIDGET_ITEM_DRAW_INFO;
typedef int WIDGET_DRAW_ITEM_FUNC(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
typedef void WIDGET_PAINT (WM_HWIN hObj);
typedef void WIDGET_CREATE (WM_HWIN hObj);
typedef struct {
WIDGET_PAINT * pfPaint;
WIDGET_CREATE * pfCreate;
void * pSkinPrivate;
} WIDGET_SKIN;
/*********************************************************************
*
* Important: WIDGET_DRAW_ITEM_FUNC needs to be defined
* in SCROLLBAR.h!
*
**********************************************************************
*/
#include "SCROLLBAR.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
/*********************************************************************
*
* Unique widget id's
*/
#define BUTTON_ID 0x42555454UL /* BUTT */
#define CHECKBOX_ID 0x43484543UL /* CHEC */
#define DROPDOWN_ID 0x44524f50UL /* DROP */
#define EDIT_ID 0x45444954UL /* EDIT */
#define FRAMEWIN_ID 0x4652414dUL /* FRAM */
#define FRAMECLNT_ID 0x46524143UL /* FRAC */
#define GRAPH_ID 0x47524150UL /* GRAP */
#define HEADER_ID 0x48454144UL /* HEAD */
#define LISTBOX_ID 0x4C495342UL /* LISB */
#define LISTVIEW_ID 0x4C495356UL /* LISV */
#define LISTWHEEL_ID 0x4C495357UL /* LISW */
#define MENU_ID 0x4d454e55UL /* MENU */
#define MULTIEDIT_ID 0x4d554c45UL /* MULE */
#define MULTIPAGE_ID 0x4d554c50UL /* MULP */
#define MPAGECLNT_ID 0x4d50434CUL /* MPCL */
#define PROGBAR_ID 0x50524f47UL /* PROG */
#define RADIO_ID 0x52414449UL /* RADI */
#define SCROLLBAR_ID 0x5343524fUL /* SCRO */
#define SLIDER_ID 0x534c4944UL /* SLID */
#define SWIPELIST_ID 0x53574950UL /* SWIP */
#define TEXT_ID 0x54455854UL /* TEXT */
#define TREEVIEW_ID 0x54524545UL /* TREE */
#define ICONVIEW_ID 0x49434f4eUL /* ICON */
#define IMAGE_ID 0x494d4147UL /* IMAG */
#define SPINBOX_ID 0x5350494eUL /* SPIN */
#define KNOB_ID 0x4b4e4f42UL /* KNOB */
#define WINDOW_ID 0x57494e44UL /* WIND */
#define WIDGET_LOCK(hWin) ((WIDGET*)GUI_LOCK_H(hWin))
/*********************************************************************
*
* Config switches
*/
#ifndef WIDGET_USE_PARENT_EFFECT
#define WIDGET_USE_PARENT_EFFECT 0
#endif
#ifndef WIDGET_USE_FLEX_SKIN
#define WIDGET_USE_FLEX_SKIN 1
#endif
#if !defined(WIDGET_USE_SCHEME_SMALL) && !defined(WIDGET_USE_SCHEME_MEDIUM) && !defined(WIDGET_USE_SCHEME_LARGE)
#define WIDGET_USE_SCHEME_SMALL 1
#define WIDGET_USE_SCHEME_MEDIUM 0
#define WIDGET_USE_SCHEME_LARGE 0
#endif
#ifndef WIDGET_USE_SCHEME_SMALL
#define WIDGET_USE_SCHEME_SMALL 0
#endif
#ifndef WIDGET_USE_SCHEME_MEDIUM
#define WIDGET_USE_SCHEME_MEDIUM 0
#endif
#ifndef WIDGET_USE_SCHEME_LARGE
#define WIDGET_USE_SCHEME_LARGE 0
#endif
#if (WIDGET_USE_SCHEME_SMALL + WIDGET_USE_SCHEME_MEDIUM + WIDGET_USE_SCHEME_LARGE) > 1
#error Only one scheme can be selected!
#endif
/*********************************************************************
*
* 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 */
/*********************************************************************
*
* Skinning message identifiers
*/
#define WIDGET_ITEM_CREATE 0
#define WIDGET_ITEM_DRAW 1
#define WIDGET_ITEM_DRAW_ARROW 2
#define WIDGET_ITEM_DRAW_ARROW_L 3
#define WIDGET_ITEM_DRAW_ARROW_R 4
#define WIDGET_ITEM_DRAW_BACKGROUND 5
#define WIDGET_ITEM_DRAW_BITMAP 6
#define WIDGET_ITEM_DRAW_BUTTON 7
#define WIDGET_ITEM_DRAW_BUTTON_L 8
#define WIDGET_ITEM_DRAW_BUTTON_R 9
#define WIDGET_ITEM_DRAW_FOCUS 10
#define WIDGET_ITEM_DRAW_FRAME 11
#define WIDGET_ITEM_DRAW_OVERLAP 12
#define WIDGET_ITEM_DRAW_OVERLAY 13
#define WIDGET_ITEM_DRAW_SEP 14
#define WIDGET_ITEM_DRAW_SHAFT 15
#define WIDGET_ITEM_DRAW_SHAFT_L 16
#define WIDGET_ITEM_DRAW_SHAFT_R 17
#define WIDGET_ITEM_DRAW_TEXT 18
#define WIDGET_ITEM_DRAW_THUMB 19
#define WIDGET_ITEM_DRAW_TICKS 20
#define WIDGET_ITEM_GET_BORDERSIZE_B 21
#define WIDGET_ITEM_GET_BORDERSIZE_L 22
#define WIDGET_ITEM_GET_BORDERSIZE_R 23
#define WIDGET_ITEM_GET_BORDERSIZE_T 24
#define WIDGET_ITEM_GET_BUTTONSIZE 25
#define WIDGET_ITEM_GET_XSIZE 26
#define WIDGET_ITEM_GET_YSIZE 27
#define WIDGET_ITEM_GET_RADIUS 28
#define WIDGET_ITEM_APPLY_PROPS 29 // Not to be documented. Use this message identifier to update the
// properties of attached widgets from <WIDGET>_DrawSkinFlex().
#define WIDGET_DRAW_OVERLAY WIDGET_ITEM_DRAW_OVERLAY
#define WIDGET_DRAW_BACKGROUND WIDGET_ITEM_DRAW_BACKGROUND
/*********************************************************************
*
* Messages
*/
#define WM_WIDGET_SET_EFFECT (WM_WIDGET + 0)
/*********************************************************************
*
* Create flags
*/
#define WIDGET_CF_VERTICAL WIDGET_STATE_VERTICAL
/*********************************************************************
*
* Widget object
*
* The widget object is the base class for most widgets
*/
typedef struct {
int EffectSize;
void (* pfDrawUp) (void);
void (* pfDrawUpRect) (const GUI_RECT * pRect);
void (* pfDrawDown) (void);
void (* pfDrawDownRect)(const GUI_RECT * pRect);
void (* pfDrawFlat) (void);
void (* pfDrawFlatRect)(const GUI_RECT * pRect);
} WIDGET_EFFECT;
typedef struct {
WM_Obj Win;
const WIDGET_EFFECT* pEffect;
I16 Id;
U16 State;
#if GUI_DEBUG_LEVEL > 1
U32 DebugId;
#endif
} 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 (WM_HWIN hWin);
typedef WM_HMEM GUI_DRAW_HANDLE;
/* Declare Object constants (member functions etc) */
typedef struct {
void (* pfDraw) (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, int x, int y);
int (* pfGetXSize)(GUI_DRAW_HANDLE hDrawObj);
int (* pfGetYSize)(GUI_DRAW_HANDLE hDrawObj);
} 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;
};
/* GUI_DRAW_ API */
void GUI_DRAW__Draw (GUI_DRAW_HANDLE hDrawObj, WM_HWIN hObj, 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__DrawHLine (WIDGET * pWidget, int y, int x0, int x1);
void WIDGET__DrawTriangle (WIDGET * pWidget, int x, int y, int Size, int Inc);
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 * 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);
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);
void WIDGET_EFFECT_3D_SetColor (unsigned Index, GUI_COLOR Color);
void WIDGET_EFFECT_3D1L_SetColor (unsigned Index, GUI_COLOR Color);
void WIDGET_EFFECT_3D2L_SetColor (unsigned Index, GUI_COLOR Color);
void WIDGET_EFFECT_Simple_SetColor(unsigned Index, GUI_COLOR Color);
GUI_COLOR WIDGET_EFFECT_3D_GetColor (unsigned Index);
GUI_COLOR WIDGET_EFFECT_3D1L_GetColor (unsigned Index);
GUI_COLOR WIDGET_EFFECT_3D2L_GetColor (unsigned Index);
GUI_COLOR WIDGET_EFFECT_Simple_GetColor(unsigned Index);
int WIDGET_EFFECT_3D_GetNumColors(void);
int WIDGET_EFFECT_3D1L_GetNumColors(void);
int WIDGET_EFFECT_3D2L_GetNumColors(void);
int WIDGET_EFFECT_Simple_GetNumColors(void);
/*********************************************************************
*
* Compatibility macros
*
**********************************************************************
*/
#define WIDGET_SetDefaultEffect_3D() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D)
#define WIDGET_SetDefaultEffect_3D1L() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D1L)
#define WIDGET_SetDefaultEffect_3D2L() WIDGET_SetDefaultEffect(&WIDGET_Effect_3D2L)
#define WIDGET_SetDefaultEffect_None() WIDGET_SetDefaultEffect(&WIDGET_Effect_None)
#define WIDGET_SetDefaultEffect_Simple() WIDGET_SetDefaultEffect(&WIDGET_Effect_Simple)
#endif /* GUI_WINSUPPORT */
#if defined(__cplusplus)
}
#endif
#endif /* SLIDER_H */