text: /****************************************************************************
   * apps/include/graphics/nxwidgets/ibitmap.hxx
   *
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.  The
   * ASF licenses this file to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance with the
   * License.  You may obtain a copy of the License at
   *
   *   http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
   * License for the specific language governing permissions and limitations
   * under the License.
   *
   ****************************************************************************/
  
  /****************************************************************************
   *
   * 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 __APPS_INCLUDE_GRAPHICS_NXWIDGETS_IBITMAP_HXX
  #define __APPS_INCLUDE_GRAPHICS_NXWIDGETS_IBITMAP_HXX
  
  /****************************************************************************
   * Included Files
   ****************************************************************************/
  
  #include <nuttx/config.h>
  
  #include <sys/types.h>
  #include <stdint.h>
  #include <stdbool.h>
  
  #include <nuttx/nx/nxglib.h>
  
  /****************************************************************************
   * Pre-Processor Definitions
   ****************************************************************************/
  
  /****************************************************************************
   * Implementation Classes
   ****************************************************************************/
  
  #if defined(__cplusplus)
  
  namespace NXWidgets
  {
    /**
     * Abstract class defining the basic properties of a source bitmap.  The
     * primary intent of this class is two support a variety of sources of
     * bitmap data with various kinds of compression.
     */
  
    class IBitmap
    {
    public:
      /**
       * A virtual destructor is required in order to override the IBitmap
       * destructor.  We do this because if we delete IBitmap, we want the
       * destructor of the class that inherits from IBitmap to run, not this
       * one.
       */
  
      virtual ~IBitmap(void) { }
  
      /**
       * Get the bitmap's color format.
       *
       * @return The bitmap's color format.
       */
  
      virtual const uint8_t getColorFormat(void) const = 0;
  
      /**
       * Get the bitmap's color format.
       *
       * @return The bitmap's color format.
       */
  
      virtual const uint8_t getBitsPerPixel(void) const = 0;
  
      /**
       * Get the bitmap's width (in pixels/columns).
       *
       * @return The bitmap's width (in pixels/columns).
       */
  
      virtual const nxgl_coord_t getWidth(void) const = 0;
  
      /**
       * Get the bitmap's height (in rows).
       *
       * @return The bitmap's height (in rows).
       */
  
      virtual const nxgl_coord_t getHeight(void) const = 0;
  
      /**
       * Get the bitmap's width (in bytes).
       *
       * @return The bitmap's width.
       */
  
      virtual const size_t getStride(void) const = 0;
  
      /**
       * Use the colors associated with a selected image.
       *
       * @param selected.  true: Use colors for a selected widget,
       *   false: Use normal (default) colors.
       */
  
      virtual void setSelected(bool selected) = 0;
  
      /**
       * Get one row from the bit map image using the selected colors.
       *
       * @param x The offset into the row to get
       * @param y The row number to get
       * @param width The number of pixels to get from the row
       * @param data The memory location provided by the caller
       *   in which to return the data.  This should be at least
       *   (getWidth()*getBitsPerPixl() + 7)/8 bytes in length
       *   and properly aligned for the pixel color format.
       * @param True if the run was returned successfully.
       */
  
      virtual bool getRun(nxgl_coord_t x, nxgl_coord_t y, nxgl_coord_t width,
                          FAR void *data) = 0;
    };
  }
  
  #endif // __cplusplus
  
  #endif // __APPS_INCLUDE_GRAPHICS_NXWIDGETS_IBITMAP_HXX
  