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/slider.h | 1202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1202 insertions(+) create mode 100644 grlib/slider.h (limited to 'grlib/slider.h') diff --git a/grlib/slider.h b/grlib/slider.h new file mode 100644 index 0000000..cb3ec26 --- /dev/null +++ b/grlib/slider.h @@ -0,0 +1,1202 @@ +//***************************************************************************** +// +// slider.h - Prototypes for the slider widget class. +// +// Copyright (c) 2008-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 __SLIDER_H__ +#define __SLIDER_H__ + +//***************************************************************************** +// +//! \addtogroup slider_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 that describes a slider widget. +// +//***************************************************************************** +typedef struct +{ + // + //! The generic widget information. + // + tWidget sBase; + + // + //! The style for this widget. This is a set of flags defined by + //! SL_STYLE_xxx. + // + uint32_t ui32Style; + + // + //! The 24-bit RGB color used to fill this slider, if SL_STYLE_FILL is + //! selected, and to use as the background color if SL_STYLE_TEXT_OPAQUE is + //! selected. + // + uint32_t ui32FillColor; + + // + //! The 24-bit RGB color used to fill the background portion of the slider + //! if SL_STYLE_FILL is selected, and to use as the background color if + //! SL_STYLE_TEXT_OPAQUE is selected. + // + uint32_t ui32BackgroundFillColor; + + // + //! The 24-bit RGB color used to outline this slider, if + //! SL_STYLE_OUTLINE is selected. + // + uint32_t ui32OutlineColor; + + // + //! The 24-bit RGB color used to draw text on the "active" portion of + //! this slider, if SL_STYLE_TEXT is selected. + // + uint32_t ui32TextColor; + + // + //! The 24-bit RGB color used to draw text on the background portion of + //! this slider, if SL_STYLE_TEXT is selected. + // + uint32_t ui32BackgroundTextColor; + + // + //! A pointer to the font used to render the slider text, if + //! SL_STYLE_TEXT is selected. + // + const tFont *psFont; + + // + //! A pointer to the text to draw on this slider, if SL_STYLE_TEXT is + //! selected. + // + const char *pcText; + + // + //! A pointer to the image to be drawn onto this slider, if + //! SL_STYLE_IMG is selected. + // + const uint8_t *pui8Image; + + // + //! A pointer to the image to be drawn onto this slider background if + //! SL_STYLE_BACKG_IMG is selected. + // + const uint8_t *pui8BackgroundImage; + + // + //! A pointer to the function to be called when the state of the slider + //! changes. + // + void (*pfnOnChange)(tWidget *psWidget, int32_t i32Value); + + // + //! The value represented by the slider at its zero position. This + //! value is returned if a horizontal slider is pulled to the far left or + //! a vertical slider is pulled to the bottom of widget's bounding + //! rectangle. + // + int32_t i32Min; + + // + //! The value represented by the slider at its maximum position. This value + //! is returned if a horizontal slider is pulled to the far right or a + //! vertical slider is pulled to the top of the widget's bounding + //! rectangle. + // + int32_t i32Max; + + // + //! The current slider value scaled according to the minimum and maximum + //! values for the control. + // + int32_t i32Value; + + // + //! This internal work variable stores the pixel position representing the + //! current slider value. + // + int16_t i16Pos; +} +tSliderWidget; + +//***************************************************************************** +// +//! This flag indicates that the slider should be outlined. +// +//***************************************************************************** +#define SL_STYLE_OUTLINE 0x00000001 + +//***************************************************************************** +// +//! This flag indicates that the active portion of the slider should be filled. +// +//***************************************************************************** +#define SL_STYLE_FILL 0x00000002 + +//***************************************************************************** +// +//! This flag indicates that the background portion of the slider should be +//! filled. +// +//***************************************************************************** +#define SL_STYLE_BACKG_FILL 0x00000004 + +//***************************************************************************** +// +//! This flag indicates that the slider should have text drawn on top of the +//! active portion. +// +//***************************************************************************** +#define SL_STYLE_TEXT 0x00000008 + +//***************************************************************************** +// +//! This flag indicates that the slider should have text drawn on top of the +//! background portion. +// +//***************************************************************************** +#define SL_STYLE_BACKG_TEXT 0x00000010 + +//***************************************************************************** +// +//! This flag indicates that the slider should have an image drawn on it. +// +//***************************************************************************** +#define SL_STYLE_IMG 0x00000020 + +//***************************************************************************** +// +//! This flag indicates that the slider should have an image drawn on its +//! background. +// +//***************************************************************************** +#define SL_STYLE_BACKG_IMG 0x00000040 + +//***************************************************************************** +// +//! This flag indicates that the slider text should be drawn opaque (in +//! other words, drawing the background pixels as well as the foreground +//! pixels) in the active portion of the slider. +// +//***************************************************************************** +#define SL_STYLE_TEXT_OPAQUE 0x00000080 + +//***************************************************************************** +// +//! This flag indicates that the slider text should be drawn opaque (in +//! other words, drawing the background pixels as well as the foreground +//! pixels) in the background portion of the slider. +// +//***************************************************************************** +#define SL_STYLE_BACKG_TEXT_OPAQUE 0x00000100 + +//***************************************************************************** +// +//! This flag indicates that the slider is vertical rather than horizontal. If +//! the flag is absent, the slider is assumed to operate horizontally with the +//! reported value increasing from left to right. If set, the reported value +//! increases from the bottom of the widget towards the top. +// +//***************************************************************************** +#define SL_STYLE_VERTICAL 0x00000200 + +//***************************************************************************** +// +//! This flag causes the slider to ignore pointer input and act as a passive +//! indicator. An application may set its value and repaint it as normal but +//! its value will not be changed in response to any touchscreen activity. +// +//***************************************************************************** +#define SL_STYLE_LOCKED 0x00000400 + +//***************************************************************************** +// +//! Declares an initialized slider 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 slider. +//! \param i32X is the X coordinate of the upper left corner of the slider. +//! \param i32Y is the Y coordinate of the upper left corner of the slider. +//! \param i32Width is the width of the slider. +//! \param i32Height is the height of the slider. +//! \param i32Min is the minimum value for the slider (corresponding to the +//! left or bottom position). +//! \param i32Max is the maximum value for the slider (corresponding to the +//! right or top position). +//! \param i32Value is the initial value of the slider. This must lie in the +//! range defined by \e i32Min and \e i32Max. +//! \param ui32Style is the style to be applied to the slider. +//! \param ui32FillColor is the color used to fill in the slider. +//! \param ui32BackgroundFillColor is the color used to fill the background +//! area of the slider. +//! \param ui32OutlineColor is the color used to outline the slider. +//! \param ui32TextColor is the color used to draw text on the slider. +//! \param ui32BackgroundTextColor is the color used to draw text on the +//! background portion of the slider. +//! \param psFont is a pointer to the font to be used to draw text on the +//! slider. +//! \param pcText is a pointer to the text to draw on this slider. +//! \param pui8Image is a pointer to the image to draw on this slider. +//! \param pui8BackgroundImage is a pointer to the image to draw on the slider +//! background. +//! \param pfnOnChange is a pointer to the function that is called to notify +//! the application of slider value changes. +//! +//! This macro provides an initialized slider 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 +//! tSliderWidget g_sSlider = SliderStruct(...); +//! \endverbatim +//! +//! Or, in an array of variables: +//! +//! \verbatim +//! tSliderWidget g_psSliders[] = +//! { +//! SliderStruct(...), +//! SliderStruct(...) +//! }; +//! \endverbatim +//! +//! \e ui32Style is the logical OR of the following: +//! +//! - \b #SL_STYLE_OUTLINE to indicate that the slider should be outlined. +//! - \b #SL_STYLE_FILL to indicate that the slider should be filled. +//! - \b #SL_STYLE_BACKG_FILL to indicate that the background portion of the +//! slider should be filled. +//! - \b #SL_STYLE_TEXT to indicate that the slider should have text drawn +//! on its active portion (using \e psFont and \e pcText). +//! - \b #SL_STYLE_BACKG_TEXT to indicate that the slider should have text drawn +//! on its background portion (using \e psFont and \e pcText). +//! - \b #SL_STYLE_IMG to indicate that the slider should have an image +//! drawn on it (using \e pui8Image). +//! - \b #SL_STYLE_BACKG_IMG to indicate that the slider should have an image +//! drawn on its background (using \e pui8BackgroundImage). +//! - \b #SL_STYLE_TEXT_OPAQUE to indicate that the slider text should be +//! drawn opaque (in other words, drawing the background pixels). +//! - \b #SL_STYLE_BACKG_TEXT_OPAQUE to indicate that the slider text should be +//! drawn opaque in the background portion of the widget. (in other words, +//! drawing the background pixels). +//! - \b #SL_STYLE_VERTICAL to indicate that this is a vertical slider +//! rather than a horizontal one (the default if this style flag is not set). +//! - \b #SL_STYLE_LOCKED to indicate that the slider is being used as an +//! indicator and should ignore user input. +//! +//! \return Nothing; this is not a function. +// +//***************************************************************************** +#define SliderStruct(psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, i32Min, i32Max, i32Value, \ + ui32Style, ui32FillColor, ui32BackgroundFillColor, \ + ui32OutlineColor, ui32TextColor, \ + ui32BackgroundTextColor, psFont, pcText, pui8Image, \ + pui8BackgroundImage, pfnOnChange) \ + { \ + { \ + sizeof(tSliderWidget), \ + (tWidget *)(psParent), \ + (tWidget *)(psNext), \ + (tWidget *)(psChild), \ + psDisplay, \ + { \ + i32X, \ + i32Y, \ + (i32X) + (i32Width) - 1, \ + (i32Y) + (i32Height) - 1 \ + }, \ + SliderMsgProc \ + }, \ + ui32Style, \ + ui32FillColor, \ + ui32BackgroundFillColor, \ + ui32OutlineColor, \ + ui32TextColor, \ + ui32BackgroundTextColor, \ + psFont, \ + pcText, \ + pui8Image, \ + pui8BackgroundImage, \ + pfnOnChange, \ + i32Min, \ + i32Max, \ + i32Value, \ + 0 \ + } + +//***************************************************************************** +// +//! Declares an initialized variable containing a slider 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 slider. +//! \param i32X is the X coordinate of the upper left corner of the slider. +//! \param i32Y is the Y coordinate of the upper left corner of the slider. +//! \param i32Width is the width of the slider. +//! \param i32Height is the height of the slider. +//! \param i32Min is the minimum value for the slider (corresponding to the +//! left or bottom position). +//! \param i32Max is the maximum value for the slider (corresponding to the +//! right or top position). +//! \param i32Value is the initial value of the slider. This must lie in the +//! range defined by \e i32Min and \e i32Max. +//! \param ui32Style is the style to be applied to the slider. +//! \param ui32FillColor is the color used to fill in the slider. +//! \param ui32BackgroundFillColor is the color used to fill in the background +//! area of the slider. +//! \param ui32OutlineColor is the color used to outline the slider. +//! \param ui32TextColor is the color used to draw text on the slider. +//! \param ui32BackgroundTextColor is the color used to draw text on the +//! background portion of the slider. +//! \param psFont is a pointer to the font to be used to draw text on the +//! slider. +//! \param pcText is a pointer to the text to draw on this slider. +//! \param pui8Image is a pointer to the image to draw on this slider. +//! \param pui8BackgroundImage is a pointer to the image to draw on the slider +//! background. +//! \param pfnOnChange is a pointer to the function that is called to notify +//! the application of slider value changes. +//! +//! This macro provides an initialized slider 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 #SL_STYLE_OUTLINE to indicate that the slider should be outlined. +//! - \b #SL_STYLE_FILL to indicate that the slider should be filled. +//! - \b #SL_STYLE_BACKG_FILL to indicate that the background portion of the +//! slider should be filled. +//! - \b #SL_STYLE_TEXT to indicate that the slider should have text drawn +//! on its active portion (using \e psFont and \e pcText). +//! - \b #SL_STYLE_BACKG_TEXT to indicate that the slider should have text +//! drawn on its background portion (using \e psFont and \e pcText). +//! - \b #SL_STYLE_IMG to indicate that the slider should have an image +//! drawn on it (using \e pui8Image). +//! - \b #SL_STYLE_BACKG_IMG to indicate that the slider should have an image +//! drawn on its background (using \e pui8BackgroundImage). +//! - \b #SL_STYLE_TEXT_OPAQUE to indicate that the slider text should be +//! drawn opaque (in other words, drawing the background pixels). +//! - \b #SL_STYLE_BACKG_TEXT_OPAQUE to indicate that the slider text should be +//! drawn opaque in the background portion of the widget. (in other words, +//! drawing the background pixels). +//! - \b #SL_STYLE_VERTICAL to indicate that this is a vertical slider +//! rather than a horizontal one (the default if this style flag is not set). +//! - \b #SL_STYLE_LOCKED to indicate that the slider is being used as an +//! indicator and should ignore user input. +//! +//! \return Nothing; this is not a function. +// +//***************************************************************************** +#define Slider(sName, psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, i32Min, i32Max, i32Value, ui32Style, \ + ui32FillColor, ui32BackgroundFillColor, ui32OutlineColor, \ + ui32TextColor, ui32BackgroundTextColor, psFont, pcText, \ + pui8Image, pui8BackgroundImage, pfnOnChange) \ + tSliderWidget sName = \ + SliderStruct(psParent, psNext, psChild, psDisplay, i32X, i32Y, \ + i32Width, i32Height, i32Min, i32Max, i32Value, \ + ui32Style, ui32FillColor, ui32BackgroundFillColor, \ + ui32OutlineColor, ui32TextColor, \ + ui32BackgroundTextColor, psFont, pcText, \ + pui8Image, pui8BackgroundImage, pfnOnChange) + +//***************************************************************************** +// +//! Sets the function to call when this slider widget's value changes. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! \param pfnCallback is a pointer to the function to call. +//! +//! This function sets the function to be called when the value represented by +//! the slider changes. +//! +//! \return None. +// +//***************************************************************************** +#define SliderCallbackSet(psWidget, pfnCallback) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->pfnOnChange = pfnCallback; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the fill color for the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to fill the slider. +//! +//! This function changes the color used to fill the active are of the slider +//! on the display. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderFillColorSet(psWidget, ui32Color) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32FillColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the fill color for the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to fill the background area +//! of the slider. +//! +//! This function changes the color used to fill the background area of the +//! slider on the display. The display is not updated until the next paint +//! request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderFillColorBackgroundedSet(psWidget, ui32Color) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32BackgroundFillColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables filling of the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the filling of the active area of a slider widget. +//! The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderFillOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_FILL); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables filling of the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the filling of the active area of a slider widget. +//! The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderFillOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_FILL; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables filling of the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the filling of the background area of a slider +//! widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundFillOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_BACKG_FILL ); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables filling of the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the filling of the background area of a slider widget. +//! The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundFillOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_BACKG_FILL ; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the font for a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! \param psFnt is a pointer to the font to use to draw text on the slider. +//! +//! This function changes the font used to draw text on the slider. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderFontSet(psWidget, psFnt) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + const tFont *psF = psFnt; \ + psW->psFont = psF; \ + } \ + while(0) + +//***************************************************************************** +// +//! Changes the image drawn on the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param pImg is a pointer to the image to draw onto the slider. +//! +//! This function changes the image that is drawn on the active area of the +//! slider. This image will be centered within the widget rectangle and the +//! portion represented by the current slider value will be visible. The +//! display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderImageSet(psWidget, pImg) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + const uint8_t *pI = pImg; \ + psW->pui8Image = pI; \ + } \ + while(0) + +//***************************************************************************** +// +//! Changes the image drawn on the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param pImg is a pointer to the image to draw onto the background area of +//! the slider. +//! +//! This function changes the image that is drawn onto the background area of +//! the slider. This image will be centered within the widget rectangle and +//! the portion in the area not represented by the current slider value will +//! be visible. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundImageSet(psWidget, pImg) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + const uint8_t *pI = pImg; \ + psW->pui8BackgroundImage = pI; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables the image on the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the drawing of an image on the active area of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderImageOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_IMG); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables the image on the active area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the drawing of an image on the active area of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderImageOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_IMG; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables the image on the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the drawing of an image on the background area of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundImageOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_BACKG_IMG); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables the image on the background area of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the drawing of an image on the background area of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundImageOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_BACKG_IMG; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the outline color of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to outline the slider. +//! +//! This function changes the color used to outline the slider on the +//! display. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderOutlineColorSet(psWidget, ui32Color) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32OutlineColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables outlining of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the outlining of a slider widget. The display +//! is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderOutlineOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_OUTLINE); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables outlining of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the outlining of a slider widget. The display +//! is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderOutlineOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_OUTLINE; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the text color of the active portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to draw text on the slider. +//! +//! This function changes the color used to draw text on the active portion of +//! the slider on the display. The display is not updated until the next paint +//! request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextColorSet(psWidget, ui32Color) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32TextColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the background text color of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param ui32Color is the 24-bit RGB color to use to draw background text on +//! the slider. +//! +//! This function changes the color used to draw text on the slider's +//! background portion on the display. The display is not updated until the +//! next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundTextColorSet(psWidget, ui32Color) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32BackgroundTextColor = ui32Color; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables the text on the active portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the drawing of text on the active portion of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_TEXT); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables the text on the active portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the drawing of text on the active portion of a slider +//! widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_TEXT; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables opaque text on the active portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the use of opaque text on the active portion of this +//! slider. 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 +//! slider image) to show through the text. Note that SL_STYLE_TEXT must also +//! be cleared to disable text rendering on the slider active area. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextOpaqueOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_TEXT_OPAQUE); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables opaque text on the active portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the use of opaque text on the active portion of this +//! slider. When using opaque text, both the foreground and background pixels +//! of the text are drawn on the screen, blocking out the previously drawn +//! pixels. Note that SL_STYLE_TEXT must also be set to enable text +//! rendering on the slider active area. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextOpaqueOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_TEXT_OPAQUE; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables the text on the background portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the drawing of text on the background portion of +//! a slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundTextOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_BACKG_TEXT); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables the text on the background portion of a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the drawing of text on the background portion of a +//! slider widget. The display is not updated until the next paint request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundTextOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_BACKG_TEXT; \ + } \ + while(0) + +//***************************************************************************** +// +//! Disables opaque background text on a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function disables the use of opaque text on the background portion of +//! this slider. 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 slider image) to show through the text. Note that SL_STYLE_BACKG_TEXT +//! must also be cleared to disable text rendering on the slider background +//! area. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundTextOpaqueOff(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_BACKG_TEXT_OPAQUE); \ + } \ + while(0) + +//***************************************************************************** +// +//! Enables opaque background text on a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function enables the use of opaque text on the background portion of +//! this slider. When using opaque text, both the foreground and background +//! pixels of the text are drawn on the screen, blocking out the previously +//! drawn pixels. Note that SL_STYLE_BACKG_TEXT must also be set to enable +//! text rendering on the slider background area. +//! +//! \return None. +// +//***************************************************************************** +#define SliderBackgroundTextOpaqueOn(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_BACKG_TEXT_OPAQUE; \ + } \ + while(0) + +//***************************************************************************** +// +//! Locks a slider making it ignore pointer input. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function locks a slider widget and makes it ignore all pointer input. +//! When locked, a slider acts as a passive indicator. Its value may be +//! changed using SliderValueSet() and the value display updated using +//! WidgetPaint() but no user interaction via the pointer will change the +//! widget value. +//! +//! \return None. +// +//***************************************************************************** +#define SliderLock(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style |= SL_STYLE_LOCKED; \ + } \ + while(0) + +//***************************************************************************** +// +//! Unlocks a slider making it pay attention to pointer input. +//! +//! \param psWidget is a pointer to the slider widget to modify. +//! +//! This function unlocks a slider widget. When unlocked, a slider will +//! respond to pointer input by setting its value appropriately and informing +//! the application via callbacks. +//! +//! \return None. +// +//***************************************************************************** +#define SliderUnlock(psWidget) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->ui32Style &= ~(SL_STYLE_LOCKED); \ + } \ + while(0) + +//***************************************************************************** +// +//! Changes the text drawn on a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param pcTxt is a pointer to the text to draw onto the slider. +//! +//! This function changes the text that is drawn onto the slider. The string +//! is centered across the slider and straddles the active and background +//! portions of the widget. The display is not updated until the next paint +//! request. +//! +//! \return None. +// +//***************************************************************************** +#define SliderTextSet(psWidget, pcTxt) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + const char *pcT = pcTxt; \ + psW->pcText = pcT; \ + } \ + while(0) + +//***************************************************************************** +// +//! Changes the value range for a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param i32Minimum is the minimum value that the slider will report. +//! \param i32Maximum is the maximum value that the slider will report. +//! +//! This function changes the range of a slider. Slider positions are reported +//! in terms of this range with the current position of the slider on the +//! display being scaled and translated into this range such that the minimum +//! value represents the left position of a horizontal slider or the bottom +//! position of a vertical slider and the maximum value represents the other +//! end of the slider range. Note that this function does not cause the slider +//! to be redrawn. The caller must call WidgetPaint() explicitly after this +//! call to ensure that the widget is redrawn. +//! +//! \return None. +// +//***************************************************************************** +#define SliderRangeSet(psWidget, i32Minimum, i32Maximum) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->i32Min = (i32Minimum); \ + psW->i32Max = (i32Maximum); \ + } \ + while(0) + +//***************************************************************************** +// +//! Changes the minimum value for a slider widget. +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param i32Val is the new value to set for the slider. This is in terms of +//! the value range currently set for the slider. +//! +//! This function changes the value that the slider will display the next time +//! the widget is painted. The caller is responsible for ensuring that the +//! value passed is within the range specified for the target widget. The +//! caller must call WidgetPaint() explicitly after this call to ensure that +//! the widget is redrawn. +//! +//! \return None. +// +//***************************************************************************** +#define SliderValueSet(psWidget, i32Val) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + psW->i32Value = (i32Val); \ + } \ + while(0) + +//***************************************************************************** +// +//! Sets the vertical or horizontal style for a slider widget +//! +//! \param psWidget is a pointer to the slider widget to be modified. +//! \param bVertical is \b true to set the vertical slider style or \b false +//! to set the horizontal slider style. +//! +//! This function allows the vertical or horizontal style to be set when +//! creating slider widgets dynamically. The function will typically be called +//! before the slider is first attached to the active widget tree. Since the +//! vertical or horizontal style is intimately linked with the slider size +//! and position on the display, it seldom makes sense to change this style for +//! a widget which is already on the display. +//! +//! \return None. +// +//***************************************************************************** +#define SliderVerticalSet(psWidget, bVertical) \ + do \ + { \ + tSliderWidget *psW = psWidget; \ + if(bVertical) \ + { \ + psW->ui32Style |= (SL_STYLE_VERTICAL); \ + } \ + else \ + { \ + psW->ui32Style &= ~(SL_STYLE_VERTICAL); \ + } \ + } \ + while(0) + +//***************************************************************************** +// +// Prototypes for the slider widget APIs. +// +//***************************************************************************** +extern int32_t SliderMsgProc(tWidget *psWidget, uint32_t ui32Msg, + uint32_t ui32Param1, uint32_t ui32Param2); +extern void SliderInit(tSliderWidget *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 // __SLIDER_H__ -- cgit v1.3.1