133 lines
3.4 KiB
C++

/******************************************************************************
* Copyright (c) 2018(-2023) STMicroelectronics.
* All rights reserved.
*
* This file is part of the TouchGFX 4.21.2 distribution.
*
* This software is licensed under terms that can be found in the LICENSE file in
* the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
*******************************************************************************/
/**
* @file touchgfx/widgets/PixelDataWidget.hpp
*
* Declares the touchgfx::PixelDataWidget class.
*/
#ifndef TOUCHGFX_PIXELDATAWIDGET_HPP
#define TOUCHGFX_PIXELDATAWIDGET_HPP
#include <touchgfx/Bitmap.hpp>
#include <touchgfx/hal/Types.hpp>
#include <touchgfx/widgets/Widget.hpp>
namespace touchgfx
{
/**
* A widget for displaying a buffer of pixel data. This can also be though of as a dynamic
* bitmap where the dimensions of the bitmap is the same as the dimensions of the widget
* and the actual bitmap data can be set and updated dynamically. The size of the buffer
* must match the number of bytes required for the widget calculated as WIDTH x HEIGHT x
* BYTES_PER_PIXEL. If the LCD is 16 bit per pixel the buffer must hold 2 bytes for each
* pixel. If the LCD is 24 bit the buffer must hold 3 bytes for each pixel.
*/
class PixelDataWidget : public Widget
{
public:
PixelDataWidget()
: Widget(),
buffer(0),
format(Bitmap::RGB888),
alpha(255)
{
}
virtual void draw(const Rect& invalidatedArea) const;
virtual Rect getSolidRect() const;
/**
* Set the pixel data to display. The given pointer must contain WIDTH x HEIGHT x
* BYTES_PER_PIXEL bytes of addressable image data.
*
* @param [in] data Image data.
*
* @see getPixelData, setBitmapFormat
*/
void setPixelData(uint8_t* const data)
{
buffer = data;
}
/**
* Get the pixel data memory pointer, previously set with setPixelData().
*
* @return The pixel data.
*
* @see setPixelData, setBitmapFormat
*/
uint8_t* getPixelData() const
{
return buffer;
}
/**
* Set the format of the pixel data. The supported formats depend on the display type. For
* example grayscale displays do not support color images.
*
* @param bitmapFormat Describes the format to use when reading the pixel data.
*
* @see getBitmapFormat
*/
void setBitmapFormat(Bitmap::BitmapFormat bitmapFormat)
{
format = bitmapFormat;
}
/**
* Get the format of the pixel data previously set using setBitmapFormat().
*
* @return The bitmap format.
*
* @see setBitmapFormat
*/
Bitmap::BitmapFormat getBitmapFormat() const
{
return format;
}
/**
* @copydoc Image::setAlpha
*/
void setAlpha(uint8_t newAlpha)
{
alpha = newAlpha;
}
/**
* @copydoc Image::getAlpha
*/
uint8_t getAlpha() const
{
return alpha;
}
virtual void invalidateContent() const
{
if (alpha > 0)
{
Widget::invalidateContent();
}
}
protected:
uint8_t* buffer; ///< The buffer where the pixels are copied from
Bitmap::BitmapFormat format; ///< The pixel format for the data.
uint8_t alpha; ///< The Alpha for this widget.
};
} // namespace touchgfx
#endif // TOUCHGFX_PIXELDATAWIDGET_HPP