/********************************************************************* * * _OnPaint * * Purpose: Paints the owner drawn button */ static void _OnPaint(BUTTON_Handle hObj) { int Index; char ac[50]; GUI_RECT Rect; Index = (WIDGET_GetState(hObj) & BUTTON_STATE_PRESSED) ? 1 : 0; WM_GetClientRect(&Rect); // // Draw filled ellipse with button background color // GUI_SetColor(BUTTON_GetBkColor(hObj, Index)); GUI_FillEllipse(Rect.x1 / 2, Rect.y1 / 2, Rect.x1 / 2, Rect.y1 / 2); // // Draw black shape // GUI_SetColor(GUI_BLACK); GUI_DrawEllipse(Rect.x1 / 2, Rect.y1 / 2, Rect.x1 / 2, Rect.y1 / 2); // // Draw button text with widget attributes // GUI_SetColor(BUTTON_GetTextColor(hObj, Index)); GUI_SetBkColor(BUTTON_GetBkColor(hObj, Index)); GUI_SetFont(BUTTON_GetFont(hObj)); BUTTON_GetText(hObj, ac, sizeof(ac)); if (_Pressed) { strcpy(ac + strlen(ac), "\npressed"); } GUI_DispStringInRect(ac, &Rect, GUI_TA_HCENTER | GUI_TA_VCENTER); }
/********************************************************************* * * _cbDialogNumPad * * Purpose: * Callback function of the numpad. */ static void _cbDialogNumPad(WM_MESSAGE * pMsg) { GUI_RECT r; int i, NCode, Id, Pressed = 0; WM_HWIN hDlg, hItem; hDlg = pMsg->hWin; switch (pMsg->MsgId) { case WM_PAINT: WM_GetClientRect(&r); GUI_SetColor(0x000000); GUI_DrawRect(r.x0, r.y0, r.x1, r.y1); /* Draw rectangle around it */ /* Draw the bright sides */ GUI_SetColor(0xffffff); GUI_DrawHLine(r.y0 + 1, r.x0 + 1, r.x1 - 2); /* Draw top line */ GUI_DrawVLine(r.x0 + 1, r.y0 + 1, r.y1 - 2); /* Draw the dark sides */ GUI_SetColor(0x555555); GUI_DrawHLine(r.y1-1, r.x0 + 1, r.x1 - 1); GUI_DrawVLine(r.x1-1, r.y0 + 1, r.y1 - 2); break; case WM_INIT_DIALOG: for (i = 0; i < GUI_COUNTOF(_aDialogNumPad) - 1; i++) { hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + i); BUTTON_SetFocussable(hItem, 0); /* Set all buttons non focussable */ switch (i) { case 13: BUTTON_SetBitmapEx(hItem, 0, &_bmArrowLeft, 7, 7); /* Set bitmap for arrow left button (unpressed) */ BUTTON_SetBitmapEx(hItem, 1, &_bmArrowLeft, 7, 7); /* Set bitmap for arrow left button (pressed) */ break; case 14: BUTTON_SetBitmapEx(hItem, 0, &_bmArrowRight, 7, 7); /* Set bitmap for arrow right button (unpressed) */ BUTTON_SetBitmapEx(hItem, 1, &_bmArrowRight, 7, 7); /* Set bitmap for arrow right button (pressed) */ break; } } hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + 12); break; case WM_NOTIFY_PARENT: Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */ NCode = pMsg->Data.v; /* Notification code */ switch (NCode) { case WM_NOTIFICATION_CLICKED: Pressed = 1; case WM_NOTIFICATION_RELEASED: if ((Id >= GUI_ID_USER) && (Id <= (GUI_ID_USER + GUI_COUNTOF(_aDialogNumPad) - 1))) { int Key; if (Id < GUI_ID_USER + 11) { char acBuffer[10]; BUTTON_GetText(pMsg->hWinSrc, acBuffer, sizeof(acBuffer)); /* Get the text of the button */ Key = acBuffer[0]; } else { Key = _aKey[Id - GUI_ID_USER - 11]; /* Get the text from the array */ } GUI_SendKeyMsg(Key, Pressed); /* Send a key message to the focussed window */ } break; } default: WM_DefaultProc(pMsg); } }