Use PixelBuffer objects as the interface for encoders and decoders
This avoid a lot of unnecessary middle men. This also pushes the
responsibility for pixel format conversion into the encoders and
decoders. The new bufferFromBuffer() is used for direct conversion,
rather than PixelTransformer/TransImageGetter.
diff --git a/vncviewer/Viewport.h b/vncviewer/Viewport.h
index e112efd..0523cd1 100644
--- a/vncviewer/Viewport.h
+++ b/vncviewer/Viewport.h
@@ -22,10 +22,9 @@
#include <map>
-#include <FL/Fl_Widget.H>
+namespace rfb { class ModifiablePixelBuffer; }
-#include <rfb/Region.h>
-#include <rfb/Pixel.h>
+#include <FL/Fl_Widget.H>
class Fl_Menu_Button;
class Fl_RGB_Image;
@@ -41,23 +40,16 @@
Viewport(int w, int h, const rfb::PixelFormat& serverPF, CConn* cc_);
~Viewport();
- // PixelFormat of incoming write operations
- void setServerPF(const rfb::PixelFormat& pf);
// Most efficient format (from Viewport's point of view)
const rfb::PixelFormat &getPreferredPF();
// Flush updates to screen
void updateWindow();
- // Methods forwarded from CConn
+ // Return a pointer to the framebuffer for decoders to write into
+ rfb::ModifiablePixelBuffer* getFramebuffer(void);
- void fillRect(const rfb::Rect& r, rfb::Pixel pix);
- void imageRect(const rfb::Rect& r, void* pixels);
- void copyRect(const rfb::Rect& r, int srcX, int srcY);
-
- rdr::U8* getBufferRW(const rfb::Rect& r, int* stride);
- void commitBufferRW(const rfb::Rect& r);
-
+ // New image for the locally rendered cursor
void setCursor(int width, int height, const rfb::Point& hotspot,
void* data, void* mask);
@@ -71,12 +63,8 @@
private:
- void damageRect(const rfb::Rect& r);
-
PlatformPixelBuffer* createFramebuffer(int w, int h);
- static void handleUpdateTimeout(void *data);
-
static void handleClipboardChange(int source, void *data);
void handlePointerEvent(const rfb::Point& pos, int buttonMask);
@@ -96,8 +84,6 @@
CConn* cc;
PlatformPixelBuffer* frameBuffer;
- rfb::PixelTransformer *pixelTrans;
- rfb::Region damage;
rfb::Point lastPointerPos;
int lastButtonMask;