git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@3711 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v0.0.90
@@ -23,6 +23,7 @@ | |||
#define __RFB_CMSGWRITER_H__ | |||
#include <rfb/InputHandler.h> | |||
#include <rfb/ScreenSet.h> | |||
namespace rdr { class OutStream; } | |||
@@ -41,6 +42,9 @@ namespace rfb { | |||
virtual void startMsg(int type)=0; | |||
virtual void endMsg()=0; | |||
virtual void writeSetDesktopSize(int width, int height, | |||
const ScreenSet& layout)=0; | |||
// CMsgWriter implemented methods | |||
virtual void writeSetPixelFormat(const PixelFormat& pf); | |||
virtual void writeSetEncodings(int nEncodings, rdr::U32* encodings); |
@@ -47,3 +47,31 @@ void CMsgWriterV3::endMsg() | |||
{ | |||
os->flush(); | |||
} | |||
void CMsgWriterV3::writeSetDesktopSize(int width, int height, | |||
const ScreenSet& layout) | |||
{ | |||
if (!cp->supportsSetDesktopSize) | |||
throw Exception("Server does not support SetDesktopSize"); | |||
startMsg(msgTypeSetDesktopSize); | |||
os->pad(1); | |||
os->writeU16(width); | |||
os->writeU16(height); | |||
os->writeU8(layout.num_screens()); | |||
os->pad(1); | |||
ScreenSet::const_iterator iter; | |||
for (iter = layout.begin();iter != layout.end();++iter) { | |||
os->writeU32(iter->id); | |||
os->writeU16(iter->dimensions.tl.x); | |||
os->writeU16(iter->dimensions.tl.y); | |||
os->writeU16(iter->dimensions.width()); | |||
os->writeU16(iter->dimensions.height()); | |||
os->writeU32(iter->flags); | |||
} | |||
endMsg(); | |||
} |
@@ -30,6 +30,8 @@ namespace rfb { | |||
virtual void startMsg(int type); | |||
virtual void endMsg(); | |||
virtual void writeSetDesktopSize(int width, int height, | |||
const ScreenSet& layout); | |||
}; | |||
} | |||
#endif |