cleanups in the VNC plugin
Change-Id: Iac930d3c7036b285ff5003691bfecf6071795d54 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
This commit is contained in:
parent
a1dbf346e6
commit
ef4db5a347
@ -450,6 +450,7 @@ void QRfbRawEncoder::write()
|
|||||||
const int bytesPerPixel = server->clientBytesPerPixel();
|
const int bytesPerPixel = server->clientBytesPerPixel();
|
||||||
|
|
||||||
// create a region from the dirty rects and send the region's merged rects.
|
// create a region from the dirty rects and send the region's merged rects.
|
||||||
|
// ### use the tile map again
|
||||||
QRegion rgn = server->screen()->dirtyRegion;
|
QRegion rgn = server->screen()->dirtyRegion;
|
||||||
server->screen()->clearDirty();
|
server->screen()->clearDirty();
|
||||||
QT_VNC_DEBUG() << "QRfbRawEncoder::write()" << rgn;
|
QT_VNC_DEBUG() << "QRfbRawEncoder::write()" << rgn;
|
||||||
@ -496,25 +497,6 @@ void QRfbRawEncoder::write()
|
|||||||
const uchar *screendata = screenImage.scanLine(rect.y)
|
const uchar *screendata = screenImage.scanLine(rect.y)
|
||||||
+ rect.x * screenImage.depth() / 8;
|
+ rect.x * screenImage.depth() / 8;
|
||||||
|
|
||||||
#if 0 //ndef QT_NO_QWS_CURSOR
|
|
||||||
// hardware cursors must be blended with the screen memory
|
|
||||||
const bool doBlendCursor = qt_screencursor
|
|
||||||
&& !server->hasClientCursor()
|
|
||||||
&& qt_screencursor->isAccelerated();
|
|
||||||
QImage tileImage;
|
|
||||||
if (doBlendCursor) {
|
|
||||||
const QRect cursorRect = qt_screencursor->boundingRect()
|
|
||||||
.translated(-server->screen()->offset());
|
|
||||||
if (tileRect.intersects(cursorRect)) {
|
|
||||||
tileImage = screenImage.copy(tileRect);
|
|
||||||
blendCursor(tileImage,
|
|
||||||
tileRect.translated(server->screen()->offset()));
|
|
||||||
screendata = tileImage.bits();
|
|
||||||
linestep = tileImage.bytesPerLine();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // QT_NO_QWS_CURSOR
|
|
||||||
|
|
||||||
if (server->doPixelConversion()) {
|
if (server->doPixelConversion()) {
|
||||||
const int bufferSize = rect.w * rect.h * bytesPerPixel;
|
const int bufferSize = rect.w * rect.h * bytesPerPixel;
|
||||||
if (bufferSize > buffer.size())
|
if (bufferSize > buffer.size())
|
||||||
@ -541,7 +523,6 @@ void QRfbRawEncoder::write()
|
|||||||
socket->flush();
|
socket->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QVncClientCursor::QVncClientCursor(QVncServer *s)
|
QVncClientCursor::QVncClientCursor(QVncServer *s)
|
||||||
: server(s)
|
: server(s)
|
||||||
{
|
{
|
||||||
@ -703,9 +684,7 @@ void QVncServer::newConnection()
|
|||||||
|
|
||||||
QT_VNC_DEBUG() << "new Connection" << thread();
|
QT_VNC_DEBUG() << "new Connection" << thread();
|
||||||
|
|
||||||
// ####
|
qvnc_screen->setPowerState(QPlatformScreen::PowerStateOn);
|
||||||
// if (!qvnc_screen->screen() && !qvnc_screen->noDisablePainting)
|
|
||||||
// QWSServer::instance()->enablePainting(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QVncServer::readClient()
|
void QVncServer::readClient()
|
||||||
@ -976,46 +955,22 @@ void QVncServer::setEncodings()
|
|||||||
supportHextile = true;
|
supportHextile = true;
|
||||||
if (encoder)
|
if (encoder)
|
||||||
break;
|
break;
|
||||||
|
#if 0
|
||||||
switch (qvnc_screen->depth()) {
|
switch (qvnc_screen->depth()) {
|
||||||
#ifdef QT_QWS_DEPTH_8
|
|
||||||
case 8:
|
case 8:
|
||||||
encoder = new QRfbHextileEncoder<quint8>(this);
|
encoder = new QRfbHextileEncoder<quint8>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_12
|
|
||||||
case 12:
|
|
||||||
encoder = new QRfbHextileEncoder<qrgb444>(this);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_15
|
|
||||||
case 15:
|
|
||||||
encoder = new QRfbHextileEncoder<qrgb555>(this);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_16
|
|
||||||
case 16:
|
case 16:
|
||||||
encoder = new QRfbHextileEncoder<quint16>(this);
|
encoder = new QRfbHextileEncoder<quint16>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_18
|
|
||||||
case 18:
|
|
||||||
encoder = new QRfbHextileEncoder<qrgb666>(this);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_24
|
|
||||||
case 24:
|
|
||||||
encoder = new QRfbHextileEncoder<qrgb888>(this);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_32
|
|
||||||
case 32:
|
case 32:
|
||||||
encoder = new QRfbHextileEncoder<quint32>(this);
|
encoder = new QRfbHextileEncoder<quint32>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
QT_VNC_DEBUG("QVncServer::setEncodings: using hextile");
|
QT_VNC_DEBUG("QVncServer::setEncodings: using hextile");
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case ZRLE:
|
case ZRLE:
|
||||||
supportZRLE = true;
|
supportZRLE = true;
|
||||||
@ -1129,22 +1084,10 @@ bool QVncServer::pixelConversionNeeded() const
|
|||||||
case 32:
|
case 32:
|
||||||
case 24:
|
case 24:
|
||||||
return false;
|
return false;
|
||||||
case 18:
|
|
||||||
return (pixelFormat.redBits == 6
|
|
||||||
&& pixelFormat.greenBits == 6
|
|
||||||
&& pixelFormat.blueBits == 6);
|
|
||||||
case 16:
|
case 16:
|
||||||
return (pixelFormat.redBits == 5
|
return (pixelFormat.redBits == 5
|
||||||
&& pixelFormat.greenBits == 6
|
&& pixelFormat.greenBits == 6
|
||||||
&& pixelFormat.blueBits == 5);
|
&& pixelFormat.blueBits == 5);
|
||||||
case 15:
|
|
||||||
return (pixelFormat.redBits == 5
|
|
||||||
&& pixelFormat.greenBits == 5
|
|
||||||
&& pixelFormat.blueBits == 5);
|
|
||||||
case 12:
|
|
||||||
return (pixelFormat.redBits == 4
|
|
||||||
&& pixelFormat.greenBits == 4
|
|
||||||
&& pixelFormat.blueBits == 4);
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1210,25 +1153,10 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
|
|||||||
|
|
||||||
const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8;
|
const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8;
|
||||||
|
|
||||||
// nibble = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
int r, g, b;
|
int r, g, b;
|
||||||
|
|
||||||
switch (screendepth) {
|
switch (screendepth) {
|
||||||
#if 0
|
|
||||||
case 4: {
|
|
||||||
if (!nibble) {
|
|
||||||
r = ((*src) & 0x0f) << 4;
|
|
||||||
} else {
|
|
||||||
r = (*src) & 0xf0;
|
|
||||||
src++;
|
|
||||||
}
|
|
||||||
nibble = !nibble;
|
|
||||||
g = b = r;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
case 8: {
|
case 8: {
|
||||||
QRgb rgb = qvnc_screen->image()->colorTable()[int(*src)];
|
QRgb rgb = qvnc_screen->image()->colorTable()[int(*src)];
|
||||||
r = qRed(rgb);
|
r = qRed(rgb);
|
||||||
@ -1237,26 +1165,6 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
|
|||||||
src++;
|
src++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef QT_QWS_DEPTH_12
|
|
||||||
case 12: {
|
|
||||||
quint32 p = quint32(*reinterpret_cast<const qrgb444*>(src));
|
|
||||||
r = qRed(p);
|
|
||||||
g = qGreen(p);
|
|
||||||
b = qBlue(p);
|
|
||||||
src += sizeof(qrgb444);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_15
|
|
||||||
case 15: {
|
|
||||||
quint32 p = quint32(*reinterpret_cast<const qrgb555*>(src));
|
|
||||||
r = qRed(p);
|
|
||||||
g = qGreen(p);
|
|
||||||
b = qBlue(p);
|
|
||||||
src += sizeof(qrgb555);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
case 16: {
|
case 16: {
|
||||||
quint16 p = *reinterpret_cast<const quint16*>(src);
|
quint16 p = *reinterpret_cast<const quint16*>(src);
|
||||||
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
#if Q_BYTE_ORDER == Q_BIG_ENDIAN
|
||||||
@ -1272,26 +1180,6 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
|
|||||||
src += sizeof(quint16);
|
src += sizeof(quint16);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef QT_QWS_DEPTH_18
|
|
||||||
case 18: {
|
|
||||||
quint32 p = quint32(*reinterpret_cast<const qrgb666*>(src));
|
|
||||||
r = qRed(p);
|
|
||||||
g = qGreen(p);
|
|
||||||
b = qBlue(p);
|
|
||||||
src += sizeof(qrgb666);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef QT_QWS_DEPTH_24
|
|
||||||
case 24: {
|
|
||||||
quint32 p = quint32(*reinterpret_cast<const qrgb888*>(src));
|
|
||||||
r = qRed(p);
|
|
||||||
g = qGreen(p);
|
|
||||||
b = qBlue(p);
|
|
||||||
src += sizeof(qrgb888);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
case 32: {
|
case 32: {
|
||||||
quint32 p = *reinterpret_cast<const quint32*>(src);
|
quint32 p = *reinterpret_cast<const quint32*>(src);
|
||||||
r = (p >> 16) & 0xff;
|
r = (p >> 16) & 0xff;
|
||||||
@ -1321,7 +1209,7 @@ void QVncServer::convertPixels(char *dst, const char *src, int count) const
|
|||||||
(b << pixelFormat.blueShift);
|
(b << pixelFormat.blueShift);
|
||||||
|
|
||||||
if (sameEndian || pixelFormat.bitsPerPixel == 8) {
|
if (sameEndian || pixelFormat.bitsPerPixel == 8) {
|
||||||
memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead?
|
memcpy(dst, &pixel, bytesPerPixel);
|
||||||
dst += bytesPerPixel;
|
dst += bytesPerPixel;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -1385,6 +1273,7 @@ void QVncServer::checkUpdate()
|
|||||||
encoder->write();
|
encoder->write();
|
||||||
wantUpdate = false;
|
wantUpdate = false;
|
||||||
}
|
}
|
||||||
|
// ### re-enable map support
|
||||||
// if (dirtyMap()->numDirty > 0) {
|
// if (dirtyMap()->numDirty > 0) {
|
||||||
// if (encoder)
|
// if (encoder)
|
||||||
// encoder->write();
|
// encoder->write();
|
||||||
@ -1402,9 +1291,8 @@ void QVncServer::discardClient()
|
|||||||
delete qvnc_cursor;
|
delete qvnc_cursor;
|
||||||
qvnc_cursor = 0;
|
qvnc_cursor = 0;
|
||||||
#endif
|
#endif
|
||||||
// ###
|
|
||||||
// if (!qvnc_screen->screen() && !qvnc_screen->noDisablePainting && QWSServer::instance())
|
qvnc_screen->setPowerState(QPlatformScreen::PowerStateOff);
|
||||||
// QWSServer::instance()->enablePainting(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline QImage QVncServer::screenImage() const
|
inline QImage QVncServer::screenImage() const
|
||||||
|
@ -60,9 +60,8 @@ class QVncScreen;
|
|||||||
class QVncServer;
|
class QVncServer;
|
||||||
class QVncClientCursor;
|
class QVncClientCursor;
|
||||||
|
|
||||||
|
// This fits with the VNC hextile messages
|
||||||
#define MAP_TILE_SIZE 16
|
#define MAP_TILE_SIZE 16
|
||||||
#define MAP_WIDTH 1280 / MAP_TILE_SIZE
|
|
||||||
#define MAP_HEIGHT 1024 / MAP_TILE_SIZE
|
|
||||||
|
|
||||||
class QVncDirtyMap
|
class QVncDirtyMap
|
||||||
{
|
{
|
||||||
|
@ -70,41 +70,15 @@ bool QVncScreen::initialize()
|
|||||||
mCursor = new QFbCursor(this);
|
mCursor = new QFbCursor(this);
|
||||||
|
|
||||||
switch (depth()) {
|
switch (depth()) {
|
||||||
#if 1//def QT_QWS_DEPTH_32
|
|
||||||
case 32:
|
case 32:
|
||||||
dirty = new QVncDirtyMapOptimized<quint32>(this);
|
dirty = new QVncDirtyMapOptimized<quint32>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
//#if 1//def QT_QWS_DEPTH_24
|
|
||||||
// case 24:
|
|
||||||
// dirty = new QVncDirtyMapOptimized<qrgb888>(this);
|
|
||||||
// break;
|
|
||||||
//#endif
|
|
||||||
//#if 1//def QT_QWS_DEPTH_24
|
|
||||||
// case 18:
|
|
||||||
// dirty = new QVncDirtyMapOptimized<qrgb666>(this);
|
|
||||||
// break;
|
|
||||||
//#endif
|
|
||||||
#if 1//def QT_QWS_DEPTH_24
|
|
||||||
case 16:
|
case 16:
|
||||||
dirty = new QVncDirtyMapOptimized<quint16>(this);
|
dirty = new QVncDirtyMapOptimized<quint16>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
//#if 1//def QT_QWS_DEPTH_24
|
|
||||||
// case 15:
|
|
||||||
// dirty = new QVncDirtyMapOptimized<qrgb555>(this);
|
|
||||||
// break;
|
|
||||||
//#endif
|
|
||||||
//#if 1//def QT_QWS_DEPTH_24
|
|
||||||
// case 12:
|
|
||||||
// dirty = new QVncDirtyMapOptimized<qrgb444>(this);
|
|
||||||
// break;
|
|
||||||
//#endif
|
|
||||||
#if 1//def QT_QWS_DEPTH_24
|
|
||||||
case 8:
|
case 8:
|
||||||
dirty = new QVncDirtyMapOptimized<quint8>(this);
|
dirty = new QVncDirtyMapOptimized<quint8>(this);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
default:
|
default:
|
||||||
qWarning("QVNCScreen::initDevice: No support for screen depth %d",
|
qWarning("QVNCScreen::initDevice: No support for screen depth %d",
|
||||||
depth());
|
depth());
|
||||||
@ -112,17 +86,7 @@ bool QVncScreen::initialize()
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPowerState(PowerStateOff);
|
||||||
// const bool ok = QProxyScreen::initDevice();
|
|
||||||
//#ifndef QT_NO_QWS_CURSOR
|
|
||||||
// qt_screencursor = new QVNCCursor(this);
|
|
||||||
//#endif
|
|
||||||
// if (QProxyScreen::screen())
|
|
||||||
// return ok;
|
|
||||||
|
|
||||||
// // Disable painting if there is only 1 display and nothing is attached to the VNC server
|
|
||||||
// if (!d_ptr->noDisablePainting)
|
|
||||||
// QWSServer::instance()->enablePainting(false);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -136,10 +100,6 @@ QRegion QVncScreen::doRedraw()
|
|||||||
return touched;
|
return touched;
|
||||||
dirtyRegion += touched;
|
dirtyRegion += touched;
|
||||||
|
|
||||||
QVector<QRect> rects = touched.rects();
|
|
||||||
for (int i = 0; i < rects.size(); i++) {
|
|
||||||
// ### send to client
|
|
||||||
}
|
|
||||||
vncServer->setDirty();
|
vncServer->setDirty();
|
||||||
return touched;
|
return touched;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user