NXWidgets  1.19
crlepalettebitmap.hxx
Go to the documentation of this file.
1 /****************************************************************************
2  * NxWidgets/libnxwidgets/include/crlepalettebitmap.hxx
3  *
4  * Copyright (C) 2012 Gregory Nutt. All rights reserved.
5  * Author: Gregory Nutt <gnutt@nuttx.org>
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  * notice, this list of conditions and the following disclaimer in
15  * the documentation and/or other materials provided with the
16  * distribution.
17  * 3. Neither the name NuttX, NxWidgets, nor the names of its contributors
18  * me be used to endorse or promote products derived from this software
19  * without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *
34  *
35  ****************************************************************************/
36 
37 #ifndef __INCLUDE_CRLEPALETTBITMAP_HXX
38 #define __INCLUDE_CRLEPALETTBITMAP_HXX
39 
40 /****************************************************************************
41  * Included Files
42  ****************************************************************************/
43 
44 #include <nuttx/config.h>
45 
46 #include <stdint.h>
47 #include <stdbool.h>
48 
49 #include <nuttx/nx/nxglib.h>
50 
51 #include "nxconfig.hxx"
52 #include "ibitmap.hxx"
53 
54 /****************************************************************************
55  * Pre-Processor Definitions
56  ****************************************************************************/
57 
58 /****************************************************************************
59  * Implementation Classes
60  ****************************************************************************/
61 
62 #if defined(__cplusplus)
63 
64 namespace NXWidgets
65 {
66  /**
67  * One Run-Length Encoded (RLE) value
68  */
69 
71  {
72  uint8_t npixels; /**< Number of pixels */
73  uint8_t lookup; /**< Pixel RGB lookup index */
74  };
75 
76  /**
77  * Run-Length Encoded (RLE), Paletted Bitmap Structure
78  */
79 
81  {
82  uint8_t bpp; /**< Bits per pixel */
83  uint8_t fmt; /**< Color format */
84  uint8_t nlut; /**< Number of colors in the Look-Up Table (LUT) */
85  nxgl_coord_t width; /**< Width in pixels */
86  nxgl_coord_t height; /**< Height in rows */
87  FAR const void *lut[2]; /**< Pointers to the beginning of the Look-Up Tables (LUTs) */
88 
89  /**
90  * The pointer to the beginning of the RLE data
91  */
92 
93  FAR const struct SRlePaletteBitmapEntry *data;
94  };
95 
96  /**
97  * Class providing bitmap accessor for a bitmap represented by SRlePaletteBitmap.
98  */
99 
100  class CRlePaletteBitmap : public IBitmap
101  {
102  protected:
103  /**
104  * The bitmap that is being managed
105  */
106 
107  FAR const struct SRlePaletteBitmap *m_bitmap; /**< The bitmap that is being managed */
108 
109  /**
110  * Accessor state data
111  */
112 
113  nxgl_coord_t m_row; /**< Logical row number */
114  nxgl_coord_t m_col; /**< Logical column number */
115  uint8_t m_remaining; /**< Number of bytes remaining in current entry */
116  FAR const void *m_lut; /**< The selected LUT */
117  FAR const struct SRlePaletteBitmapEntry *m_rle; /**< RLE entry being processed */
118 
119  /**
120  * Reset to the beginning of the image
121  */
122 
123  void startOfImage(void);
124 
125  /**
126  * Advance position data ahead. Called after npixels have
127  * have been consume.
128  *
129  * @param npixels The number of pixels to advance
130  * @return False if this goes beyond the end of the image
131  */
132 
133  bool advancePosition(nxgl_coord_t npixels);
134 
135  /**
136  * Seek ahead the specific number of pixels -- discarding
137  * and advancing.
138  *
139  * @param npixels The number of pixels to skip
140  * @return False if this goes beyond the end of the image
141  */
142 
143  bool skipPixels(nxgl_coord_t npixels);
144 
145  /** Seek to the beginning of the next row
146  *
147  * @return False if this was the last row of the image
148  */
149 
150  bool nextRow(void);
151 
152  /** Seek to the beignning specific row
153  *
154  * @param row The row number to seek to
155  * @return False if this goes beyond the end of the image
156  */
157 
158  bool seekRow(nxgl_coord_t row);
159 
160  /** Copy the pixels from the current RLE entry the specified number of times.
161  *
162  * @param npixels The number of pixels to copy. Must be less than or equal
163  * to m_remaining.
164  * @param data The memory location provided by the caller
165  * in which to return the data. This should be at least
166  * (getWidth()*getBitsPerPixl() + 7)/8 bytes in length
167  * and properly aligned for the pixel color format.
168  */
169 
170  void copyColor(nxgl_coord_t npixels, FAR void *data);
171 
172  /** Copy pixels from the current position
173  *
174  * @param npixels The number of pixels to copy
175  * @param data The memory location provided by the caller
176  * in which to return the data. This should be at least
177  * (getWidth()*getBitsPerPixl() + 7)/8 bytes in length
178  * and properly aligned for the pixel color format.
179  * @return False if this goes beyond the end of the image
180  */
181 
182  bool copyPixels(nxgl_coord_t npixels, FAR void *data);
183 
184  public:
185 
186  /**
187  * Constructor.
188  *
189  * @param bitmap The bitmap structure being wrapped.
190  */
191 
193 
194  /**
195  * Destructor.
196  */
197 
198  inline ~CRlePaletteBitmap(void) {}
199 
200  /**
201  * Get the bitmap's color format.
202  *
203  * @return The bitmap's width.
204  */
205 
206  const uint8_t getColorFormat(void) const;
207 
208  /**
209  * Get the bitmap's color format.
210  *
211  * @return The bitmap's color format.
212  */
213 
214  const uint8_t getBitsPerPixel(void) const;
215 
216  /**
217  * Get the bitmap's width (in pixels/columns).
218  *
219  * @return The bitmap's pixel depth.
220  */
221 
222  const nxgl_coord_t getWidth(void) const;
223 
224  /**
225  * Get the bitmap's height (in rows).
226  *
227  * @return The bitmap's height.
228  */
229 
230  const nxgl_coord_t getHeight(void) const;
231 
232  /**
233  * Get the bitmap's width (in bytes).
234  *
235  * @return The bitmap's width.
236  */
237 
238  const size_t getStride(void) const;
239 
240  /**
241  * Use the colors associated with a selected image.
242  *
243  * @param selected. true: Use colors for a selected widget,
244  * false: Use normal (default) colors.
245  */
246 
247  void setSelected(bool selected);
248 
249  /**
250  * Get one row from the bit map image using the selected colors.
251  *
252  * @param x The offset into the row to get
253  * @param y The row number to get
254  * @param width The number of pixels to get from the row
255  * @param data The memory location provided by the caller
256  * in which to return the data. This should be at least
257  * (getWidth()*getBitsPerPixl() + 7)/8 bytes in length
258  * and properly aligned for the pixel color format.
259  * @param True if the run was returned successfully.
260  */
261 
262  bool getRun(nxgl_coord_t x, nxgl_coord_t y, nxgl_coord_t width,
263  FAR void *data);
264  };
265 }
266 
267 #endif // __cplusplus
268 
269 #endif // __INCLUDE_CRLEPALETTBITMAP_HXX
FAR const struct SRlePaletteBitmap * m_bitmap
FAR const struct SRlePaletteBitmapEntry * m_rle
FAR const struct SRlePaletteBitmapEntry * data
static const NXWidgets::SRlePaletteBitmapEntry bitmap[]