Skip to content
Snippets Groups Projects
FXBitmap.i 3.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***********************************************************************
     * FXRuby -- the Ruby language bindings for the FOX GUI toolkit.
    
     * Copyright (c) 2001-2009 by Lyle Johnson. All Rights Reserved.
    
     *
     * This library is free software; you can redistribute it and/or
     * modify it under the terms of the GNU Lesser General Public
     * License as published by the Free Software Foundation; either
     * version 2.1 of the License, or (at your option) any later version.
     *
     * This library is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     * Lesser General Public License for more details.
     *
     * You should have received a copy of the GNU Lesser General Public
     * License along with this library; if not, write to the Free Software
     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     *
     * For further information please contact the author by e-mail
    
     * at "lyle@lylejohnson.name".
    
     ***********************************************************************/
    
    // Image rendering hints
    enum {
      BITMAP_KEEP       = 0x00000001,       // Keep pixel data in client
      BITMAP_OWNED      = 0x00000002,       // Pixel data is owned by image
      BITMAP_SHMI       = 0x00000020,       // Using shared memory image
      BITMAP_SHMP       = 0x00000040        // Using shared memory pixmap
      };
    
    
    
    /**
    * A Bitmap is a rectangular array of pixels.  It supports two representations
    
    * of these pixels: a client-side pixel buffer, and a server-side pixmap which
    * is stored in an organization directly compatible with the screen, for fast
    
    * drawing onto the device.
    * The server-side representation is not directly accessible from the current
    * process as it lives in the process of the X Server or GDI.
    * The client-side pixel array is of size height x (width+7)/8 bytes, in other
    * words 8 pixels packed into a single byte, starting at bit 0 on the left.
    */
    class FXBitmap : public FXDrawable {
    protected:
      FXuchar *data;                // Pixel data
      FXint    bytewidth;   // Number of bytes across
      FXuint   options;             // Options
    protected:
      FXBitmap();
    public:
      %extend {
         /**
          * Create a bitmap.  If a client-side pixel buffer has been specified,
          * the bitmap does not own the pixel buffer unless the BITMAP_OWNED flag is
          * set.  If the BITMAP_OWNED flag is set but a NULL pixel buffer is
          * passed, a pixel buffer will be automatically created and will be owned
          * by the bitmap. The flags BITMAP_SHMI and BITMAP_SHMP may be specified for
          * large bitmaps to instruct render() to use shared memory to communicate
          * with the server.
          */
        FXBitmap(FXApp* a,const void *pix=NULL,FXuint opts=0,FXint w=1,FXint h=1){
          return new FXRbBitmap(a,pix,opts,w,h);
          }
        }
    
      /// To get to the pixel data
      FXuchar* getData() const;
    
      /// To get to the option flags
      FXuint getOptions() const;
    
      /// Change options
      void setOptions(FXuint opts);
    
      /// Get pixel at x,y
      FXbool getPixel(FXint x,FXint y) const;
    
      /// Change pixel at x,y
      void setPixel(FXint x,FXint y,FXbool color);
    
      /// Cleanup
      virtual ~FXBitmap();
      };
    
    
    DECLARE_FXOBJECT_VIRTUALS(FXBitmap)
    DECLARE_FXID_VIRTUALS(FXBitmap)
    DECLARE_FXDRAWABLE_VIRTUALS(FXBitmap)
    DECLARE_FXBITMAP_VIRTUALS(FXBitmap)