summaryrefslogtreecommitdiff
path: root/noncore/comm
authortreke <treke>2002-09-05 04:42:25 (UTC)
committer treke <treke>2002-09-05 04:42:25 (UTC)
commite2186a49cb5cbdf01b56f57818a15a760ff25b2e (patch) (side-by-side diff)
treef22e7342c7a3adcccb6eed52a314fe8e301cc624 /noncore/comm
parentfd3239820e471044bf279a2964702573572859d6 (diff)
downloadopie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.zip
opie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.tar.gz
opie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.tar.bz2
Added support for client side scaling of the screen. Slow, but sometimes usable.
Diffstat (limited to 'noncore/comm') (more/less context) (show whitespace changes)
-rw-r--r--noncore/comm/keypebble/krfbbuffer.cpp11
-rw-r--r--noncore/comm/keypebble/krfbcanvas.cpp5
-rw-r--r--noncore/comm/keypebble/krfbdecoder.cpp7
-rw-r--r--noncore/comm/keypebble/krfbdecoder.h5
-rw-r--r--noncore/comm/keypebble/krfbserver.cpp2
-rw-r--r--noncore/comm/keypebble/krfbserver.h1
-rw-r--r--noncore/comm/keypebble/kvnc.cpp8
-rw-r--r--noncore/comm/keypebble/kvnc.h3
-rw-r--r--noncore/comm/keypebble/kvncbookmarkdlg.cpp3
-rw-r--r--noncore/comm/keypebble/kvncconndlg.cpp21
-rw-r--r--noncore/comm/keypebble/kvncconndlg.h1
-rw-r--r--noncore/comm/keypebble/kvncconndlgbase.ui180
12 files changed, 172 insertions, 75 deletions
diff --git a/noncore/comm/keypebble/krfbbuffer.cpp b/noncore/comm/keypebble/krfbbuffer.cpp
index 5a52f31..f1cb929 100644
--- a/noncore/comm/keypebble/krfbbuffer.cpp
+++ b/noncore/comm/keypebble/krfbbuffer.cpp
@@ -3,12 +3,14 @@
#include <qbrush.h>
#include <qimage.h>
#include <qpainter.h>
#include <qapplication.h>
#include "krfbdecoder.h"
#include "krfbbuffer.h"
+#include "krfbconnection.h"
+#include "krfbserver.h"
#include "krfbserverinfo.h"
//
// Endian stuff
//
#ifndef KDE_USE_FINAL
@@ -83,23 +85,25 @@ void KRFBBuffer::copyRect( int srcX, int srcY,
void KRFBBuffer::drawRawRectChunk( void *data,
int x, int y, int w, int h )
{
QImage img( w, h, 32 );
+ int scaleFactor=decoder->con->options()->scaleFactor;
int redMax = Swap16IfLE( decoder->format->redMax );
int greenMax = Swap16IfLE( decoder->format->greenMax );
int blueMax = Swap16IfLE( decoder->format->blueMax );
QPainter p( pix );
if ( decoder->format->bpp == 8 ) {
uchar *d = (unsigned char *) data;
uint r,g,b;
+
for ( int j = 0; j < h; j++ ) {
for ( int i = 0; i < w ; i++ ) {
r = d[ j * w + i ];
r = r >> decoder->format->redShift;
r = r & redMax;
@@ -184,11 +188,16 @@ void KRFBBuffer::drawRawRectChunk( void *data,
}
else {
p.setBrush( QBrush( Qt::black ) );
p.drawRect( x, y, w, h );
}
+ if (scaleFactor > 1) {
+ p.drawImage( x/scaleFactor, y/scaleFactor, img.smoothScale(w/scaleFactor,h/scaleFactor) );
+ emit updated( x/scaleFactor, y/scaleFactor, w/scaleFactor, h/scaleFactor );
+ }
+ else {
p.drawImage( x, y, img );
-
emit updated( x, y, w, h );
}
+}
diff --git a/noncore/comm/keypebble/krfbcanvas.cpp b/noncore/comm/keypebble/krfbcanvas.cpp
index 8b56795..896de7f 100644
--- a/noncore/comm/keypebble/krfbcanvas.cpp
+++ b/noncore/comm/keypebble/krfbcanvas.cpp
@@ -19,13 +19,14 @@ KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name )
{
connection_ = new KRFBConnection();
connect( connection_, SIGNAL( loggedIn() ),
this, SLOT( loggedIn() ) );
loggedIn_ = false;
- QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold);
+
+ //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold);
viewport()->setFocusPolicy( QWidget::StrongFocus );
viewport()->setFocus();
}
KRFBCanvas::~KRFBCanvas()
@@ -101,12 +102,14 @@ void KRFBCanvas::loggedIn()
void KRFBCanvas::viewportPaintEvent( QPaintEvent *e )
{
QRect r = e->rect();
if ( loggedIn_ ) {
+ QPixmap p;
+
bitBlt( viewport(), r.x(), r.y(),
connection_->buffer()->pixmap(),
r.x() + contentsX(), r.y() + contentsY(),
r.width(), r.height() );
}
else {
diff --git a/noncore/comm/keypebble/krfbdecoder.cpp b/noncore/comm/keypebble/krfbdecoder.cpp
index a964c09..94e3b79 100644
--- a/noncore/comm/keypebble/krfbdecoder.cpp
+++ b/noncore/comm/keypebble/krfbdecoder.cpp
@@ -192,13 +192,13 @@ void KRFBDecoder::gotServerInit()
info->bpp, info->depth, info->bigEndian, info->trueColor );
qWarning( "RedMax = %d, GreenMax = %d, BlueMax = %d",
info->redMax, info->greenMax, info->blueMax );
qWarning( "RedShift = %d, GreenShift = %d, BlueShift = %d",
info->redShift, info->greenShift,info-> blueShift );
- buf->resize( info->width, info->height );
+ buf->resize( info->width/con->options()->scaleFactor, info->height /con->options()->scaleFactor);
// Wait for desktop name
qWarning( "Waiting for desktop name" );
static QString statusMsg = tr( "Waiting for desktop name..." );
emit status( statusMsg );
@@ -639,14 +639,15 @@ void KRFBDecoder::sendMouseEvent( QMouseEvent *e )
buttonMask |= 0x03;
if ( e->button() & RightButton )
buttonMask |= 0x05;
}
}
- CARD16 x = Swap16IfLE( e->x() );
- CARD16 y = Swap16IfLE( e->y() );
+ // HACK: Scaling
+ CARD16 x = Swap16IfLE( e->x() * con->options()->scaleFactor );
+ CARD16 y = Swap16IfLE( e->y() * con->options()->scaleFactor );
con->write( &PointerEventId, 1 );
con->write( &buttonMask, 1 );
con->write( &x, 2 );
con->write( &y, 2 );
}
diff --git a/noncore/comm/keypebble/krfbdecoder.h b/noncore/comm/keypebble/krfbdecoder.h
index 4ba0185..db6271d 100644
--- a/noncore/comm/keypebble/krfbdecoder.h
+++ b/noncore/comm/keypebble/krfbdecoder.h
@@ -95,12 +95,15 @@ protected slots:
void gotBell();
signals:
void error( const QString & );
void status( const QString & );
+protected:
+ /** The connection to the server. */
+ KRFBConnection *con;
private:
State currentState;
// Used to store the state we were in before a cut or bell msg
State oldState;
@@ -115,14 +118,12 @@ private:
CARD32 encoding;
CARD32 serverCutTextLen;
/** Where we draw the data (and the source of our events). */
KRFBBuffer *buf;
- /** The connection to the server. */
- KRFBConnection *con;
/** Info about the RFB server. */
KRFBServerInfo *info;
/** The pixel format we want. */
KRFBPixelFormat *format;
diff --git a/noncore/comm/keypebble/krfbserver.cpp b/noncore/comm/keypebble/krfbserver.cpp
index 5775f09..b47534e 100644
--- a/noncore/comm/keypebble/krfbserver.cpp
+++ b/noncore/comm/keypebble/krfbserver.cpp
@@ -6,12 +6,14 @@ KRFBServer::KRFBServer()
{
QString name;
QString hostname;
QString password;
display=0;
+ scaleFactor=1;
+
hexTile=0;
corre=0;
rre=0;
copyrect=1;
colors256=1;
diff --git a/noncore/comm/keypebble/krfbserver.h b/noncore/comm/keypebble/krfbserver.h
index f87eecc..e38e2d2 100644
--- a/noncore/comm/keypebble/krfbserver.h
+++ b/noncore/comm/keypebble/krfbserver.h
@@ -26,9 +26,10 @@ public:
bool colors256;
bool shared;
bool readOnly;
bool deIconify;
int updateRate;
+ int scaleFactor;
};
#endif // KRFBOPTIONS_H
diff --git a/noncore/comm/keypebble/kvnc.cpp b/noncore/comm/keypebble/kvnc.cpp
index aa46e2f..b173004 100644
--- a/noncore/comm/keypebble/kvnc.cpp
+++ b/noncore/comm/keypebble/kvnc.cpp
@@ -69,12 +69,13 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
stack->raiseWidget( bookmarkSelector );
canvas = new KRFBCanvas( stack, "canvas" );
stack->addWidget(canvas,get_unique_id());
setCentralWidget( stack );
+
connect( bookmarkSelector->bookmarkList, SIGNAL(doubleClicked(QListBoxItem *)),
this, SLOT(openConnection(QListBoxItem *)) );
connect( canvas->connection(), SIGNAL(statusChanged(const QString &)),
this, SLOT(statusMessage(const QString &)) );
connect( canvas->connection(), SIGNAL(error(const QString &)),
this, SLOT(error(const QString &)) );
@@ -89,13 +90,16 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name )
connect( cornerButton, SIGNAL(pressed()), this, SLOT(showMenu()) );
canvas->setCornerWidget( cornerButton );
stack->raiseWidget( bookmarkSelector );
- QPEToolBar *bar = new QPEToolBar( this );
+ bar= new QToolBar( this );
+ setToolBarsMovable( false );
+ setRightJustification(false);
+
QAction *n = new QAction( tr( "New Connection" ), Resource::loadPixmap( "new" ),
QString::null, 0, this, 0 );
connect( n, SIGNAL( activated() ),
this, SLOT( newConnection() ) );
n->addTo( bar );
@@ -232,12 +236,13 @@ void KVNC::connected()
static QString msg = tr( "Connected to remote host" );
statusMessage( msg );
ctlAltDelAction->setEnabled(true);
disconnectAction->setEnabled( true );
fullScreenAction->setEnabled( true );
stack->raiseWidget(canvas);
+ bar->hide();
}
void KVNC::loggedIn()
{
static QString msg = tr( "Logged in to remote host" );
statusMessage( msg );
@@ -251,12 +256,13 @@ void KVNC::disconnected()
static QString msg = tr( "Connection closed" );
statusMessage( msg );
ctlAltDelAction->setEnabled(false);
disconnectAction->setEnabled( false );
fullScreenAction->setEnabled( false );
stack->raiseWidget(bookmarkSelector);
+ bar->show();
}
void KVNC::statusMessage( const QString &m )
{
Global::statusMessage( m );
}
diff --git a/noncore/comm/keypebble/kvnc.h b/noncore/comm/keypebble/kvnc.h
index 6e0a385..82a24fc 100644
--- a/noncore/comm/keypebble/kvnc.h
+++ b/noncore/comm/keypebble/kvnc.h
@@ -1,13 +1,13 @@
// -*- c++ -*-
#ifndef KVNC_H
#define KVNC_H
#include <qmainwindow.h>
-#include <qurl.h>
+#include <qtoolbar.h>
#include <qwidgetstack.h>
#include "kvncbookmarkdlg.h"
class QAction;
class KRFBCanvas;
class QPushButton;
@@ -54,12 +54,13 @@ private:
QPushButton *cornerButton;
QAction *fullScreenAction;
QAction *optionsAction;
QAction *disconnectAction;
QAction *ctlAltDelAction;;
QAction *connectAction;
+ QToolBar * bar;
KVNCBookmarkDlg * bookmarkSelector;
QWidgetStack * stack;
KRFBServer * curServer;
};
diff --git a/noncore/comm/keypebble/kvncbookmarkdlg.cpp b/noncore/comm/keypebble/kvncbookmarkdlg.cpp
index 1f97d13..1e2f3c3 100644
--- a/noncore/comm/keypebble/kvncbookmarkdlg.cpp
+++ b/noncore/comm/keypebble/kvncbookmarkdlg.cpp
@@ -158,12 +158,14 @@ void KVNCBookmarkDlg::readBookmarks(void)
else if (key=="readonly")
server->readOnly=val.toInt();
else if (key=="deiconify")
server->deIconify=val.toInt();
else if (key=="updaterate")
server->updateRate=val.toInt();
+ else if (key=="scalefactor")
+ server->scaleFactor=val.toInt();
}
if (server){
servers.append(server);
server=0;
}
@@ -197,12 +199,13 @@ void KVNCBookmarkDlg::writeBookmarks(void)
t << "\trre=" << server->rre << '\n';
t << "\tcopyrect=" << server->copyrect << '\n';
t << "\tshared=" << server->shared << '\n';
t << "\treadonly=" << server->readOnly << '\n';
t << "\tdeiconify=" << server->deIconify << '\n';
t << "\tupdaterate=" << server->updateRate << '\n';
+ t << "\tscalefactor=" << server->scaleFactor << '\n';
}
f.close();
}
}
void KVNCBookmarkDlg::refresh(void)
diff --git a/noncore/comm/keypebble/kvncconndlg.cpp b/noncore/comm/keypebble/kvncconndlg.cpp
index 6873feb..2f073f8 100644
--- a/noncore/comm/keypebble/kvncconndlg.cpp
+++ b/noncore/comm/keypebble/kvncconndlg.cpp
@@ -1,9 +1,10 @@
#include <qframe.h>
#include <qvbox.h>
#include <qcheckbox.h>
+#include <qcombobox.h>
#include <qspinbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qwhatsthis.h>
#include <qapplication.h>
#include <qlineedit.h>
@@ -26,26 +27,35 @@ KVNCConnDlg::KVNCConnDlg( KRFBServer *options,
hex->setChecked( options->hexTile );
corre->setChecked( options->corre );
rre->setChecked( options->rre );
copyRect->setChecked( options->copyrect );
+ for (int i=0; i < scaleFactor->count(); ++i) {
+ if (scaleFactor->text(i).toInt()==tmpOptions.scaleFactor) {
+ scaleFactor->setCurrentItem(i);
+ }
+ }
+
// TODO
hex->setEnabled( false );
corre->setEnabled( false );
rre->setEnabled( false );
// /TODO
deIconify->setChecked( options->deIconify );
bit->setChecked( options->colors256 );
shared->setChecked( options->shared );
timeBox->setValue( options->updateRate );
+ serverPassword->setEchoMode(QLineEdit::Password);
+
+ connect(togglePassword, SIGNAL( stateChanged(int) ), this, SLOT( showPassword(int) ) );
-}
+}
KVNCConnDlg::~KVNCConnDlg()
{
}
void KVNCConnDlg::accept()
{
@@ -63,13 +73,22 @@ void KVNCConnDlg::save()
tmpOptions.colors256 = bit->isChecked();
tmpOptions.shared = shared->isChecked();
tmpOptions.hostname = serverHostname->text();
tmpOptions.password = serverPassword->text();
tmpOptions.display = serverDisplay->value();
tmpOptions.name = serverBookmark->text();
+ tmpOptions.scaleFactor = scaleFactor->currentText().toInt();
if (!serverBookmark->text().isEmpty()) {
if ( options) {
*options=tmpOptions;
}
}
}
+
+void KVNCConnDlg::showPassword(int show)
+{
+ if (show)
+ serverPassword->setEchoMode(QLineEdit::Normal);
+ else
+ serverPassword->setEchoMode(QLineEdit::Password);
+}
diff --git a/noncore/comm/keypebble/kvncconndlg.h b/noncore/comm/keypebble/kvncconndlg.h
index fae7d62..5e84750 100644
--- a/noncore/comm/keypebble/kvncconndlg.h
+++ b/noncore/comm/keypebble/kvncconndlg.h
@@ -17,12 +17,13 @@ class KVNCConnDlg : public KVNCConnDlgBase
~KVNCConnDlg();
protected:
void accept();
private slots:
void save();
+ void showPassword(int);
private:
KRFBServer tmpOptions;
KRFBServer * options;
};
diff --git a/noncore/comm/keypebble/kvncconndlgbase.ui b/noncore/comm/keypebble/kvncconndlgbase.ui
index df0d375..42765c1 100644
--- a/noncore/comm/keypebble/kvncconndlgbase.ui
+++ b/noncore/comm/keypebble/kvncconndlgbase.ui
@@ -8,38 +8,38 @@
</property>
<property stdset="1">
<name>geometry</name>
<rect>
<x>0</x>
<y>0</y>
- <width>984</width>
- <height>676</height>
+ <width>260</width>
+ <height>242</height>
</rect>
</property>
<property stdset="1">
<name>caption</name>
<string>VNC Viewer Connection</string>
</property>
<property>
<name>layoutMargin</name>
</property>
- <vbox>
- <property stdset="1">
- <name>margin</name>
- <number>0</number>
- </property>
- <property stdset="1">
- <name>spacing</name>
- <number>6</number>
- </property>
<widget>
<class>QTabWidget</class>
<property stdset="1">
<name>name</name>
<cstring>TabWidget3</cstring>
</property>
+ <property stdset="1">
+ <name>geometry</name>
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>266</width>
+ <height>233</height>
+ </rect>
+ </property>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
<cstring>tab</cstring>
</property>
@@ -53,98 +53,113 @@
<number>11</number>
</property>
<property stdset="1">
<name>spacing</name>
<number>6</number>
</property>
- <widget row="0" column="0" >
- <class>QLabel</class>
+ <widget row="2" column="1" rowspan="1" colspan="2" >
+ <class>QLineEdit</class>
<property stdset="1">
<name>name</name>
- <cstring>hostname</cstring>
+ <cstring>serverPassword</cstring>
</property>
<property stdset="1">
- <name>text</name>
- <string>Host Name:</string>
+ <name>autoMask</name>
+ <bool>true</bool>
+ </property>
+ <property stdset="1">
+ <name>echoMode</name>
+ <enum>Password</enum>
</property>
</widget>
- <widget row="1" column="0" >
- <class>QLabel</class>
+ <widget row="3" column="1" >
+ <class>QCheckBox</class>
<property stdset="1">
<name>name</name>
- <cstring>TextLabel2_2</cstring>
+ <cstring>togglePassword</cstring>
</property>
<property stdset="1">
<name>text</name>
- <string>Display Number:</string>
+ <string>Show Password</string>
</property>
</widget>
- <widget row="2" column="1" rowspan="1" colspan="2" >
- <class>QLineEdit</class>
+ <widget row="2" column="0" >
+ <class>QLabel</class>
<property stdset="1">
<name>name</name>
- <cstring>serverPassword</cstring>
+ <cstring>TextLabel3</cstring>
</property>
<property stdset="1">
- <name>autoMask</name>
- <bool>true</bool>
+ <name>text</name>
+ <string>Password:</string>
</property>
</widget>
- <widget row="1" column="1" rowspan="1" colspan="2" >
- <class>QSpinBox</class>
+ <widget row="4" column="1" rowspan="1" colspan="2" >
+ <class>QLineEdit</class>
<property stdset="1">
<name>name</name>
- <cstring>serverDisplay</cstring>
- </property>
- <property stdset="1">
- <name>maxValue</name>
- <number>500</number>
+ <cstring>serverBookmark</cstring>
</property>
+ </widget>
+ <widget row="4" column="0" >
+ <class>QLabel</class>
<property stdset="1">
- <name>minValue</name>
- <number>0</number>
+ <name>name</name>
+ <cstring>TextLabel1_2</cstring>
</property>
<property stdset="1">
- <name>value</name>
- <number>0</number>
+ <name>text</name>
+ <string>Bookmark Name:</string>
</property>
</widget>
<widget row="0" column="1" rowspan="1" colspan="2" >
<class>QLineEdit</class>
<property stdset="1">
<name>name</name>
<cstring>serverHostname</cstring>
</property>
</widget>
- <widget row="2" column="0" >
+ <widget row="0" column="0" >
<class>QLabel</class>
<property stdset="1">
<name>name</name>
- <cstring>TextLabel3</cstring>
+ <cstring>hostname</cstring>
</property>
<property stdset="1">
<name>text</name>
- <string>Password:</string>
+ <string>Host Name:</string>
</property>
</widget>
- <widget row="3" column="1" rowspan="1" colspan="2" >
- <class>QLineEdit</class>
+ <widget row="1" column="0" >
+ <class>QLabel</class>
<property stdset="1">
<name>name</name>
- <cstring>serverBookmark</cstring>
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Display Number:</string>
</property>
</widget>
- <widget row="3" column="0" >
- <class>QLabel</class>
+ <widget row="1" column="1" rowspan="1" colspan="2" >
+ <class>QSpinBox</class>
<property stdset="1">
<name>name</name>
- <cstring>TextLabel1_2</cstring>
+ <cstring>serverDisplay</cstring>
</property>
<property stdset="1">
- <name>text</name>
- <string>Bookmark Name:</string>
+ <name>maxValue</name>
+ <number>500</number>
+ </property>
+ <property stdset="1">
+ <name>minValue</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>value</name>
+ <number>0</number>
</property>
</widget>
<spacer row="5" column="2" >
<property>
<name>name</name>
<cstring>Spacer2</cstring>
@@ -162,29 +177,12 @@
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
- <widget row="4" column="1" >
- <class>QLayoutWidget</class>
- <property stdset="1">
- <name>name</name>
- <cstring>Layout3</cstring>
- </property>
- <hbox>
- <property stdset="1">
- <name>margin</name>
- <number>0</number>
- </property>
- <property stdset="1">
- <name>spacing</name>
- <number>6</number>
- </property>
- </hbox>
- </widget>
</grid>
</widget>
<widget>
<class>QWidget</class>
<property stdset="1">
<name>name</name>
@@ -287,12 +285,65 @@
</property>
<property stdset="1">
<name>text</name>
<string>Request shared session</string>
</property>
</widget>
+ <widget>
+ <class>QLayoutWidget</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>Layout3</cstring>
+ </property>
+ <hbox>
+ <property stdset="1">
+ <name>margin</name>
+ <number>0</number>
+ </property>
+ <property stdset="1">
+ <name>spacing</name>
+ <number>6</number>
+ </property>
+ <widget>
+ <class>QComboBox</class>
+ <item>
+ <property>
+ <name>text</name>
+ <string>1</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>2</string>
+ </property>
+ </item>
+ <item>
+ <property>
+ <name>text</name>
+ <string>4</string>
+ </property>
+ </item>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>scaleFactor</cstring>
+ </property>
+ </widget>
+ <widget>
+ <class>QLabel</class>
+ <property stdset="1">
+ <name>name</name>
+ <cstring>TextLabel2_3</cstring>
+ </property>
+ <property stdset="1">
+ <name>text</name>
+ <string>Scale Factor</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
<spacer>
<property>
<name>name</name>
<cstring>Spacer2</cstring>
</property>
<property stdset="1">
@@ -409,13 +460,12 @@
</size>
</property>
</spacer>
</vbox>
</widget>
</widget>
- </vbox>
</widget>
<tabstops>
<tabstop>TabWidget3</tabstop>
<tabstop>serverHostname</tabstop>
<tabstop>serverDisplay</tabstop>
<tabstop>serverPassword</tabstop>