]> source.dussan.org Git - tigervnc.git/commitdiff
Allow PixelBuffers to be const
authorPierre Ossman <ossman@cendio.se>
Thu, 13 Feb 2014 13:37:25 +0000 (14:37 +0100)
committerPierre Ossman <ossman@cendio.se>
Mon, 14 Jul 2014 14:00:20 +0000 (16:00 +0200)
common/rfb/Cursor.cxx
common/rfb/Cursor.h
common/rfb/PixelBuffer.cxx
common/rfb/PixelBuffer.h

index 62b767fad9eee7ddb5ad997c557aa555e8a07770..8ef8b1717f63710cbd5fb0f7b520ebd6ee755224 100644 (file)
@@ -82,7 +82,7 @@ void Cursor::drawOutline(const Pixel& c)
   mask.buf = outlined.mask.buf; outlined.mask.buf = 0;
 }
 
-rdr::U8* Cursor::getBitmap(Pixel* pix0, Pixel* pix1)
+rdr::U8* Cursor::getBitmap(Pixel* pix0, Pixel* pix1) const
 {
   bool gotPix0 = false;
   bool gotPix1 = false;
@@ -182,7 +182,7 @@ RenderedCursor::RenderedCursor()
 {
 }
 
-const rdr::U8* RenderedCursor::getBuffer(const Rect& _r, int* stride)
+const rdr::U8* RenderedCursor::getBuffer(const Rect& _r, int* stride) const
 {
   Rect r;
 
index 5d4623d67ea099b1521b23048acb4427634c4373..560e4d818525605dce043b84a4976c6f8409b514 100644 (file)
@@ -34,7 +34,7 @@ namespace rfb {
     rdr::U8Array mask;
     Point hotspot;
 
-    int maskLen() { return (width() + 7) / 8 * height(); }
+    int maskLen() const { return (width() + 7) / 8 * height(); }
 
     // setSize() resizes the cursor.  The contents of the data and mask are
     // undefined after this call.
@@ -46,7 +46,7 @@ namespace rfb {
     // getBitmap() tests whether the cursor is monochrome, and if so returns a
     // bitmap together with background and foreground colours.  The size and
     // layout of the bitmap are the same as the mask.
-    rdr::U8* getBitmap(Pixel* pix0, Pixel* pix1);
+    rdr::U8* getBitmap(Pixel* pix0, Pixel* pix1) const;
 
     // crop() crops the cursor down to the smallest possible size, based on the
     // mask.
@@ -59,7 +59,7 @@ namespace rfb {
 
     Rect getEffectiveRect() const { return buffer.getRect(offset); }
 
-    virtual const rdr::U8* getBuffer(const Rect& r, int* stride);
+    virtual const rdr::U8* getBuffer(const Rect& r, int* stride) const;
 
     void update(PixelBuffer* framebuffer, Cursor* cursor, const Point& pos);
 
index 3f7f301988840d980476e8b929264c984c56435e..b1359c2edc15dc48ebba186f1418e7e29bfafebc 100644 (file)
@@ -42,7 +42,7 @@ PixelBuffer::~PixelBuffer() {}
 
 
 void
-PixelBuffer::getImage(void* imageBuf, const Rect& r, int outStride) {
+PixelBuffer::getImage(void* imageBuf, const Rect& r, int outStride) const {
   int inStride;
   const U8* data = getBuffer(r, &inStride);
   // We assume that the specified rectangle is pre-clipped to the buffer
@@ -61,7 +61,7 @@ PixelBuffer::getImage(void* imageBuf, const Rect& r, int outStride) {
 }
 
 void PixelBuffer::getImage(const PixelFormat& pf, void* imageBuf,
-                           const Rect& r, int stride)
+                           const Rect& r, int stride) const
 {
   const rdr::U8* srcBuffer;
   int srcStride;
@@ -332,6 +332,12 @@ void FullFramePixelBuffer::commitBufferRW(const Rect& r)
 {
 }
 
+const rdr::U8* FullFramePixelBuffer::getBuffer(const Rect& r, int* stride_) const
+{
+  *stride_ = stride;
+  return &data[(r.tl.x + (r.tl.y * stride)) * format.bpp/8];
+}
+
 // -=- Managed pixel buffer class
 // Automatically allocates enough space for the specified format & area
 
index 5bc06c297f5ea6a534757b4e7c6900c4daee3911..b0db6eb5d84115dd58343afb6434ad20df5936ff 100644 (file)
@@ -65,18 +65,18 @@ namespace rfb {
     // Get a pointer into the buffer
     //   The pointer is to the top-left pixel of the specified Rect.
     //   The buffer stride (in pixels) is returned.
-    virtual const rdr::U8* getBuffer(const Rect& r, int* stride) = 0;
+    virtual const rdr::U8* getBuffer(const Rect& r, int* stride) const = 0;
 
     // Get pixel data for a given part of the buffer
     //   Data is copied into the supplied buffer, with the specified
     //   stride. Try to avoid using this though as getBuffer() will in
     //   most cases avoid the extra memory copy.
-    void getImage(void* imageBuf, const Rect& r, int stride=0);
+    void getImage(void* imageBuf, const Rect& r, int stride=0) const;
     // Get pixel data in a given format
     //   Works just the same as getImage(), but guaranteed to be in a
     //   specific format.
     void getImage(const PixelFormat& pf, void* imageBuf,
-                  const Rect& r, int stride=0);
+                  const Rect& r, int stride=0) const;
 
     ///////////////////////////////////////////////
     // Framebuffer update methods
@@ -114,11 +114,6 @@ namespace rfb {
     //   getBufferRW().
     virtual void commitBufferRW(const Rect& r) = 0;
 
-    // Default trivial handling of read-only access
-    virtual const rdr::U8* getBuffer(const Rect& r, int* stride) {
-      return getBufferRW(r, stride);
-    }
-
     ///////////////////////////////////////////////
     // Basic rendering operations
     // These operations DO NOT clip to the pixelbuffer area, or trap overruns.
@@ -162,6 +157,7 @@ namespace rfb {
     virtual ~FullFramePixelBuffer();
 
   public:
+    virtual const rdr::U8* getBuffer(const Rect& r, int* stride) const;
     virtual rdr::U8* getBufferRW(const Rect& r, int* stride);
     virtual void commitBufferRW(const Rect& r);