BUTTON_SetSkinFlexProps()
Description
The function can be used to change the properties of the skin.
Prototype
void BUTTON_SetSkinFlexProps(const BUTTON_SKINFLEX_PROPS * pProps, int Index);
Additional information
The function passes a pointer to a BUTTON_SKINFLEX_PROPS structure. It can be used
to set up the colors and the radius of the skin.
The function BUTTON_GetSkinFlexProps() can be used to get the current attributes
of the skin.
WIDGET_ITEM_CREATE
The skinning routine should, if necessary, set up skin related properties like e.g.
transparency or text alignment.
WIDGET_ITEM_DRAW_BACKGROUND
The background of the widget should be drawn.
Elements of structure WIDGET_ITEM_DRAW_INFO
WIDGET_ITEM_DRAW_BITMAP
The optional button bitmap should be drawn.
WIDGET_ITEM_DRAW_INFO
Additional information
The function BUTTON_GetBitmap() can be used to get the optional button bitmap.
WIDGET_ITEM_DRAW_TEXT
The optional button text should be drawn.
WIDGET_ITEM_DRAW_INFO
Additional information
The function BUTTON_GetText() can be used to get the optional text.
from BUTTON.h
/*********************************************************************
*
* Create flags
*/
/* For compatibility only ! */
#define BUTTON_CF_HIDE WM_CF_HIDE
#define BUTTON_CF_SHOW WM_CF_SHOW
#define BUTTON_CF_MEMDEV WM_CF_MEMDEV
/*********************************************************************
*
* Color indices
*/
#define BUTTON_CI_UNPRESSED 0
#define BUTTON_CI_PRESSED 1
#define BUTTON_CI_DISABLED 2
/*********************************************************************
*
* Bitmap indices
*/
#define BUTTON_BI_UNPRESSED 0
#define BUTTON_BI_PRESSED 1
#define BUTTON_BI_DISABLED 2
/*********************************************************************
*
* States
*/
#define BUTTON_STATE_FOCUS WIDGET_STATE_FOCUS
#define BUTTON_STATE_PRESSED WIDGET_STATE_USER0
/*********************************************************************
*
* Skinning property indices
*/
#define BUTTON_SKINFLEX_PI_PRESSED 0
#define BUTTON_SKINFLEX_PI_FOCUSSED 1
#define BUTTON_SKINFLEX_PI_ENABLED 2
#define BUTTON_SKINFLEX_PI_DISABLED 3
/*********************************************************************
*
* Types
*
**********************************************************************
*/
typedef WM_HMEM BUTTON_Handle;
typedef struct {
GUI_COLOR aColorFrame[3];
GUI_COLOR aColorUpper[2];
GUI_COLOR aColorLower[2];
int Radius;
} BUTTON_SKINFLEX_PROPS;
/*********************************************************************
*
* Create function(s)
Note: the parameters to a create function may vary.
Some widgets may have multiple create functions
*/
BUTTON_Handle BUTTON_Create (int x0, int y0, int xSize, int ySize, int ID, int Flags);
BUTTON_Handle BUTTON_CreateAsChild (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int Id, int Flags);
BUTTON_Handle BUTTON_CreateEx (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id);
BUTTON_Handle BUTTON_CreateUser (int x0, int y0, int xSize, int ySize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, int NumExtraBytes);
BUTTON_Handle BUTTON_CreateIndirect(const GUI_WIDGET_CREATE_INFO * pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK * cb);
/*********************************************************************
*
* Managing default values
*
**********************************************************************
*/
GUI_COLOR BUTTON_GetDefaultBkColor (unsigned Index);
const GUI_FONT * BUTTON_GetDefaultFont (void);
int BUTTON_GetDefaultTextAlign (void);
GUI_COLOR BUTTON_GetDefaultTextColor (unsigned Index);
void BUTTON_SetDefaultBkColor (GUI_COLOR Color, unsigned Index);
GUI_COLOR BUTTON_SetDefaultFocusColor(GUI_COLOR Color);
void BUTTON_SetDefaultFont (const GUI_FONT * pFont);
void BUTTON_SetDefaultTextAlign (int Align);
void BUTTON_SetDefaultTextColor (GUI_COLOR Color, unsigned Index);
/*********************************************************************
*
* The callback ...
*
* Do not call it directly ! It is only to be used from within an
* overwritten callback.
*/
void BUTTON_Callback(WM_MESSAGE *pMsg);
/*********************************************************************
*
* Member functions
*
**********************************************************************
*/
GUI_COLOR BUTTON_GetBkColor (BUTTON_Handle hObj, unsigned int Index);
const GUI_BITMAP * BUTTON_GetBitmap(BUTTON_Handle hObj,unsigned int Index);
const GUI_FONT * BUTTON_GetFont (BUTTON_Handle hObj);
GUI_COLOR BUTTON_GetFrameColor (BUTTON_Handle hObj);
WIDGET * BUTTON_GetpWidget (BUTTON_Handle hObj);
void BUTTON_GetText (BUTTON_Handle hObj, char * pBuffer, int MaxLen);
GUI_COLOR BUTTON_GetTextColor (BUTTON_Handle hObj, unsigned int Index);
int BUTTON_GetTextAlign (BUTTON_Handle hObj);
int BUTTON_GetUserData (BUTTON_Handle hObj, void * pDest, int NumBytes);
unsigned BUTTON_IsPressed (BUTTON_Handle hObj);
void BUTTON_SetBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap);
void BUTTON_SetBitmapEx (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP * pBitmap, int x, int y);
void BUTTON_SetBkColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
void BUTTON_SetBMP (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap);
void BUTTON_SetBMPEx (BUTTON_Handle hObj, unsigned int Index, const void * pBitmap, int x, int y);
void BUTTON_SetFont (BUTTON_Handle hObj, const GUI_FONT * pfont);
void BUTTON_SetFrameColor (BUTTON_Handle hObj, GUI_COLOR Color);
void BUTTON_SetState (BUTTON_Handle hObj, int State); /* Not to be doc. */
void BUTTON_SetPressed (BUTTON_Handle hObj, int State);
GUI_COLOR BUTTON_SetFocusColor (BUTTON_Handle hObj, GUI_COLOR Color);
void BUTTON_SetFocussable (BUTTON_Handle hObj, int State);
void BUTTON_SetStreamedBitmap (BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap);
void BUTTON_SetStreamedBitmapEx(BUTTON_Handle hObj, unsigned int Index, const GUI_BITMAP_STREAM * pBitmap, int x, int y);
int BUTTON_SetText (BUTTON_Handle hObj, const char* s);
void BUTTON_SetTextAlign (BUTTON_Handle hObj, int Align);
void BUTTON_SetTextColor (BUTTON_Handle hObj, unsigned int Index, GUI_COLOR Color);
void BUTTON_SetTextOffset (BUTTON_Handle hObj, int xPos, int yPos);
void BUTTON_SetSelfDrawEx (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw, int x, int y); /* Not to be doc. */
void BUTTON_SetSelfDraw (BUTTON_Handle hObj, unsigned int Index, GUI_DRAW_SELF_CB * pDraw); /* Not to be doc. */
void BUTTON_SetReactOnLevel (void);
void BUTTON_SetReactOnTouch (void);
int BUTTON_SetUserData (BUTTON_Handle hObj, const void * pSrc, int NumBytes);
/*********************************************************************
*
* Member functions: Skinning
*
**********************************************************************
*/
void BUTTON_GetSkinFlexProps (BUTTON_SKINFLEX_PROPS * pProps, int Index);
void BUTTON_SetSkinClassic (BUTTON_Handle hObj);
void BUTTON_SetSkin (BUTTON_Handle hObj, WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
int BUTTON_DrawSkinFlex (const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo);
void BUTTON_SetSkinFlexProps (const BUTTON_SKINFLEX_PROPS * pProps, int Index);
void BUTTON_SetDefaultSkinClassic(void);
WIDGET_DRAW_ITEM_FUNC * BUTTON_SetDefaultSkin(WIDGET_DRAW_ITEM_FUNC * pfDrawSkin);
#define BUTTON_SKIN_FLEX BUTTON_DrawSkinFlex
===================================================================
Example
//Create structure
BUTTON_SKINFLEX_PROPS my_BUTTON_SKINFLEX_PROPS;
//Read structure
BUTTON_GetSkinFlexProps(&my_BUTTON_SKINFLEX_PROPS, 1);
//Set radius of BUTTON in structure
my_BUTTON_SKINFLEX_PROPS.Radius = 10;
//Write new structure
BUTTON_SetSkinFlexProps(&my_BUTTON_SKINFLEX_PROPS, 1);
Structure my_BUTTON_SKINFLEX_PROPS with new radius in Keil debugger
================================================================
Example for various button shape:
#include "DIALOG.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_BUTTON_2 (GUI_ID_USER + 0x03)
#define ID_BUTTON_3 (GUI_ID_USER + 0x04)
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 20, 10, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_1, 20, 40, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_2, 20, 70, 80, 20, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_3, 20, 100, 80, 20, 0, 0x0, 0 },
};
static BUTTON_SKINFLEX_PROPS _aProps[] = {
// BUTTON_SKINFLEX_PI_PRESSED
{
{GUI_RED, GUI_RED, GUI_DARKRED},
{GUI_LIGHTRED, GUI_RED },
{GUI_RED, GUI_DARKRED },
3
},
// BUTTON_SKINFLEX_PI_FOCUSSED
{
{GUI_DARKRED, GUI_RED, GUI_DARKGRAY},
{GUI_LIGHTGRAY, GUI_GRAY },
{GUI_GRAY, GUI_DARKGRAY },
3
},
// BUTTON_SKINFLEX_PI_ENABLED
{
{GUI_DARKRED, GUI_GRAY, GUI_DARKGRAY},
{GUI_LIGHTGRAY, GUI_GRAY },
{GUI_GRAY, GUI_DARKGRAY },
3
},
// BUTTON_SKINFLEX_PI_DISABLED
{
{0, 0, 0},
{0, 0 },
{0, 0 },
3
},
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
/*********************************************************************
*
* _CustomSkin
*/
static int _CustomSkin(const WIDGET_ITEM_DRAW_INFO * pDrawItemInfo) {
int Id;
GUI_POINT aPoints[3];
GUI_COLOR Color;
BUTTON_SKINFLEX_PROPS aPropsOld[4];
int i;
switch (pDrawItemInfo->Cmd) {
case WIDGET_ITEM_DRAW_BACKGROUND:
Id = WM_GetId(pDrawItemInfo->hWin);
switch (Id) {
case ID_BUTTON_0:
//
// Draw an elliptic button
//
if (BUTTON_IsPressed(pDrawItemInfo->hWin)) {
Color = GUI_YELLOW;
} else {
Color = GUI_RED;
}
GUI_SetColor(Color);
GUI_FillEllipse(pDrawItemInfo->x1 / 2, pDrawItemInfo->y1 / 2, pDrawItemInfo->x1 / 2 - 1, pDrawItemInfo->y1 / 2 - 1);
break;
case ID_BUTTON_1:
//
// Draw a triangle button
//
aPoints[0].x = pDrawItemInfo->x1 / 2;
aPoints[0].y = pDrawItemInfo->y0;
aPoints[1].x = pDrawItemInfo->x1;
aPoints[1].y = pDrawItemInfo->y1;
aPoints[2].x = pDrawItemInfo->x0;
aPoints[2].y = pDrawItemInfo->y1;
if (BUTTON_IsPressed(pDrawItemInfo->hWin)) {
Color = GUI_GREEN;
} else {
Color = GUI_CYAN;
}
GUI_SetColor(Color);
GUI_FillPolygon(aPoints, GUI_COUNTOF(aPoints), pDrawItemInfo->x0, pDrawItemInfo->y0);
break;
case ID_BUTTON_2:
//
// Draw a standard button with different colors
//
for (i = 0; i < 4; i++) {
BUTTON_GetSkinFlexProps(&aPropsOld[i], i); // Get default properties
BUTTON_SetSkinFlexProps(&_aProps[i], i); // Set new properties
}
BUTTON_DrawSkinFlex(pDrawItemInfo); // Draw button with new properties
for (i = 0; i < 4; i++) {
BUTTON_SetSkinFlexProps(&aPropsOld[i], i); // Restore old properties to avoid other buttons will be drawn with this properties
}
break;
case ID_BUTTON_3:
BUTTON_DrawSkinFlex(pDrawItemInfo);
break;
}
return 0;
default:
return BUTTON_DrawSkinFlex(pDrawItemInfo);
}
}
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int NCode;
int Id;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetSkin(hItem, _CustomSkin);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
BUTTON_SetSkin(hItem, _CustomSkin);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
BUTTON_SetSkin(hItem, _CustomSkin);
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
BUTTON_SetSkin(hItem, _CustomSkin);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* MainTask
*/
void MainTask(void) {
//
// Set flag for automatic use of memory devices. Calling before GUI_Init() makes sure the desktop window uses them, too.
//
WM_SetCreateFlags(WM_CF_MEMDEV);
//
// Initialize GUI
//
GUI_Init();
GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
while (1) {
GUI_Delay(100);
}
}
======================================================================
Example with bitmap on button
// USER START (Optionally insert additional includes)
// USER END
#include "DIALOG.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
// USER START (Optionally insert additional defines)
extern const GUI_BITMAP bmButton_AdvancedSettings64x64;
// USER END
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
// USER START (Optionally insert additional static data)
// USER END
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 320, 240, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 123, 80, 64, 64, 0, 0x0, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/*********************************************************************
*
* Static code
*
**********************************************************************
*/
static void _cb_Button(WM_MESSAGE * pMsg) {
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_DrawBitmap(&bmButton_AdvancedSettings64x64, 1, 1);
break;
default:
BUTTON_Callback(pMsg);
}
}
// USER START (Optionally insert additional static code)
// USER END
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
int NCode;
int Id;
// USER START (Optionally insert additional variables)
// USER END
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'Window'
//
//hItem = pMsg->hWin;
//WINDOW_SetBkColor(hItem, 0x00CFBEB1);
// USER START (Optionally insert additional code for further widget initialization)
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
//BUTTON_SetText(hItem,"");
//BUTTON_SetFocussable(hItem, 0);
// BUTTON_SetBkColor(hItem,BUTTON_BI_UNPRESSED,GUI_TRANSPARENT);
// BUTTON_SetBkColor(hItem,BUTTON_BI_PRESSED,GUI_TRANSPARENT);
WM_SetHasTrans(hItem);
WM_SetCallback(hItem, _cb_Button);
//BUTTON_SetBitmap(hItem, BUTTON_BI_UNPRESSED, &bmButton_AdvancedSettings64x64);
// USER END
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_0: // Notifications sent by 'Button'
switch(NCode) {
case WM_NOTIFICATION_CLICKED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
case WM_NOTIFICATION_RELEASED:
// USER START (Optionally insert code for reacting on notification message)
// USER END
break;
// USER START (Optionally insert additional code for further notification handling)
// USER END
}
break;
// USER START (Optionally insert additional code for further Ids)
// USER END
}
break;
// USER START (Optionally insert additional message handling)
// USER END
case WM_PAINT:
return;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateWindow
*/
//WM_HWIN CreateWindow(void);
//WM_HWIN CreateWindow(void) {
// WM_HWIN hWin;
//
// hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
// return hWin;
//}
// USER START (Optionally insert additional public code)
// USER END
/*********************************************************************
*
* MainTask
*/
void MainTask(void) {
WM_MESSAGE Msg = { 0 };
WM_HWIN hDialog;
GUI_Init();
//
// Use memory devices for all windows
//
#if GUI_SUPPORT_MEMDEV
WM_SetCreateFlags(WM_CF_MEMDEV);
//WM_EnableMemdev(WM_HBKWIN);
#endif
WM_SetDesktopColor(GUI_GREEN);
hDialog = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), 0, 0, 0, 0);
WM_SetHasTrans(hDialog);
WM_SetCallback(hDialog, _cbDialog);
Msg.MsgId = WM_INIT_DIALOG; // Send WM_INIT_DIALOG
WM_SendMessage(hDialog, &Msg);
while(1) {
// _Font = _Color = 0;
//GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 0);
GUI_Delay(1000);
}
}
========================================================================
Комментариев нет:
Отправить комментарий