From 788db64b8642bf31de6930d18a62177c64163ee0 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 13 Mar 2015 12:24:02 +0200 Subject: Add grlib, fixes #5 --- grlib/keyboard.h | 965 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 965 insertions(+) create mode 100644 grlib/keyboard.h (limited to 'grlib/keyboard.h') diff --git a/grlib/keyboard.h b/grlib/keyboard.h new file mode 100644 index 0000000..06e077c --- /dev/null +++ b/grlib/keyboard.h @@ -0,0 +1,965 @@ +//***************************************************************************** +// +// keyboard.h - +// +// Copyright (c) 2013-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva Graphics Library. +// +//***************************************************************************** + +#ifndef __KEYBOARD_H__ +#define __KEYBOARD_H__ + +//***************************************************************************** +// +//! \addtogroup keyboard_api +//! @{ +// +//***************************************************************************** + +//***************************************************************************** +// +// If building with a C++ compiler, make all of the definitions in this header +// have a C binding. +// +//***************************************************************************** +#ifdef __cplusplus +extern "C" +{ +#endif + +//***************************************************************************** +// +//! The structure to describe a image based key on the keyboard. +// +//***************************************************************************** +typedef struct +{ + // + // ! The Unicode value for this key. + // + uint32_t ui32Code; + + // + // ! The width as a percentage in units of 1000. + // + uint16_t ui16Width; + + // + // ! The height as a percentage in units of 1000. + // + uint16_t ui16Height; + + // + // ! The X position as a percentage in units of 1000. + // + uint16_t ui16XPos; + + // + // ! The Y position as a percentage in units of 1000. + // + uint16_t ui16YPos; + + // + //! A pointer to the image to be drawn onto this key, if + //! KEYBOARD_STYLE_IMG is selected. + // + const uint8_t *pui8Image; + + // + //! A pointer to the image to be drawn onto this key when it is pressed, if + //! KEYBOARD_STYLE_IMG is selected. + // + const uint8_t *pui8PressImage; +} +tKeyImage; + +//***************************************************************************** +// +//! The structure to describe a text based key on the keyboard. +// +//***************************************************************************** +typedef struct +{ + // + // ! The Unicode value for this key. + // + uint32_t ui32Code; + + // + // ! The height as a percentage in units of 1000. + // + uint16_t ui16Width; + + // + // ! The width as a percentage in units of 1000. + // + uint16_t ui16Height; + + // + // ! The X position as a percentage in units of 1000. + // + uint16_t ui16XPos; + + // + // ! The Y position as a percentage in units of 1000. + // + uint16_t ui16YPos; +} +tKeyText; + +//***************************************************************************** +// +// Special Unicode values used by the keyboard +// +//***************************************************************************** + +//***************************************************************************** +// +//! This code is used to map a backspace key onto a keyboard. This is used +//! in the tKeyText.ui32Code or tKeyImage.ui32Code values. +// +//***************************************************************************** +#define UNICODE_BACKSPACE 0x00000008 + +//***************************************************************************** +// +//! This code is used to map a return/enter key onto a keyboard. This is used +//! in the tKeyText.ui32Code or tKeyImage.ui32Code values. +// +//***************************************************************************** +#define UNICODE_RETURN 0x0000000D + +//***************************************************************************** +// +//! This code is used to map a shift/caps-lock key onto a keyboard. This value +//! causes the keyboard to toggle between lower-case, upper-case and caps lock +//! modes. This value is used in the tKeyText.ui32Code or tKeyImage.ui32Code +//! values. +// +//***************************************************************************** +#define UNICODE_CUSTOM_SHIFT 0x000f0000 + +//***************************************************************************** +// +//! This code is used to map a mode toggle key onto a keyboard. This value +//! causes the keyboard to toggle between the custom entries in a keyboard. +//! This value is used in the tKeyText.ui32Code or tKeyImage.ui32Code +//! values. +// +//***************************************************************************** +#define UNICODE_CUSTOM_MODE_TOG 0x000f0001 + +//***************************************************************************** +// +//! This code is used to identify a keyboard as the upper-case keyboard. +// +//***************************************************************************** +#define UNICODE_CUSTOM_UPCASE 0x000f0002 + +//***************************************************************************** +// +//! This code is used to identify a keyboard as the lower-case keyboard. +// +//***************************************************************************** +#define UNICODE_CUSTOM_LOWCASE 0x000f0003 + +//***************************************************************************** +// +//! This code is used to identify a keyboard as the lower-case keyboard. +// +//***************************************************************************** +#define UNICODE_CUSTOM_NUMERIC 0x000f0004 + +//***************************************************************************** +// +//! This code is used to identify the first custom keyboard entry. +// +//***************************************************************************** +#define UNICODE_CUSTOM_KBD 0x000f0005 + +//***************************************************************************** +// +// Keyboard events that are passed to the pfnOnEvent function. +// +//***************************************************************************** +#define KEYBOARD_EVENT_PRESS 0x00000001 +#define KEYBOARD_EVENT_RELEASE 0x00000002 + +//***************************************************************************** +// +//! This structure holds a single keyboard entry. Keyboards are typically +//! made up of an array of these structures. +// +//***************************************************************************** +typedef struct +{ + // + //! This value holds the identifier for this keyboard. + // + uint32_t ui32Code; + + // + //! This value holds the total number of keys for this keyboard entry. + // + uint16_t ui16NumKeys; + + // + //! This value holds the static flag entries for this keyboard entry. + // + uint16_t ui16Flags; + + // + //! This union holds either the text based keys or image based keys for + //! this keyboard. + // + union + { + const tKeyImage *psKeysImage; + const tKeyText *psKeysText; + } + uKeys; +} +tKeyboard; + +//***************************************************************************** +// +//! The structure that describes a keyboard widget. +// +//***************************************************************************** +typedef struct +{ + // + //! The generic widget information. + // + tWidget sBase; + + // + //! The style for this widget. This is a set of flags defined by + //! KEYBOARD_STYLE_xxx. + // + uint32_t ui32Style; + + // + //! The 24-bit RGB color used to fill background of the on-screen + //! keyboard if KEYBOARD_STYLE_BG is selected. + // + uint32_t ui32BackgroundColor; + + // + //! The 24-bit RGB color used to fill keys of the on-screen + //! keyboard if KEYBOARD_STYLE_FILL is selected, and to use as the + //! background color if KEYBOARD_STYLE_TEXT_OPAQUE is selected. + // + uint32_t ui32FillColor; + + // + //! The 24-bit RGB color used to fill keys when pressed, if + //! KEYBOARD_STYLE_FILL is selected, and to use as the background color + //! if KEYBOARD_STYLE_TEXT_OPAQUE is selected. + // + uint32_t ui32PressFillColor; + + // + //! The 24-bit RGB color used to outline the keys, if + //! KEYBOARD_STYLE_OUTLINE is selected. + // + uint32_t ui32OutlineColor; + + // + //! The 24-bit RGB color used to draw text on the keys. + // + uint32_t ui32TextColor; + + // + //! A pointer to the font used to render the text on the keys. + // + const tFont *psFont; + + // + //! The number of pointer events to delay before starting to auto-repeat, + //! if KEYBOARD_STYLE_AUTO_REPEAT is selected. The amount of time to which + //! this corresponds is dependent upon the rate at which pointer events are + //! generated by the pointer driver. + // + uint16_t ui16AutoRepeatDelay; + + // + //! The number of pointer events between key presses generated by the + //! auto-repeat function, if KEYBOARD_STYLE_AUTO_REPEAT is selected. The + //! amount of time to which this corresponds is dependent up on the rate at + //! which pointer events are generated by the pointer driver. + // + uint16_t ui16AutoRepeatRate; + + // + //! The number of pointer events that have occurred. This is used when + //! KEYBOARD_STYLE_AUTO_REPEAT is selected to generate the auto-repeat + //! events. + // + uint32_t ui32AutoRepeatCount; + + // + //! The active keyboard index, which should be initialized to 0. + // + uint32_t ui32Active; + + // + //! The total number of active keyboards in the psKeyboards structure + //! member. + // + uint32_t ui32NumKeyboards; + + // + //! The array of keyboards used by the application. + // + const tKeyboard *psKeyboards; + + // + //! A pointer to the function to be called when a key is pressed. + //! This is repeatedly called when KEYBOARD_STYLE_AUTO_REPEAT is selected. + // + void (*pfnOnEvent)(tWidget *psWidget, uint32_t ui32Key, + uint32_t ui32Event); + + // + //! The active key being pressed. + // + uint32_t ui32KeyPressed; + + // + //! Internal state flags for the keyboard. + // + uint32_t ui32Flags; +} +tKeyboardWidget; + +//***************************************************************************** +// +//! This flag indicates that the keys should be outlined. +// +//***************************************************************************** +#define KEYBOARD_STYLE_OUTLINE 0x00000001 + +//***************************************************************************** +// +//! This flag indicates that the keys should be filled. +// +//***************************************************************************** +#define KEYBOARD_STYLE_FILL 0x00000002 + +//***************************************************************************** +// +//! This flag indicates that the keys should have text drawn on them. +// +//***************************************************************************** +#define KEYBOARD_STYLE_TEXT 0x00000004 + +//***************************************************************************** +// +//! This flag indicates that the keys should have an image drawn on them. +// +//***************************************************************************** +#define KEYBOARD_STYLE_IMG 0x00000008 + +//***************************************************************************** +// +//! This flag indicates that the text on the keys should be drawn opaque (in +//! other words, drawing the background pixels as well as the foreground +//! pixels). +// +//***************************************************************************** +#define KEYBOARD_STYLE_TEXT_OPAQUE \ + 0x00000010 + +//***************************************************************************** +// +//! This flag indicates that the keys should auto-repeat, generating +//! repeated click events while it is pressed. +// +//***************************************************************************** +#define KEYBOARD_STYLE_AUTO_REPEAT \ + 0x00000020 + +//***************************************************************************** +// +//! This flag indicates that a key is pressed. +// +//***************************************************************************** +#define KEYBOARD_STYLE_PRESS_NOTIFY \ + 0x00000040 + +//***************************************************************************** +// +//! This flag indicates that the key press callback should be made when +//! the key is released rather than when it is pressed. This does not +//! affect the operation of auto repeat keys. +// +//***************************************************************************** +#define KEYBOARD_STYLE_RELEASE_NOTIFY \ + 0x00000080 + +//***************************************************************************** +// +//! This flag indicates that the keys should be filled. +// +//***************************************************************************** +#define KEYBOARD_STYLE_BG 0x00000100 + + +//***************************************************************************** +// +//! Declares an initialized keyboard widget data structure. +//! +//! \param psParent is a pointer to the parent widget. +//! \param psNext is a pointer to the sibling widget. +//! \param psChild is a pointer to the first child widget. +//! \param psDisplay is a pointer to the display on which to draw the keyboard. +//! \param i32X is the X coordinate of the upper left corner of the keyboard. +//! \param i32Y is the Y coordinate of the upper left corner of the keyboard. +//! \param i32Width is the width of the keyboard. +//! \param i32Height is the height of the keyboard. +//! \param ui32Style is the style to be applied to the keyboard. +//! \param ui32BackgroundColor is the background color for the keyboard. +//! \param ui32FillColor is the color used to fill in the keyboard. +//! \param ui32PressFillColor is the color used to fill in the keyboard when +//! a key is pressed. +//! \param ui32OutlineColor is the color used to outline the keys. +//! \param ui32TextColor is the color used to draw text on the keys. +//! \param psFont is a pointer to the font used to draw text on the keys. +//! \param ui16AutoRepeatDelay is the delay before starting auto-repeat. +//! \param ui16AutoRepeatRate is the rate at which auto-repeat events are +//! generated. +//! \param ui32NumKeyboards is the number of keyboards in the psKeyboard +//! parameter. +//! \param psKeyboards is a pointer to the keyboard array to use for this +//! keyboard. +//! \param pfnOnEvent is a pointer to the function that is called when a key +//! is pressed. +//! +//! This macro provides an initialized keyboard widget data structure, which +//! can be used to construct the widget tree at compile time in global +//! variables (as opposed to run-time via function calls). This must be +//! assigned to a variable, such as: +//! +//! \verbatim +//! tKeyboardWidget g_sKeyboard = KeyboardStruct(...); +//! \endverbatim +//! +//! Or, in an array of variables: +//! +//! \verbatim +//! tKeyboardWidget g_psKeyboards[] = +//! { +//! KeyboardStruct(...), +//! KeyboardStruct(...) +//! }; +//! \endverbatim +//! +//! \e ui32Style is the logical OR of the following: +//! +//! - \b PB_STYLE_OUTLINE to indicate that the keys should be outlined. +//! - \b PB_STYLE_FILL to indicate that the keys should be filled. +//! - \b PB_STYLE_IMG to indicate that the keys should have an image +//! drawn on them (using \e pui8Image). +//! - \b PB_STYLE_TEXT_OPAQUE to indicate that the key text should be +//! drawn opaque (in other words, drawing the background pixels). +//! - \b PB_STYLE_AUTO_REPEAT to indicate that auto-repeat should be used. +//! - \b PB_STYLE_RELEASE_NOTIFY to indicate that the callback should be made +//! when a key is released. If absent, the callback is called when the +//! key is initially pressed. +//! +//! \return Nothing; this is not a function. +// +//***************************************************************************** +#define KeyboardStruct(psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, ui32Style, ui32BackgroundColor, \ + ui32FillColor, ui32PressFillColor, ui32OutlineColor, \ + ui32TextColor, psFont, ui16AutoRepeatDelay, \ + ui16AutoRepeatRate, ui32NumKeyboards, psKeyboards, \ + pfnOnEvent) \ + { \ + { \ + sizeof(tKeyboardWidget), \ + (tWidget *)(psParent), \ + (tWidget *)(psNext), \ + (tWidget *)(psChild), \ + psDisplay, \ + { \ + i32X, \ + i32Y, \ + (i32X) + (i32Width) - 1, \ + (i32Y) + (i32Height) - 1 \ + }, \ + KeyboardMsgProc \ + }, \ + ui32Style, \ + ui32BackgroundColor, \ + ui32FillColor, \ + ui32PressFillColor, \ + ui32OutlineColor, \ + ui32TextColor, \ + psFont, \ + ui16AutoRepeatDelay, \ + ui16AutoRepeatRate, \ + 0, \ + 0, \ + ui32NumKeyboards, \ + psKeyboards, \ + pfnOnEvent, \ + 0, \ + 0 \ + } + +//***************************************************************************** +// +//! Declares an initialized variable containing a keyboard widget data +//! structure. +//! +//! \param sName is the name of the variable to be declared. +//! \param psParent is a pointer to the parent widget. +//! \param psNext is a pointer to the sibling widget. +//! \param psChild is a pointer to the first child widget. +//! \param psDisplay is a pointer to the display on which to draw the keyboard. +//! \param i32X is the X coordinate of the upper left corner of the keyboard. +//! \param i32Y is the Y coordinate of the upper left corner of the keyboard. +//! \param i32Width is the width of the keyboard. +//! \param i32Height is the height of the keyboard. +//! \param ui32Style is the style to be applied to the keyboard. +//! \param ui32BackgroundColor is the background color for the keyboard. +//! \param ui32FillColor is the color used to fill in the keys. +//! \param ui32PressFillColor is the color used to fill in the keys when +//! pressed. +//! \param ui32OutlineColor is the color used to outline the keys. +//! \param ui32TextColor is the color used to draw text on the keys. +//! \param psFont is a pointer to the font to be used to draw text on the keys. +//! \param ui16AutoRepeatDelay is the delay before starting auto-repeat. +//! \param ui16AutoRepeatRate is the rate at which auto-repeat events are +//! generated. +//! \param ui32NumKeyboards is the number of keyboards in the \e psKeyboards +//! array. +//! \param psKeyboards is an array of keyboards that are displayed as a part +//! of this keyboard. +//! \param pfnOnEvent is a pointer to the function that is called when a key is +//! pressed. +//! +//! This macro provides an initialized keyboard widget data structure, which +//! can be used to construct the widget tree at compile time in global +//! variables (as opposed to run-time via function calls). +//! +//! \e ui32Style is the logical OR of the following: +//! +//! - \b PB_STYLE_OUTLINE to indicate that the keys should be outlined. +//! - \b PB_STYLE_FILL to indicate that the keys should be filled. +//! - \b PB_STYLE_IMG to indicate that the keys should have an image +//! drawn on them (using \e pui8Image). +//! - \b PB_STYLE_TEXT_OPAQUE to indicate that the key text should be +//! drawn opaque (in other words, drawing the background pixels). +//! - \b PB_STYLE_AUTO_REPEAT to indicate that auto-repeat should be used. +//! - \b PB_STYLE_RELEASE_NOTIFY to indicate that the callback should be made +//! when a key is released. If absent, the callback is called when a key +//! is initially pressed. +//! +//! \return Nothing; this is not a function. +// +//***************************************************************************** +#define Keyboard(sName, psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, ui32Style, ui32BackgroundColor, \ + ui32FillColor, ui32PressFillColor, ui32OutlineColor, \ + ui32TextColor, psFont, ui16AutoRepeatDelay, \ + ui16AutoRepeatRate, ui32NumKeyboards, psKeyboards, \ + pfnOnEvent) \ + tKeyboardWidget sName = \ + KeyboardStruct(psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, ui32Style, \ + ui32BackgroundColor, ui32FillColor, \ + ui32PressFillColor, ui32OutlineColor, \ + ui32TextColor, psFont, ui16AutoRepeatDelay, \ + ui16AutoRepeatRate, ui32NumKeyboards, psKeyboards, \ + pfnOnEvent) + +//***************************************************************************** +// +//! Sets the auto-repeat delay for a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! \param ui16Delay is the number of pointer events before auto-repeat starts. +//! +//! This function sets the delay before auto-repeat begins. Unpredictable +//! behavior will occur if this is called while a key is pressed. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardAutoRepeatDelaySet(psWidget, ui16Delay) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui16AutoRepeatDelay = ui16Delay; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables auto-repeat for a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function disables the auto-repeat behavior of a keyboard. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardAutoRepeatOff(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style &= ~(KEYBOARD_STYLE_AUTO_REPEAT); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables auto-repeat for a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function enables the auto-repeat behavior of a keyboard. +//! Unpredictable behavior will occur if this is called while a key is pressed. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardAutoRepeatOn(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style |= KEYBOARD_STYLE_AUTO_REPEAT; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the auto-repeat rate for a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! \param ui16Rate is the number of pointer events between auto-repeat events. +//! +//! This function sets the rate at which auto-repeat events occur. +//! Unpredictable behavior will occur if this is called while a key is pressed. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardAutoRepeatRateSet(psWidget, ui16Rate) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui16AutoRepeatRate = ui16Rate; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the function to call when this keyboard widget is pressed. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! \param pfnOnEventFn is a pointer to the function to call. +//! +//! This function sets the function to be called when a key is pressed. The +//! supplied function is called when a key is first pressed, and then repeated +//! while the key is pressed if auto-repeat is enabled. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardCallbackSet(psWidget, pfnOnEventFn) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->pfnOnEvent = pfnOnEventFn; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the fill color of a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to fill the keys. +//! +//! This function changes the color used to fill the keys on the display. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardFillColorSet(psWidget, ui32Color) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32FillColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the fill color of a keyboard when it is pressed. +//! +//! \param psWidget is a pointer to the keyboard widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to fill the keys when they +//! are pressed. +//! +//! This function changes the color used to fill the keys on the display when +//! a key is pressed. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardFillColorPressedSet(psWidget, ui32Color) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32PressFillColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables filling of keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function disables the filling of keys in a keyboard widget. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardFillOff(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style &= ~(KEYBOARD_STYLE_FILL); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables filling of a keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function enables the filling of a push key in a keyboard widget. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardFillOn(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style |= KEYBOARD_STYLE_FILL; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the font for a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! \param pFnt is a pointer to the font to use to draw text on the keyboard. +//! +//! This function changes the font used to draw text on keys in a keyboard. +//! The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardFontSet(psWidget, pFnt) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + const tFont *pF = pFnt; \ + psW->psFont = pF; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the outline color for keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to outline the keys. +//! +//! This function changes the color used to outline the keys in a keyboard on +//! the display. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardOutlineColorSet(psWidget, ui32Color) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32OutlineColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables outlining of keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function disables the outlining of a keys for a keyboard widget. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardOutlineOff(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style &= ~(KEYBOARD_STYLE_OUTLINE); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables outlining of keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function enables the outlining of keys for a keyboard widget. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardOutlineOn(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style |= KEYBOARD_STYLE_OUTLINE; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the text color of keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to draw text on the keys. +//! +//! This function changes the color used to draw text on the keys on the +//! display. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardTextColorSet(psWidget, ui32Color) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32TextColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables opaque text on keys in a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function disables the use of opaque text on a keyboard. When +//! not using opaque text, only the foreground pixels of the text are drawn on +//! the screen, allowing the previously drawn pixels (such as the key image) +//! to show through the text. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardTextOpaqueOff(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style &= ~(KEYBOARD_STYLE_TEXT_OPAQUE); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables opaque text on a keyboard widget. +//! +//! \param psWidget is a pointer to the keyboard widget to modify. +//! +//! This function enables the use of opaque text on a keyboard. When +//! using opaque text, both the foreground and background pixels of the text +//! are drawn on the screen, blocking out the previously drawn pixels. +//! +//! \return None. +// +//***************************************************************************** +#define KeyboardTextOpaqueOn(psWidget) \ + do \ + { \ + tKeyboardWidget *psW = psWidget; \ + psW->ui32Style |= KEYBOARD_STYLE_TEXT_OPAQUE; \ + } \ + while(0) + +//***************************************************************************** +// +//! The total number of keyboards in the g_psKeyboardUSEnglish array. +// +//***************************************************************************** +#define NUM_KEYBOARD_US_ENGLISH 3 + +extern const tKeyboard g_psKeyboardUSEnglish[NUM_KEYBOARD_US_ENGLISH]; + +//***************************************************************************** +// +// Prototypes for the keyboard widget APIs. +// +//***************************************************************************** +extern int32_t KeyboardMsgProc(tWidget *psWidget, uint32_t ui32Msg, + uint32_t ui32Param1, uint32_t ui32Param2); +extern void KeyboardInit(tKeyboardWidget *psWidget, const tDisplay *psDisplay, + int32_t i32X, int32_t i32Y, int32_t i32Width, + int32_t i32Height); + +//***************************************************************************** +// +// Mark the end of the C bindings section for C++ compilers. +// +//***************************************************************************** +#ifdef __cplusplus +} +#endif + +//***************************************************************************** +// +// Close the Doxygen group. +//! @} +// +//***************************************************************************** + +#endif //__KEYBOARD_H__ -- cgit v1.3.1