Add NxWdigets::CGlyphSliderHorizontal and associated grip widgets. From Ken Pettit.

This commit is contained in:
Gregory Nutt 2013-05-15 16:45:57 -06:00
parent e067c9337a
commit 4e5c8e97e8
13 changed files with 1748 additions and 7 deletions

View file

@ -360,3 +360,5 @@
2013-5-12).
* Kconfig: Default priorities for NxWidget and NxWM threads
should be 100, not 50, to be consistent with other default priorities.
* NxWidgets::CGlyphSliderHorizontal and NxWidgets::CGlyphSliderHorizontalGrip:
New widgets added by Ken Pettit (2013-5-15).

View file

@ -574,8 +574,8 @@ static bool createMediaPlayer(void)
// Add the hex calculator application to the start window
printf("createHexCalculator: Creating the hex calculator application\n");
NxWM::CMediaPlayerFactory *calculator = new NxWM::CMediaPlayerFactory(g_nxwmtest.taskbar);
if (!calculator)
NxWM::CMediaPlayerFactory *mediaplayer = new NxWM::CMediaPlayerFactory(g_nxwmtest.taskbar);
if (!mediaplayer)
{
printf("createMediaPlayer: ERROR: Failed to instantiate CMediaPlayerFactory\n");
return false;
@ -583,10 +583,10 @@ static bool createMediaPlayer(void)
showTestCaseMemory("createMediaPlayer: After creating the media player application");
printf("createMediaPlayer: Adding the hex calculator application to the start window\n");
if (!g_nxwmtest.startwindow->addApplication(calculator))
if (!g_nxwmtest.startwindow->addApplication(mediaplayer))
{
printf("createMediaPlayer: ERROR: Failed to add CNxConsoleFactory to the start window\n");
delete calculator;
delete mediaplayer;
return false;
}

View file

@ -56,7 +56,8 @@ CXXSRCS += cstringiterator.cxx ctext.cxx cwidgetcontrol.cxx cwidgeteventhandler
CXXSRCS += cwindoweventhandlerlist.cxx singletons.cxx
# Widget APIs
CXXSRCS += cbutton.cxx cbuttonarray.cxx ccheckbox.cxx ccyclebutton.cxx
CXXSRCS += cglyphbutton.cxx cimage.cxx ckeypad.cxx clabel.cxx clatchbutton.cxx
CXXSRCS += cglyphbutton.cxx cglyphsliderhorizontal.cxx cglyphsliderhorizontalgrip.cxx
CXXSRCS += cimage.cxx ckeypad.cxx clabel.cxx clatchbutton.cxx
CXXSRCS += clatchbuttonarray.cxx clistbox.cxx clistboxdataitem.cxx cmultilinetextbox.cxx
CXXSRCS += cnumericedit.cxx
CXXSRCS += cprogressbar.cxx cradiobutton.cxx cradiobuttongroup.cxx cscrollbarhorizontal.cxx

View file

@ -0,0 +1,336 @@
/****************************************************************************
* NxWidgets/libnxwidgets/include/cglyphsliderhorizontal.hxx
*
* Copyright (C) 2013 Ken Pettit. All rights reserved.
* Author: Ken Pettit <pettitkd@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
* me be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************
*
* Portions of this package derive from Woopsi (http://woopsi.org/) and
* portions are original efforts. It is difficult to determine at this
* point what parts are original efforts and which parts derive from Woopsi.
* However, in any event, the work of Antony Dzeryn will be acknowledged
* in most NxWidget files. Thanks Antony!
*
* Copyright (c) 2007-2011, Antony Dzeryn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the names "Woopsi", "Simian Zombie" nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Antony Dzeryn ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Antony Dzeryn BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __INCLUDE_CGLYPHSLIDERHORIZONTAL_HXX
#define __INCLUDE_CGLYPHSLIDERHORIZONTAL_HXX
/****************************************************************************
* Included Files
****************************************************************************/
#include "csliderhorizontal.hxx"
#include "cglyphsliderhorizontalgrip.hxx"
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
/****************************************************************************
* Implementation Classes
****************************************************************************/
#if defined(__cplusplus)
namespace NXWidgets
{
/**
* Widget providing a sliding "grip" that can be moved left and
* right in the "gutter". Essentially a scrollbar, but more
* generic.
*/
class CGlyphSliderHorizontal : public ISlider, public CNxWidget, public CWidgetEventHandler
{
protected:
CGlyphSliderHorizontalGrip *m_grip; /**< Pointer to the grip. */
nxgl_coord_t m_minimumValue; /**< Minimum value that the grip can represent. */
nxgl_coord_t m_maximumValue; /**< Maximum value that the grip can represent. */
int32_t m_value; /**< Current value of the slider. */
nxgl_coord_t m_minimumGripWidth; /**< Smallest width that the grip can become */
nxgl_coord_t m_pageSize; /**< Value of a page of data, used when clicking
the gutter. */
int32_t m_gutterWidth; /**< Width of the gutter, taking into account
any adjustments made to the width of the grip. */
uint32_t m_contentSize; /**< Number of values in the min/max range. */
nxwidget_pixel_t m_fillColor; /**< Fill color for left side of "fuel gague" */
bool m_fill; /**< Set true if fill is active */
uint32_t m_barThickness; /**< Thickness (in pixels) of the bar */
/**
* Get the maximum possible value that the slider can represent. Useful when
* using the slider as a scrollbar, as the height of the grip prevents the full
* range of values being accessed (intentionally).
* The returned value is bitshfted left 16 places for more accuracy in fixed-point
* calculations.
*
* @return The maximum possible value that the slider can represent.
*/
int32_t getPhysicalMaximumValueWithBitshift(void) const;
/**
* Get the value represented by the top of the grip.
* return The value represented by the top of the grip.
*/
const int32_t getGripValue(void) const;
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
virtual void drawContents(CGraphicsPort *port);
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
virtual void drawBorder(CGraphicsPort *port);
/**
* Resize the slider to the new dimensions.
*
* @param width The new width.
* @param height The new height.
*/
virtual void onResize(nxgl_coord_t width, nxgl_coord_t height);
/**
* Moves the grip towards the mouse.
*
* @param x The x coordinate of the click.
* @param y The y coordinate of the click.
*/
virtual void onClick(nxgl_coord_t x, nxgl_coord_t y);
public:
/**
* Constructor.
*
* @param pWidgetControl The widget control instance for the window.
* @param x The x coordinate of the slider, relative to its parent.
* @param y The y coordinate of the slider, relative to its parent.
* @param width The width of the slider.
* @param height The height of the slider.
*/
CGlyphSliderHorizontal(CWidgetControl *pWidgetControl,
nxgl_coord_t x, nxgl_coord_t y, nxgl_coord_t width,
nxgl_coord_t height, IBitmap *pGripBitmap,
nxwidget_pixel_t fillColor, bool fill = true);
/**
* Destructor.
*/
virtual inline ~CGlyphSliderHorizontal(void) { }
/**
* Get the smallest value that the slider can represent.
*
* @return The smallest value.
*/
inline const nxgl_coord_t getMinimumValue(void) const
{
return m_minimumValue;
}
/**
* Get the largest value that the slider can represent.
*
* @return The largest value.
*/
inline const nxgl_coord_t getMaximumValue(void) const
{
return m_maximumValue;
}
/**
* Get the current value of the slider.
*
* return The current slider value.
*/
inline const nxgl_coord_t getValue(void) const
{
return m_value >> 16;
}
/**
* Get the value represented by the height of the grip.
* For sliders, this would typically be 1 (so each new
* grip position is worth 1). For scrollbars, this
* would be the height of the scrolling widget.
*
* @return The page size.
*/
inline const nxgl_coord_t getPageSize(void) const
{
return m_pageSize;
}
/**
* Set the smallest value that the slider can represent.
*
* @param value The smallest value.
*/
inline void setMinimumValue(const nxgl_coord_t value)
{
m_minimumValue = value;
m_contentSize = m_maximumValue - m_minimumValue + 1;
//resizeGrip();
};
/**
* Set the largest value that the slider can represent.
*
* @param value The largest value.
*/
inline void setMaximumValue(const nxgl_coord_t value)
{
m_maximumValue = value;
m_contentSize = m_maximumValue - m_minimumValue + 1;
//resizeGrip();
};
/**
* Set the value that of the slider. This will reposition
* and redraw the grip.
*
* @param value The new value.
*/
void setValue(const nxgl_coord_t value);
/**
* Set the value that of the slider. This will reposition and redraw
* the grip. The supplied value should be bitshifted left 16 places.
* This ensures greater accuracy than the standard setValue() method if
* the slider is being used as a scrollbar.
*
* @param value The new value.
*/
void setValueWithBitshift(const int32_t value);
/**
* Set the page size represented by the grip.
*
* @param pageSize The page size.
* @see getPageSize().
*/
inline void setPageSize(const nxgl_coord_t pageSize)
{
m_pageSize = pageSize;
//resizeGrip();
};
/**
* Set the thickness of the slider bar
*
* @param thickness The slider bar thickness in pixels
*/
inline void setBarThickness(const nxgl_coord_t thickness)
{
m_barThickness = thickness;
redraw();
};
/**
* Process events fired by the grip.
*
* @param e The event details.
*/
virtual void handleDragEvent(const CWidgetEventArgs &e);
/**
* Get the smallest value that the slider can move through when
* dragged.
*
* @return The smallest value that the slider can move through when
* dragged.
*/
nxgl_coord_t getMinimumStep(void) const;
};
}
#endif // __cplusplus
#endif // __INCLUDE_CGLYPHSLIDERHORIZONTAL_HXX

View file

@ -0,0 +1,206 @@
/****************************************************************************
* NxWidgets/libnxwidgets/include/cglyphsliderhorizontalgrip.hxx
*
* Copyright (C) 2012 Ken Pettit. All rights reserved.
* Author: Ken Pettit <pettitkd@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
* me be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************
*
* Portions of this package derive from Woopsi (http://woopsi.org/) and
* portions are original efforts. It is difficult to determine at this
* point what parts are original efforts and which parts derive from Woopsi.
* However, in any event, the work of Antony Dzeryn will be acknowledged
* in most NxWidget files. Thanks Antony!
*
* Copyright (c) 2007-2011, Antony Dzeryn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the names "Woopsi", "Simian Zombie" nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Antony Dzeryn ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Antony Dzeryn BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __INCLUDE_CGLYPHSLIDERHORIZONTALGRIP_HXX
#define __INCLUDE_CGLYPHSLIDERHORIZONTALGRIP_HXX
/****************************************************************************
* Included Files
****************************************************************************/
#include "csliderhorizontalgrip.hxx"
#include "cimage.hxx"
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
/****************************************************************************
* Implementation Classes
****************************************************************************/
#if defined(__cplusplus)
namespace NXWidgets
{
class IBitmap;
/**
* Class representing the grip, or draggable button, with a horizontal
* slider.
*/
class CGlyphSliderHorizontalGrip : public CImage
{
protected:
/**
* The CImage to represent the grip.
*/
//CImage* m_pImage;
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
//virtual void drawContents(CGraphicsPort *port);
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
//virtual void drawBorder(CGraphicsPort *port);
/**
* Resize the slider to the new dimensions.
*
* @param width The new width.
* @param height The new height.
*/
virtual void onResize(nxgl_coord_t width, nxgl_coord_t height);
/**
* Starts dragging the grip and redraws it.
*
* @param x The x coordinate of the click.
* @param y The y coordinate of the click.
*/
virtual void onClick(nxgl_coord_t x, nxgl_coord_t y);
/**
* Redraws the grip.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
*/
virtual void onRelease(nxgl_coord_t x, nxgl_coord_t y);
/**
* Redraws the grip.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
*/
virtual void onReleaseOutside(nxgl_coord_t x, nxgl_coord_t y);
/**
* Moves the grip to follow the mouse.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
* @param vX The horizontal distance of the drag.
* @param vY The vertical distance of the drag.
*/
virtual void onDrag(nxgl_coord_t x, nxgl_coord_t y,
nxgl_coord_t vX, nxgl_coord_t vY);
public:
/**
* Constructor.
*
* @param pWidgetControl The controlling widget for the display
* @param x The x coordinate of the grip, relative to its parent.
* @param y The y coordinate of the grip, relative to its parent.
* @param width The width of the grip.
* @param height The height of the grip.
*/
CGlyphSliderHorizontalGrip(CWidgetControl *pWidgetControl,
nxgl_coord_t x, nxgl_coord_t y,
nxgl_coord_t width, nxgl_coord_t height,
IBitmap *pGripBitmap);
/**
* Destructor.
*/
virtual inline ~CGlyphSliderHorizontalGrip(void) { }
};
}
#endif // __cplusplus
#endif // __INCLUDE_CGLYPHSLIDERHORIZONTALGRIP_HXX

View file

@ -0,0 +1,503 @@
/****************************************************************************
* NxWidgets/libnxwidgets/src/cglyphsliderhorizontal.cxx
*
* Copyright (C) 2013 Ken Pettit. All rights reserved.
* Author: Ken Pettit <pettitkd@gmail.com>
*
* Based on and copied from csliderhorizontal.cxx written by Gregory Nutt
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
* me be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************
*
* Portions of this package derive from Woopsi (http://woopsi.org/) and
* portions are original efforts. It is difficult to determine at this
* point what parts are original efforts and which parts derive from Woopsi.
* However, in any event, the work of Antony Dzeryn will be acknowledged
* in most NxWidget files. Thanks Antony!
*
* Copyright (c) 2007-2011, Antony Dzeryn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the names "Woopsi", "Simian Zombie" nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Antony Dzeryn ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Antony Dzeryn BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdint.h>
#include <stdbool.h>
#include "cwidgetcontrol.hxx"
#include "cglyphsliderhorizontal.hxx"
#include "cglyphsliderhorizontalgrip.hxx"
#include "cimage.hxx"
#include "cgraphicsport.hxx"
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
/****************************************************************************
* Method Implementations
****************************************************************************/
using namespace NXWidgets;
/**
* Constructor.
*
* @param pWidgetControl The controlling widget for the display
* @param x The x coordinate of the slider, relative to its parent.
* @param y The y coordinate of the slider, relative to its parent.
* @param width The width of the slider.
* @param height The height of the slider.
*/
CGlyphSliderHorizontal::CGlyphSliderHorizontal(CWidgetControl * pWidgetControl,
nxgl_coord_t x, nxgl_coord_t y,
nxgl_coord_t width, nxgl_coord_t height,
IBitmap * pGripBitmap,
nxwidget_pixel_t fillColor, bool fill)
:CNxWidget(pWidgetControl, x, y, width, height, WIDGET_DRAGGABLE)
{
m_minimumValue = 0;
m_maximumValue = 0;
m_contentSize = 0;
m_value = 0;
m_minimumGripWidth = 10;
m_pageSize = 1;
m_fillColor = fillColor;
m_fill = fill;
m_barThickness = 8;
m_flags.permeable = false;
m_flags.borderless = false;
m_flags.doubleClickable = false;
// Create grip
CRect rect;
getClientRect(rect);
m_gutterWidth = rect.getWidth();
// Create grip
m_grip = new CGlyphSliderHorizontalGrip(pWidgetControl, x, y,
width, height, pGripBitmap);
m_grip->setBorderless(true);
m_grip->addWidgetEventHandler(this);
addWidget(m_grip);
}
/**
* Set the value that of the slider. This will reposition
* and redraw the grip.
*
* @param value The new value.
*/
void CGlyphSliderHorizontal::setValue(const nxgl_coord_t value)
{
setValueWithBitshift((int32_t) value << 16);
}
/**
* Set the value that of the slider. This will reposition and redraw
* the grip. The supplied value should be bitshifted left 16 places.
* This ensures greater accuracy than the standard setValue() method if
* the slider is being used as a scrollbar.
*
* @param value The new value.
*/
void CGlyphSliderHorizontal::setValueWithBitshift(const int32_t value)
{
CRect rect;
getClientRect(rect);
// Can the grip move?
if ((rect.getWidth() > m_grip->getWidth()) &&
(m_maximumValue != m_minimumValue))
{
int32_t newValue = value;
int32_t maxValue = getPhysicalMaximumValueWithBitshift();
// Limit to max/min values
if (newValue > maxValue)
{
newValue = maxValue;
}
if (newValue >> 16 < m_minimumValue)
{
newValue = m_minimumValue << 16;
}
uint32_t scrollRatio = newValue / m_contentSize;
int32_t newGripX = m_gutterWidth * scrollRatio;
newGripX += newGripX & 0x8000;
newGripX >>= 16;
newGripX += rect.getX();
m_grip->moveTo(newGripX, (rect.getHeight() - m_grip->getHeight()) >> 1);
// Update stored value if necessary
if (m_value != newValue)
{
m_value = newValue;
m_widgetEventHandlers->raiseValueChangeEvent();
}
}
}
/**
* Process events fired by the grip.
*
* @param e The event details.
*/
void CGlyphSliderHorizontal::handleDragEvent(const CWidgetEventArgs & e)
{
// Handle grip events
if ((e.getSource() == m_grip) && (e.getSource() != NULL))
{
int32_t newValue = getGripValue() >> 16;
// Grip has moved - compare values and raise event if the
// value has changed. Compare using integer values rather
// than fixed-point.
if (m_value >> 16 != newValue)
{
m_value = newValue << 16;
m_widgetEventHandlers->raiseValueChangeEvent();
}
}
}
/**
* Get the smallest value that the slider can move through when
* dragged.
*
* @return The smallest value that the slider can move through when
* dragged.
*/
nxgl_coord_t CGlyphSliderHorizontal::getMinimumStep(void) const
{
// If the ratio of content to gutter is greater than or equal to one,
// the minimum step that the slider can represent will be that ratio.
uint32_t gutterRatio = m_contentSize << 16 / m_gutterWidth;
gutterRatio += gutterRatio & 0x8000;
gutterRatio >>= 16;
if (gutterRatio > 0)
{
return gutterRatio;
}
return 1;
}
/**
* Get the maximum possible value that the slider can represent. Useful when
* using the slider as a scrollbar, as the height of the grip prevents the full
* range of values being accessed (intentionally).
* The returned value is bitshfted left 16 places for more accuracy in fixed-point
* calculations.
*
* @return The maximum possible value that the slider can represent.
*/
int32_t CGlyphSliderHorizontal::getPhysicalMaximumValueWithBitshift(void) const
{
uint32_t maxX = m_gutterWidth - m_grip->getWidth();
uint32_t scrollRatio = (maxX << 16) / m_gutterWidth;
int32_t value = (scrollRatio * m_contentSize);
return value;
}
/**
* Get the value represented by the top of the grip.
* return The value represented by the top of the grip.
*/
const int32_t CGlyphSliderHorizontal::getGripValue(void) const
{
// Calculate the current value represented by the top of the grip
CRect rect;
getClientRect(rect);
uint32_t gripPos = ((m_grip->getX() - getX()) - rect.getX());
uint32_t scrollRatio = (gripPos << 16) / m_gutterWidth;
int32_t value = (scrollRatio * m_contentSize);
return value;
}
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
void CGlyphSliderHorizontal::drawContents(CGraphicsPort * port)
{
int halfGripWidth = m_grip->getWidth() >> 1;
int halfBar = m_barThickness >> 1;
int halfHeight = getHeight() >> 1;
int width;
nxwidget_pixel_t color;
// Fill in (erase) the region to the left and right of the fuel guage
width =
m_grip->getX() > halfGripWidth ? halfGripWidth : m_grip->getX() - getX();
port->drawFilledRect(getX(), getY(), width, getHeight(),
getBackgroundColor());
// Fill in (erase) the region above the "fuel gauge"
port->drawFilledRect(getX(), getY(), getWidth(), halfHeight - halfBar,
getBackgroundColor());
// Fill in the bar area to the left of the grip
if (m_fill)
color = m_fillColor;
else
color = getBackgroundColor();
if (m_grip->getX() > halfGripWidth)
port->drawFilledRect(getX() + 1 + halfGripWidth,
getY() + halfHeight - halfBar + 1,
m_grip->getX() - halfGripWidth, m_barThickness - 2,
color);
// Fill in bar the area to the right of the grip
width = getWidth() - (m_grip->getX() - getX() + m_grip->getWidth()) - 1 -
halfGripWidth;
if (width > 0)
port->drawFilledRect(m_grip->getX() + m_grip->getWidth(),
getY() + halfHeight - halfBar + 1, width,
m_barThickness - 2, getBackgroundColor());
// Fill in (erase) the area to right of the bar
width = m_grip->getX() - getX() + m_grip->getWidth() <
getWidth() - halfGripWidth ? halfGripWidth : getWidth() - (m_grip->getX() -
getX() +
halfGripWidth);
if (width > 0)
port->drawFilledRect(getX() + getWidth() - halfGripWidth, getY(), width,
getHeight(), getBackgroundColor());
// Fill in (erase) the region below the "fuel gauge"
port->drawFilledRect(getX(), getY() + halfHeight + (m_barThickness - halfBar),
getWidth(), halfHeight - (m_barThickness - halfBar),
getBackgroundColor());
// Now redraw the grip
m_grip->enableDrawing();
m_grip->redraw();
}
/**
* Draw the area of this widget that falls within the clipping region.
* Called by the redraw() function to draw all visible regions.
*
* @param port The CGraphicsPort to draw to.
* @see redraw()
*/
void CGlyphSliderHorizontal::drawBorder(CGraphicsPort * port)
{
// Stop drawing if the widget indicates it should not have an outline
if (!isBorderless())
{
int y1, y2;
int x = getX();
int gripWidth = m_grip->getWidth();
int halfGripWidth = gripWidth >> 1;
int gripX = m_grip->getX();
int width;
nxwidget_pixel_t shine;
nxwidget_pixel_t shadow;
y1 = getY() + (getHeight() >> 1) - (m_barThickness >> 1);
y2 = getY() + (getHeight() >> 1) + m_barThickness -
(m_barThickness >> 1) - 1;
// To the Left of the grip. Only draw if the icon isn't covering the
// edge of the bar
width = gripX - x - halfGripWidth;
if (width > 0)
{
// If we aren't filling, then don't draw a "raised" bar
if (m_fill)
{
shine = getShineEdgeColor();
shadow = getShadowEdgeColor();
}
else
{
shadow = getShineEdgeColor();
shine = getShadowEdgeColor();
}
port->drawHorizLine(x + halfGripWidth, y1, width, shine);
port->drawHorizLine(x + halfGripWidth, y2, width, shadow);
}
// To the Right of the grip
// Only draw if the icon isn't covering the edge of the bar
width = getWidth() - (gripX - x + gripWidth) - 1 - halfGripWidth;
if (width > 0)
{
port->drawHorizLine(gripX + gripWidth, y1,
getWidth() - (gripX - x + gripWidth) - 1 -
halfGripWidth, getShadowEdgeColor());
port->drawHorizLine(gripX + gripWidth, y2,
getWidth() - (gripX - x + gripWidth) - 1 -
halfGripWidth, getShineEdgeColor());
}
// Left edge
if (gripX > x + halfGripWidth)
{
port->drawVertLine(x + halfGripWidth, y1, m_barThickness,
getShineEdgeColor());
}
// Right edge
if (gripX + gripWidth < x + getWidth() - 1 - halfGripWidth)
{
port->drawVertLine(x + getWidth() - 1 - halfGripWidth,
y1, m_barThickness, getShadowEdgeColor());
}
}
}
/**
* Resize the slider to the new dimensions.
*
* @param width The new width.
* @param height The new height.
*/
void CGlyphSliderHorizontal::onResize(nxgl_coord_t width, nxgl_coord_t height)
{
// Remember current values
int32_t oldValue = m_value;
bool events = raisesEvents();
// Disable event raising
setRaisesEvents(false);
// resizeGrip();
// Set back to current value
setValue(oldValue);
// Reset event raising
setRaisesEvents(events);
}
/**
* Moves the grip towards the mouse.
*
* @param x The x coordinate of the click.
* @param y The y coordinate of the click.
*/
void CGlyphSliderHorizontal::onClick(nxgl_coord_t x, nxgl_coord_t y)
{
// Which way should the grip move?
if (x > m_grip->getX())
{
// Move grip right
setValueWithBitshift(m_value + (m_pageSize << 16));
}
else
{
// Move grip left
setValueWithBitshift(m_value - (m_pageSize << 16));
}
redraw();
}

View file

@ -0,0 +1,204 @@
/****************************************************************************
* NxWidgets/libnxwidgets/src/cglyphsliderhorizontalgrip.cxx
*
* Copyright (C) 2013 Ken Pettit. All rights reserved.
* Author: Ken Pettit <pettitkd@gmail.com>
*
* Mostly copied from CSliderHorizontalGrip written by Gregory Nutt
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
* me be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************
*
* Portions of this package derive from Woopsi (http://woopsi.org/) and
* portions are original efforts. It is difficult to determine at this
* point what parts are original efforts and which parts derive from Woopsi.
* However, in any event, the work of Antony Dzeryn will be acknowledged
* in most NxWidget files. Thanks Antony!
*
* Copyright (c) 2007-2011, Antony Dzeryn
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the names "Woopsi", "Simian Zombie" nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY Antony Dzeryn ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL Antony Dzeryn BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include "cglyphsliderhorizontalgrip.hxx"
#include "ibitmap.hxx"
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
/****************************************************************************
* Method Implementations
****************************************************************************/
using namespace NXWidgets;
/**
* Constructor.
*
* @param pWidgetControl The controlling widget for the display
* @param x The x coordinate of the grip, relative to its parent.
* @param y The y coordinate of the grip, relative to its parent.
* @param width The width of the grip.
* @param height The height of the grip.
*/
CGlyphSliderHorizontalGrip::CGlyphSliderHorizontalGrip(CWidgetControl *pWidgetControl,
nxgl_coord_t x, nxgl_coord_t y,
nxgl_coord_t width, nxgl_coord_t height,
IBitmap *pGripBitmap)
: CImage(pWidgetControl, 0, (height>>1) - (pGripBitmap->getHeight() >> 1),
pGripBitmap->getWidth(), pGripBitmap->getHeight(),
pGripBitmap, 0)
{
// Make the widget draggable
setDraggable(true);
}
/**
* Resize the slider to the new dimensions.
*
* @param width The new width.
* @param height The new height.
*/
void CGlyphSliderHorizontalGrip::onResize(nxgl_coord_t width, nxgl_coord_t height)
{
}
/**
* Starts dragging the grip and redraws it.
*
* @param x The x coordinate of the click.
* @param y The y coordinate of the click.
*/
void CGlyphSliderHorizontalGrip::onClick(nxgl_coord_t x, nxgl_coord_t y)
{
startDragging(x, y);
redraw();
}
/**
* Redraws the grip.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
*/
void CGlyphSliderHorizontalGrip::onRelease(nxgl_coord_t x, nxgl_coord_t y)
{
redraw();
}
/**
* Redraws the grip.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
*/
void CGlyphSliderHorizontalGrip::onReleaseOutside(nxgl_coord_t x, nxgl_coord_t y)
{
redraw();
}
/**
* Moves the grip to follow the mouse.
*
* @param x The x coordinate of the mouse.
* @param y The y coordinate of the mouse.
* @param vX The horizontal distance of the drag.
* @param vY The vertical distance of the drag.
*/
void CGlyphSliderHorizontalGrip::onDrag(nxgl_coord_t x, nxgl_coord_t y,
nxgl_coord_t vX, nxgl_coord_t vY)
{
// Work out where we're moving to
nxgl_coord_t destX = x - m_grabPointX - m_parent->getX();
// Do we need to move?
if (destX != m_rect.getX())
{
// Get parent rect
CRect rect;
m_parent->getClientRect(rect);
// Prevent grip from moving outside parent
if (destX < rect.getX())
{
destX = rect.getX();
}
else
{
if (destX + getWidth() > rect.getWidth() + rect.getX())
{
destX = (rect.getWidth() + rect.getX()) - getWidth() ;
}
}
// Move to new location
moveTo(destX, (rect.getHeight() - getHeight()) >> 1);
m_parent->redraw();
}
}

View file

@ -76,7 +76,7 @@ CXXSRCS += glyph_minimize.cxx glyph_nsh.cxx glyph_play.cxx glyph_start.cxx
CXXSRCS += glyph_stop.cxx
ifeq ($(CONFIG_NXWM_MEDIAPLAYER),y)
CXXSRCS += glyph_mediaplayer.cxx cmediaplayer.cxx
CXXSRCS += glyph_mediaplayer.cxx cmediaplayer.cxx glyph_mplayer_controls.cxx
endif
SRCS = $(ASRCS) $(CSRCS) $(CXXSRCS)

View file

@ -46,9 +46,10 @@
#include <nuttx/nx/nxtk.h>
#include <nuttx/nx/nxconsole.h>
#include "cbuttonarray.hxx"
#include "cimage.hxx"
#include "clabel.hxx"
#include "cnxfont.hxx"
#include "cglyphsliderhorizontal.hxx"
#include "iapplication.hxx"
#include "capplicationwindow.hxx"
@ -105,6 +106,10 @@ namespace NxWM
NXWidgets::CLabel *m_text; /**< Some text in the app for now */
NXWidgets::CNxFont *m_font; /**< The font used in the media player */
NXWidgets::CImage *m_rew; /**< Rewind control */
NXWidgets::CImage *m_playPause; /**< Play/Pause control */
NXWidgets::CImage *m_fwd; /**< Forward control */
NXWidgets::CGlyphSliderHorizontal *m_volume; /**< Volume control */
/**
* Calculator geometry. This stuff does not really have to be retained

View file

@ -552,6 +552,26 @@
# define CONFIG_NXWM_MEDIAPLAYER_ICON NxWM::g_mediaplayerBitmap
#endif
#ifndef CONFIG_NXWM_MPLAYER_FWD_ICON
# define CONFIG_NXWM_MPLAYER_FWD_ICON NxWM::g_mplayerFwdBitmap
#endif
#ifndef CONFIG_NXWM_MPLAYER_PLAY_ICON
# define CONFIG_NXWM_MPLAYER_PLAY_ICON NxWM::g_mplayerPlayBitmap
#endif
#ifndef CONFIG_NXWM_MPLAYER_PAUSE_ICON
# define CONFIG_NXWM_MPLAYER_PAUSE_ICON NxWM::g_mplayerPauseBitmap
#endif
#ifndef CONFIG_NXWM_MPLAYER_REW_ICON
# define CONFIG_NXWM_MPLAYER_REW_ICON NxWM::g_mplayerRewBitmap
#endif
#ifndef CONFIG_NXWM_MPLAYER_VOL_ICON
# define CONFIG_NXWM_MPLAYER_VOL_ICON NxWM::g_mplayerVolBitmap
#endif
#ifndef CONFIG_NXWM_MEDIAPLAYER_FONTID
# define CONFIG_NXWM_MEDIAPLAYER_FONTID CONFIG_NXWM_DEFAULT_FONTID
#endif

View file

@ -60,7 +60,14 @@ namespace NxWM
extern const struct NXWidgets::SRlePaletteBitmap g_calculatorBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_calibrationBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_cmdBitmap;
#ifdef CONFIG_NXWM_MEDIAPLAYER
extern const struct NXWidgets::SRlePaletteBitmap g_mediaplayerBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_mplayerFwdBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_mplayerPlayBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_mplayerPauseBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_mplayerRewBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_mplayerVolBitmap;
#endif
extern const struct NXWidgets::SRlePaletteBitmap g_minimizeBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_nshBitmap;
extern const struct NXWidgets::SRlePaletteBitmap g_playBitmap;

View file

@ -267,6 +267,15 @@ void CMediaPlayer::redraw(void)
m_text->enableDrawing();
m_text->redraw();
m_rew->enableDrawing();
m_rew->redraw();
m_playPause->enableDrawing();
m_playPause->redraw();
m_fwd->enableDrawing();
m_fwd->redraw();
m_volume->enableDrawing();
m_volume->redraw();
}
/**
@ -314,6 +323,8 @@ void CMediaPlayer::setGeometry(void)
bool CMediaPlayer::createPlayer(void)
{
int playControlX, playControlY;
// Select a font for the calculator
m_font = new NXWidgets::CNxFont((nx_fontid_e)CONFIG_NXWM_MEDIAPLAYER_FONTID,
@ -354,6 +365,54 @@ bool CMediaPlayer::createPlayer(void)
// Select the font
m_text->setFont(m_font);
// Create button for rewind
playControlX = (m_windowSize.w >> 1) - 64;
playControlY = m_windowSize.h - 64;
// Create the Rewind Image
NXWidgets::CRlePaletteBitmap *pRewBitmap = new NXWidgets::
CRlePaletteBitmap(&CONFIG_NXWM_MPLAYER_REW_ICON);
m_rew = new NXWidgets::CImage(control,
playControlX, playControlY,
32, 32,
pRewBitmap, 0);
m_rew->setBorderless(true);
// Create the Play Image
pRewBitmap = new NXWidgets::
CRlePaletteBitmap(&CONFIG_NXWM_MPLAYER_PLAY_ICON);
m_playPause = new NXWidgets::CImage(control,
playControlX + 32 + 16, playControlY,
32, 32,
pRewBitmap, 0);
m_playPause->setBorderless(true);
// Create the Forward Image
pRewBitmap = new NXWidgets::
CRlePaletteBitmap(&CONFIG_NXWM_MPLAYER_FWD_ICON);
m_fwd = new NXWidgets::CImage(control,
playControlX + 32*3, playControlY,
32, 32,
pRewBitmap, 0);
m_fwd->setBorderless(true);
// Create the Volume control
pRewBitmap = new NXWidgets::
CRlePaletteBitmap(&CONFIG_NXWM_MPLAYER_VOL_ICON);
m_volume = new NXWidgets::CGlyphSliderHorizontal(control,
10, m_windowSize.h - 30,
m_windowSize.w - 20, 26,
pRewBitmap, MKRGB( 63, 90,192));
m_volume->setMinimumValue(0);
m_volume->setMaximumValue(100);
m_volume->setValue(15);
return true;
}

View file

@ -0,0 +1,398 @@
/********************************************************************************************
* NxWidgets/nxwm/src/glyph_mediaplayer.cxx
*
* Copyright (C) 2013 Ken Pettit. All rights reserved.
* Author: Ken Pettit <pettitkd@gmail.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
* me be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
********************************************************************************************/
/********************************************************************************************
* Included Files
********************************************************************************************/
/* Automatically NuttX bitmap file. */
/* Generated from play_music.png by bitmap_converter.py. */
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdbool.h>
#include <nuttx/nx/nxglib.h>
#include <nuttx/fb.h>
#include <nuttx/rgbcolors.h>
#include "crlepalettebitmap.hxx"
#include "nxwmconfig.hxx"
#include "nxwmglyphs.hxx"
/********************************************************************************************
* Pre-Processor Definitions
********************************************************************************************/
#define BITMAP_WIDTH 32
#define BITMAP_HEIGHT 32
#define BITMAP_PALETTESIZE 8
using namespace NxWM;
/* RGB24 (8-8-8) Colors */
static const NXWidgets::nxwidget_pixel_t palette[BITMAP_PALETTESIZE] =
{
CONFIG_NXWM_DEFAULT_BACKGROUNDCOLOR, MKRGB( 11, 24,108), MKRGB( 63, 90,192), MKRGB(121,136,250),
MKRGB(224,234,244), MKRGB( 69, 80,149), MKRGB(127,169,239), MKRGB(152,174,207),
};
static const NXWidgets::nxwidget_pixel_t hilight_palette[BITMAP_PALETTESIZE] =
{
CONFIG_NXWM_DEFAULT_BACKGROUNDCOLOR, MKRGB( 61, 74,158), MKRGB(113,140,242), MKRGB(171,186,255),
MKRGB(255,255,255), MKRGB(119,130,199), MKRGB(177,219,255), MKRGB(202,224,255),
};
/* Bitmap definition for the "Play" button */
static const NXWidgets::SRlePaletteBitmapEntry play_bitmap[] =
{
{ 32, 0}, /* Row 0 */
{ 14, 0}, { 4, 7}, { 14, 0}, /* Row 1 */
{ 10, 0}, { 12, 7}, { 10, 0}, /* Row 2 */
{ 8, 0}, { 3, 6}, { 9, 7}, { 3, 6}, { 1, 7}, { 8, 0}, /* Row 3 */
{ 7, 0}, { 7, 6}, { 4, 7}, { 7, 6}, { 7, 0}, /* Row 4 */
{ 6, 0}, { 3, 3}, { 13, 6}, { 4, 3}, { 6, 0}, /* Row 5 */
{ 5, 0}, { 6, 3}, { 9, 6}, { 7, 3}, { 5, 0}, /* Row 6 */
{ 4, 0}, { 1, 2}, { 22, 3}, { 1, 2}, { 4, 0}, /* Row 7 */
{ 3, 0}, { 1, 5}, { 23, 3}, { 1, 2}, { 1, 5}, { 3, 0}, /* Row 8 */
{ 3, 0}, { 3, 2}, { 5, 3}, { 1, 6}, { 13, 3}, { 4, 2},
{ 3, 0}, /* Row 9 */
{ 2, 0}, { 1, 5}, { 6, 2}, { 2, 3}, { 2, 4}, { 1, 6},
{ 9, 3}, { 6, 2}, { 1, 5}, { 2, 0}, /* Row 10 */
{ 2, 0}, { 1, 5}, { 8, 2}, { 1, 7}, { 3, 4}, { 1, 6},
{ 2, 2}, { 1, 3}, { 10, 2}, { 1, 5}, { 2, 0}, /* Row 11 */
{ 1, 0}, { 4, 5}, { 6, 2}, { 1, 7}, { 4, 4}, { 1, 7},
{ 1, 3}, { 8, 2}, { 4, 5}, { 2, 0}, /* Row 12 */
{ 1, 0}, { 7, 5}, { 3, 2}, { 1, 7}, { 6, 4}, { 1, 7},
{ 3, 2}, { 8, 5}, { 2, 0}, /* Row 13 */
{ 1, 0}, { 9, 5}, { 1, 2}, { 1, 7}, { 8, 4}, { 1, 7},
{ 8, 5}, { 1, 1}, { 1, 5}, { 1, 0}, /* Row 14 */
{ 1, 0}, { 4, 1}, { 6, 5}, { 1, 7}, { 10, 4}, { 1, 7},
{ 3, 5}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 15 */
{ 1, 0}, { 8, 1}, { 2, 5}, { 1, 7}, { 10, 4}, { 1, 7},
{ 7, 1}, { 1, 5}, { 1, 0}, /* Row 16 */
{ 1, 0}, { 10, 1}, { 1, 7}, { 9, 4}, { 1, 5}, { 8, 1},
{ 1, 5}, { 1, 0}, /* Row 17 */
{ 1, 0}, { 10, 1}, { 1, 7}, { 7, 4}, { 1, 5}, { 10, 1},
{ 2, 0}, /* Row 18 */
{ 1, 0}, { 1, 5}, { 9, 1}, { 1, 7}, { 5, 4}, { 1, 7},
{ 12, 1}, { 2, 0}, /* Row 19 */
{ 2, 0}, { 9, 1}, { 1, 7}, { 4, 4}, { 1, 5}, { 13, 1},
{ 2, 0}, /* Row 20 */
{ 2, 0}, { 9, 1}, { 1, 7}, { 2, 4}, { 1, 7}, { 1, 2},
{ 13, 1}, { 1, 5}, { 2, 0}, /* Row 21 */
{ 2, 0}, { 1, 5}, { 8, 1}, { 1, 7}, { 1, 4}, { 1, 5},
{ 6, 2}, { 9, 1}, { 3, 0}, /* Row 22 */
{ 3, 0}, { 7, 1}, { 1, 2}, { 1, 5}, { 10, 2}, { 6, 1},
{ 1, 5}, { 3, 0}, /* Row 23 */
{ 4, 0}, { 4, 1}, { 16, 2}, { 4, 1}, { 4, 0}, /* Row 24 */
{ 4, 0}, { 1, 5}, { 2, 1}, { 18, 2}, { 2, 1}, { 5, 0}, /* Row 25 */
{ 5, 0}, { 1, 5}, { 1, 1}, { 19, 2}, { 1, 5}, { 5, 0}, /* Row 26 */
{ 6, 0}, { 1, 5}, { 18, 2}, { 7, 0}, /* Row 27 */
{ 8, 0}, { 15, 2}, { 1, 5}, { 8, 0}, /* Row 28 */
{ 9, 0}, { 1, 5}, { 12, 2}, { 10, 0}, /* Row 29 */
{ 12, 0}, { 8, 2}, { 12, 0}, /* Row 30 */
{ 32, 0}, /* Row 31 */
};
const struct NXWidgets::SRlePaletteBitmap NxWM::g_mplayerPlayBitmap =
{
CONFIG_NXWIDGETS_BPP,
CONFIG_NXWIDGETS_FMT,
BITMAP_PALETTESIZE,
BITMAP_WIDTH,
BITMAP_HEIGHT,
{palette, hilight_palette},
play_bitmap
};
/* Bitmap definition for the "Pause" button */
static const NXWidgets::SRlePaletteBitmapEntry pause_bitmap[] =
{
{ 32, 0}, /* Row 0 */
{ 14, 0}, { 4, 7}, { 14, 0}, /* Row 1 */
{ 10, 0}, { 12, 7}, { 10, 0}, /* Row 2 */
{ 8, 0}, { 4, 6}, { 8, 7}, { 4, 6}, { 8, 0}, /* Row 3 */
{ 7, 0}, { 7, 6}, { 3, 7}, { 8, 6}, { 7, 0}, /* Row 4 */
{ 6, 0}, { 3, 3}, { 13, 6}, { 4, 3}, { 6, 0}, /* Row 5 */
{ 5, 0}, { 6, 3}, { 9, 6}, { 7, 3}, { 5, 0}, /* Row 6 */
{ 4, 0}, { 1, 2}, { 22, 3}, { 1, 2}, { 4, 0}, /* Row 7 */
{ 3, 0}, { 1, 5}, { 23, 3}, { 1, 2}, { 1, 5}, { 3, 0}, /* Row 8 */
{ 3, 0}, { 3, 2}, { 19, 3}, { 4, 2}, { 3, 0}, /* Row 9 */
{ 2, 0}, { 1, 5}, { 5, 2}, { 2, 3}, { 1, 6}, { 3, 4},
{ 3, 3}, { 1, 7}, { 2, 4}, { 1, 7}, { 2, 3}, { 6, 2},
{ 1, 5}, { 2, 0}, /* Row 10 */
{ 2, 0}, { 1, 5}, { 7, 2}, { 1, 7}, { 3, 4}, { 1, 7},
{ 1, 2}, { 1, 3}, { 4, 4}, { 1, 3}, { 7, 2}, { 1, 5},
{ 2, 0}, /* Row 11 */
{ 1, 0}, { 4, 5}, { 5, 2}, { 1, 7}, { 3, 4}, { 1, 7},
{ 1, 2}, { 1, 3}, { 4, 4}, { 1, 6}, { 4, 2}, { 4, 5},
{ 2, 0}, /* Row 12 */
{ 1, 0}, { 8, 5}, { 1, 2}, { 1, 7}, { 3, 4}, { 1, 7},
{ 1, 2}, { 1, 5}, { 4, 4}, { 1, 5}, { 1, 2}, { 7, 5},
{ 2, 0}, /* Row 13 */
{ 1, 0}, { 9, 5}, { 1, 7}, { 3, 4}, { 1, 7}, { 1, 2},
{ 1, 5}, { 4, 4}, { 8, 5}, { 1, 1}, { 1, 5}, { 1, 0}, /* Row 14 */
{ 1, 0}, { 4, 1}, { 5, 5}, { 1, 7}, { 3, 4}, { 1, 7},
{ 2, 5}, { 4, 4}, { 5, 5}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 15 */
{ 1, 0}, { 9, 1}, { 1, 7}, { 3, 4}, { 1, 7}, { 2, 5},
{ 4, 4}, { 1, 5}, { 8, 1}, { 1, 5}, { 1, 0}, /* Row 16 */
{ 1, 0}, { 9, 1}, { 1, 7}, { 3, 4}, { 1, 7}, { 1, 1},
{ 1, 5}, { 4, 4}, { 1, 5}, { 8, 1}, { 1, 5}, { 1, 0}, /* Row 17 */
{ 1, 0}, { 9, 1}, { 1, 7}, { 3, 4}, { 1, 7}, { 1, 1},
{ 1, 5}, { 4, 4}, { 1, 5}, { 8, 1}, { 2, 0}, /* Row 18 */
{ 1, 0}, { 1, 5}, { 8, 1}, { 1, 7}, { 3, 4}, { 1, 7},
{ 1, 1}, { 1, 5}, { 4, 4}, { 1, 5}, { 8, 1}, { 2, 0}, /* Row 19 */
{ 2, 0}, { 8, 1}, { 1, 7}, { 3, 4}, { 1, 7}, { 1, 1},
{ 1, 5}, { 4, 4}, { 1, 5}, { 8, 1}, { 2, 0}, /* Row 20 */
{ 2, 0}, { 8, 1}, { 1, 7}, { 3, 4}, { 1, 7}, { 1, 1},
{ 1, 2}, { 4, 4}, { 1, 5}, { 7, 1}, { 1, 5}, { 2, 0}, /* Row 21 */
{ 2, 0}, { 1, 5}, { 7, 1}, { 1, 7}, { 3, 4}, { 1, 6},
{ 1, 1}, { 1, 2}, { 4, 4}, { 1, 2}, { 7, 1}, { 3, 0}, /* Row 22 */
{ 3, 0}, { 7, 1}, { 1, 2}, { 3, 6}, { 4, 2}, { 2, 6},
{ 2, 2}, { 6, 1}, { 1, 5}, { 3, 0}, /* Row 23 */
{ 4, 0}, { 4, 1}, { 16, 2}, { 4, 1}, { 4, 0}, /* Row 24 */
{ 4, 0}, { 1, 5}, { 2, 1}, { 18, 2}, { 2, 1}, { 5, 0}, /* Row 25 */
{ 5, 0}, { 1, 5}, { 1, 1}, { 6, 2}, { 6, 2}, { 7, 2},
{ 1, 5}, { 5, 0}, /* Row 26 */
{ 6, 0}, { 1, 5}, { 4, 2}, { 1, 5}, { 8, 2}, { 1, 5},
{ 4, 2}, { 7, 0}, /* Row 27 */
{ 8, 0}, { 3, 2}, { 4, 2}, { 2, 2}, { 4, 2}, { 2, 2},
{ 1, 5}, { 8, 0}, /* Row 28 */
{ 9, 0}, { 1, 5}, { 3, 2}, { 6, 2}, { 3, 2}, { 10, 0}, /* Row 29 */
{ 12, 0}, { 8, 2}, { 12, 0}, /* Row 30 */
{ 32, 0}, /* Row 31 */
};
const struct NXWidgets::SRlePaletteBitmap NxWM::g_mplayerPauseBitmap =
{
CONFIG_NXWIDGETS_BPP,
CONFIG_NXWIDGETS_FMT,
BITMAP_PALETTESIZE,
BITMAP_WIDTH,
BITMAP_HEIGHT,
{palette, hilight_palette},
pause_bitmap
};
/* Bitmap definition for "Rewind" control */
static const NXWidgets::SRlePaletteBitmapEntry rew_bitmap[] =
{
{ 32, 0}, /* Row 0 */
// { 14, 0}, { 3, 4}, { 1, 7}, { 14, 0}, /* Row 1 */
{ 14, 0}, { 4, 7}, { 14, 0}, /* Row 1 */
{ 10, 0}, { 12, 7}, { 10, 0}, /* Row 2 */
{ 8, 0}, { 1, 7}, { 3, 6}, { 8, 7},
{ 3, 6}, { 1, 7}, { 8, 0}, /* Row 3 */
{ 7, 0}, { 7, 6}, { 3, 7}, { 8, 6}, { 7, 0}, /* Row 4 */
{ 6, 0}, { 3, 3}, { 13, 6}, { 4, 3}, { 6, 0}, /* Row 5 */
{ 5, 0}, { 6, 3}, { 9, 6}, { 7, 3}, { 5, 0}, /* Row 6 */
{ 4, 0}, { 23, 3}, { 1, 2}, { 4, 0}, /* Row 7 */
{ 3, 0}, { 1, 5}, { 23, 3}, { 1, 2}, { 1, 5}, { 3, 0}, /* Row 8 */
{ 3, 0}, { 3, 2}, { 18, 3}, { 5, 2}, { 3, 0}, /* Row 9 */
{ 2, 0}, { 1, 5}, { 5, 2}, { 6, 3}, { 1, 6}, { 7, 3},
{ 2, 2}, { 2, 6}, { 3, 2}, { 1, 5}, { 2, 0}, /* Row 10 */
{ 2, 0}, { 1, 5}, { 9, 2}, { 1, 6}, { 2, 4}, { 1, 3},
{ 1, 2}, { 2, 3}, { 3, 2}, { 1, 6}, { 2, 4}, { 1, 6},
{ 3, 2}, { 1, 5}, { 2, 0}, /* Row 11 */
{ 1, 0}, { 2, 5}, { 7, 2}, { 1, 6}, { 4, 4}, { 1, 3},
{ 4, 2}, { 1, 3}, { 1, 7}, { 3, 4}, { 1, 7}, { 3, 2},
{ 1, 5}, { 2, 0}, /* Row 12 */
{ 1, 0}, { 5, 5}, { 2, 2}, { 1, 5}, { 1, 7}, { 5, 4},
{ 1, 5}, { 3, 2}, { 1, 7}, { 5, 4}, { 1, 7}, { 1, 2},
{ 3, 5}, { 2, 0}, /* Row 13 */
{ 1, 0}, { 6, 5}, { 1, 7}, { 7, 4}, { 1, 5}, { 1, 2},
{ 1, 7}, { 7, 4}, { 1, 7}, { 3, 5}, { 1, 1}, { 1, 5},
{ 1, 0}, /* Row 14 */
{ 1, 0}, { 4, 1}, { 1, 7}, { 9, 4}, { 1, 7}, { 9, 4},
{ 1, 7}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 15 */
{ 1, 0}, { 4, 1}, { 1, 5}, { 9, 4}, { 1, 7}, { 9, 4},
{ 1, 5}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 16 */
{ 1, 0}, { 6, 1}, { 1, 5}, { 7, 4}, { 1, 5}, { 1, 1},
{ 1, 5}, { 7, 4}, { 1, 5}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 17 */
{ 1, 0}, { 8, 1}, { 1, 7}, { 5, 4}, { 1, 5}, { 3, 1},
{ 1, 7}, { 5, 4}, { 1, 5}, { 4, 1}, { 2, 0}, /* Row 18 */
{ 1, 0}, { 1, 5}, { 8, 1}, { 1, 5}, { 4, 4}, { 1, 5},
{ 4, 1}, { 1, 5}, { 4, 4}, { 1, 5}, { 4, 1}, { 2, 0}, /* Row 19 */
{ 2, 0}, { 10, 1}, { 1, 7}, { 2, 4}, { 1, 2}, { 6, 1},
{ 1, 7}, { 2, 4}, { 1, 5}, { 4, 1}, { 2, 0}, /* Row 20 */
{ 2, 0}, { 11, 1}, { 1, 5}, { 1, 4}, { 1, 2}, { 7, 1},
{ 1, 5}, { 1, 7}, { 1, 5}, { 3, 1}, { 1, 5}, { 2, 0}, /* Row 21 */
{ 2, 0}, { 1, 5}, { 9, 1}, { 1, 2}, { 1, 1}, { 6, 2},
{ 9, 1}, { 3, 0}, /* Row 22 */
{ 3, 0}, { 7, 1}, { 12, 2}, { 6, 1}, { 1, 5}, { 3, 0}, /* Row 23 */
{ 4, 0}, { 5, 1}, { 14, 2}, { 5, 1}, { 4, 0}, /* Row 24 */
{ 4, 0}, { 1, 5}, { 2, 1}, { 18, 2}, { 2, 1}, { 5, 0}, /* Row 25 */
{ 5, 0}, { 1, 5}, { 1, 1}, { 6, 2}, { 6, 2}, { 7, 2},
{ 1, 5}, { 5, 0}, /* Row 26 */
{ 6, 0}, { 1, 5}, { 4, 2}, { 1, 5}, { 8, 2}, { 1, 5},
{ 4, 2}, { 7, 0}, /* Row 27 */
{ 8, 0}, { 3, 2}, { 3, 2}, { 4, 2}, { 3, 2}, { 2, 2},
{ 1, 5}, { 8, 0}, /* Row 28 */
{ 9, 0}, { 1, 5}, { 3, 2}, { 6, 2}, { 2, 2}, { 1, 5},
{ 10, 0}, /* Row 29 */
{ 12, 0}, { 3, 2}, { 2, 2}, { 3, 2}, { 12, 0}, /* Row 30 */
{ 32, 0}, /* Row 31 */
};
const struct NXWidgets::SRlePaletteBitmap NxWM::g_mplayerRewBitmap =
{
CONFIG_NXWIDGETS_BPP,
CONFIG_NXWIDGETS_FMT,
BITMAP_PALETTESIZE,
BITMAP_WIDTH,
BITMAP_HEIGHT,
{palette, hilight_palette},
rew_bitmap
};
/* Bitmap definition for "Forward" control */
static const NXWidgets::SRlePaletteBitmapEntry fwd_bitmap[] =
{
{ 32, 0}, /* Row 0 */
{ 14, 0}, { 4, 7}, { 14, 0}, /* Row 1 */
{ 10, 0}, { 12, 7}, { 10, 0}, /* Row 2 */
{ 8, 0}, { 1, 7}, { 3, 6}, { 8, 7},
{ 3, 6}, { 1, 7}, { 8, 0}, /* Row 3 */
{ 7, 0}, { 7, 6}, { 3, 7}, { 8, 6}, { 7, 0}, /* Row 4 */
{ 6, 0}, { 3, 3}, { 13, 6}, { 4, 3}, { 6, 0}, /* Row 5 */
{ 5, 0}, { 6, 3}, { 10, 6}, { 6, 3}, { 5, 0}, /* Row 6 */
{ 4, 0}, { 1, 2}, { 22, 3}, { 1, 2}, { 4, 0}, /* Row 7 */
{ 3, 0}, { 1, 5}, { 23, 3}, { 1, 2}, { 1, 5}, { 3, 0}, /* Row 8 */
{ 3, 0}, { 3, 2}, { 19, 3}, { 4, 2}, { 3, 0}, /* Row 9 */
{ 2, 0}, { 1, 5}, { 3, 2}, { 2, 6}, { 2, 2}, { 7, 3},
{ 1, 6}, { 5, 3}, { 6, 2}, { 1, 5}, { 2, 0}, /* Row 10 */
{ 2, 0}, { 1, 5}, { 3, 2}, { 1, 7}, { 2, 4}, { 1, 3},
{ 2, 2}, { 3, 3}, { 1, 2}, { 1, 6}, { 2, 4}, { 1, 6},
{ 9, 2}, { 1, 5}, { 2, 0}, /* Row 11 */
{ 1, 0}, { 2, 5}, { 3, 2}, { 1, 7}, { 3, 4}, { 1, 7},
{ 5, 2}, { 1, 6}, { 4, 4}, { 1, 5}, { 7, 2}, { 1, 5},
{ 2, 0}, /* Row 12 */
{ 1, 0}, { 4, 5}, { 1, 2}, { 1, 7}, { 5, 4}, { 1, 7},
{ 3, 2}, { 1, 6}, { 5, 4}, { 1, 7}, { 1, 5}, { 2, 2},
{ 4, 5}, { 2, 0}, /* Row 13 */
{ 1, 0}, { 1, 5}, { 1, 1}, { 2, 5}, { 1, 1}, { 1, 7},
{ 7, 4}, { 1, 7}, { 1, 2}, { 1, 5}, { 7, 4}, { 1, 7},
{ 4, 5}, { 1, 1}, { 1, 5}, { 1, 0}, /* Row 14 */
{ 1, 0}, { 5, 1}, { 1, 7}, { 9, 4}, { 1, 7}, { 9, 4},
{ 1, 5}, { 3, 1}, { 1, 5}, { 1, 0}, /* Row 15 */
{ 1, 0}, { 5, 1}, { 1, 7}, { 8, 4}, { 2, 7}, { 8, 4},
{ 1, 7}, { 4, 1}, { 1, 5}, { 1, 0}, /* Row 16 */
{ 1, 0}, { 5, 1}, { 1, 5}, { 7, 4}, { 1, 5}, { 1, 1},
{ 1, 5}, { 7, 4}, { 1, 5}, { 5, 1}, { 1, 5}, { 1, 0}, /* Row 17 */
{ 1, 0}, { 5, 1}, { 1, 5}, { 5, 4}, { 1, 7}, { 3, 1},
{ 1, 5}, { 5, 4}, { 1, 7}, { 7, 1}, { 2, 0}, /* Row 18 */
{ 1, 0}, { 1, 5}, { 4, 1}, { 1, 5}, { 3, 4}, { 1, 7},
{ 1, 2}, { 4, 1}, { 1, 5}, { 4, 4}, { 1, 5}, { 8, 1},
{ 2, 0}, /* Row 19 */
{ 2, 0}, { 4, 1}, { 1, 5}, { 2, 4}, { 1, 5}, { 6, 1},
{ 1, 5}, { 2, 4}, { 1, 7}, { 10, 1}, { 2, 0}, /* Row 20 */
{ 2, 0}, { 4, 1}, { 2, 7}, { 8, 1}, { 1, 5}, { 1, 4},
{ 1, 2}, { 10, 1}, { 1, 5}, { 2, 0}, /* Row 21 */
{ 2, 0}, { 1, 5}, { 9, 1}, { 6, 2}, { 1, 1}, { 1, 2},
{ 9, 1}, { 3, 0}, /* Row 22 */
{ 3, 0}, { 7, 1}, { 12, 2}, { 6, 1}, { 1, 5}, { 3, 0}, /* Row 23 */
{ 4, 0}, { 5, 1}, { 14, 2}, { 5, 1}, { 4, 0}, /* Row 24 */
{ 4, 0}, { 1, 5}, { 2, 1}, { 18, 2}, { 2, 1}, { 5, 0}, /* Row 25 */
{ 5, 0}, { 1, 5}, { 1, 1}, { 6, 2}, { 6, 2}, { 7, 2},
{ 1, 5}, { 5, 0}, /* Row 26 */
{ 6, 0}, { 1, 5}, { 4, 2}, { 1, 5}, { 8, 2}, { 1, 5},
{ 4, 2}, { 7, 0}, /* Row 27 */
{ 8, 0}, { 3, 2}, { 3, 2}, { 4, 2}, { 3, 2}, { 2, 2},
{ 1, 5}, { 8, 0}, /* Row 28 */
{ 9, 0}, { 1, 5}, { 3, 2}, { 6, 2}, { 2, 2}, { 1, 5},
{ 10, 0}, /* Row 29 */
{ 12, 0}, { 3, 2}, { 2, 2}, { 3, 2}, { 12, 0}, /* Row 30 */
{ 32, 0}, /* Row 31 */
};
const struct NXWidgets::SRlePaletteBitmap NxWM::g_mplayerFwdBitmap =
{
CONFIG_NXWIDGETS_BPP,
CONFIG_NXWIDGETS_FMT,
BITMAP_PALETTESIZE,
BITMAP_WIDTH,
BITMAP_HEIGHT,
{palette, hilight_palette},
fwd_bitmap
};
static const NXWidgets::SRlePaletteBitmapEntry vol_bitmap[] =
{
{ 22, 0}, /* Row 0 */
{ 9, 0}, { 5, 7}, { 8, 0}, /* Row 1 */
{ 6, 0}, { 2, 6}, { 6, 7}, { 2, 6}, { 1, 7}, { 5, 0}, /* Row 2 */
{ 4, 0}, { 2, 3}, { 9, 6}, { 3, 3}, { 4, 0}, /* Row 3 */
{ 3, 0}, { 5, 3}, { 6, 6}, { 5, 3}, { 3, 0}, /* Row 4 */
{ 3, 0}, { 16, 3}, { 3, 0}, /* Row 5 */
{ 2, 0}, { 2, 2}, { 13, 3}, { 3, 2}, { 2, 0}, /* Row 6 */
{ 1, 0}, { 1, 5}, { 4, 2}, { 10, 3}, { 4, 2}, { 1, 5},
{ 1, 0}, /* Row 7 */
{ 1, 0}, { 2, 5}, { 15, 2}, { 3, 5}, { 1, 0}, /* Row 8 */
{ 1, 0}, { 5, 5}, { 10, 2}, { 5, 5}, { 1, 0}, /* Row 9 */
{ 1, 0}, { 2, 1}, { 15, 5}, { 3, 1}, { 1, 0}, /* Row 10 */
{ 1, 0}, { 5, 1}, { 10, 5}, { 5, 1}, { 1, 0}, /* Row 11 */
{ 1, 0}, { 20, 1}, { 1, 0}, /* Row 12 */
{ 1, 0}, { 20, 1}, { 1, 0}, /* Row 13 */
{ 1, 0}, { 19, 1}, { 1, 5}, { 1, 0}, /* Row 14 */
{ 1, 0}, { 1, 5}, { 7, 1}, { 1, 5}, { 4, 2}, { 6, 1},
{ 2, 0}, /* Row 15 */
{ 2, 0}, { 5, 1}, { 8, 2}, { 4, 1}, { 1, 5}, { 2, 0}, /* Row 16 */
{ 3, 0}, { 2, 1}, { 12, 2}, { 2, 1}, { 3, 0}, /* Row 17 */
{ 3, 0}, { 1, 5}, { 1, 1}, { 13, 2}, { 1, 5}, { 3, 0}, /* Row 18 */
{ 6, 0}, { 10, 2}, { 1, 5}, { 5, 0}, /* Row 19 */
{ 6, 0}, { 1, 5}, { 8, 2}, { 7, 0}, /* Row 20 */
{ 22, 0}, /* Row 21 */
};
const struct NXWidgets::SRlePaletteBitmap NxWM::g_mplayerVolBitmap =
{
CONFIG_NXWIDGETS_BPP,
CONFIG_NXWIDGETS_FMT,
BITMAP_PALETTESIZE,
22,
22,
{hilight_palette, hilight_palette},
vol_bitmap
};