author | treke <treke> | 2002-09-05 04:42:25 (UTC) |
---|---|---|
committer | treke <treke> | 2002-09-05 04:42:25 (UTC) |
commit | e2186a49cb5cbdf01b56f57818a15a760ff25b2e (patch) (side-by-side diff) | |
tree | f22e7342c7a3adcccb6eed52a314fe8e301cc624 /noncore | |
parent | fd3239820e471044bf279a2964702573572859d6 (diff) | |
download | opie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.zip opie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.tar.gz opie-e2186a49cb5cbdf01b56f57818a15a760ff25b2e.tar.bz2 |
Added support for client side scaling of the screen. Slow, but sometimes usable.
-rw-r--r-- | noncore/comm/keypebble/krfbbuffer.cpp | 11 | ||||
-rw-r--r-- | noncore/comm/keypebble/krfbcanvas.cpp | 5 | ||||
-rw-r--r-- | noncore/comm/keypebble/krfbdecoder.cpp | 7 | ||||
-rw-r--r-- | noncore/comm/keypebble/krfbdecoder.h | 5 | ||||
-rw-r--r-- | noncore/comm/keypebble/krfbserver.cpp | 2 | ||||
-rw-r--r-- | noncore/comm/keypebble/krfbserver.h | 1 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvnc.cpp | 8 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvnc.h | 3 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvncbookmarkdlg.cpp | 3 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvncconndlg.cpp | 21 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvncconndlg.h | 1 | ||||
-rw-r--r-- | noncore/comm/keypebble/kvncconndlgbase.ui | 180 |
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 @@ -6,6 +6,8 @@ #include <qapplication.h> #include "krfbdecoder.h" #include "krfbbuffer.h" +#include "krfbconnection.h" +#include "krfbserver.h" #include "krfbserverinfo.h" // @@ -86,6 +88,7 @@ void KRFBBuffer::drawRawRectChunk( void *data, { 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 ); @@ -97,6 +100,7 @@ void KRFBBuffer::drawRawRectChunk( void *data, uint r,g,b; + for ( int j = 0; j < h; j++ ) { for ( int i = 0; i < w ; i++ ) { r = d[ j * w + i ]; @@ -187,8 +191,13 @@ void KRFBBuffer::drawRawRectChunk( void *data, 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 @@ -22,7 +22,8 @@ KRFBCanvas::KRFBCanvas( QWidget *parent, const char *name ) this, SLOT( loggedIn() ) ); loggedIn_ = false; - QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold); + + //QPEApplication::setStylusOperation(viewport(), QPEApplication::RightOnHold); viewport()->setFocusPolicy( QWidget::StrongFocus ); viewport()->setFocus(); @@ -104,6 +105,8 @@ 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(), 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 @@ -195,7 +195,7 @@ void KRFBDecoder::gotServerInit() 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" ); @@ -642,8 +642,9 @@ void KRFBDecoder::sendMouseEvent( QMouseEvent *e ) } } - 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 ); 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 @@ -98,6 +98,9 @@ signals: void error( const QString & ); void status( const QString & ); +protected: + /** The connection to the server. */ + KRFBConnection *con; private: State currentState; @@ -118,8 +121,6 @@ private: /** 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; 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 @@ -9,6 +9,8 @@ KRFBServer::KRFBServer() QString password; display=0; + scaleFactor=1; + hexTile=0; corre=0; rre=0; 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 @@ -29,6 +29,7 @@ public: 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 @@ -72,6 +72,7 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name ) 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 &)), @@ -92,7 +93,10 @@ KVNC::KVNC( const char *name ) : QMainWindow( 0, name ) 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 ); @@ -235,6 +239,7 @@ void KVNC::connected() disconnectAction->setEnabled( true ); fullScreenAction->setEnabled( true ); stack->raiseWidget(canvas); + bar->hide(); } void KVNC::loggedIn() @@ -254,6 +259,7 @@ void KVNC::disconnected() disconnectAction->setEnabled( false ); fullScreenAction->setEnabled( false ); stack->raiseWidget(bookmarkSelector); + bar->show(); } void KVNC::statusMessage( const QString &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 @@ -4,7 +4,7 @@ #define KVNC_H #include <qmainwindow.h> -#include <qurl.h> +#include <qtoolbar.h> #include <qwidgetstack.h> #include "kvncbookmarkdlg.h" @@ -57,6 +57,7 @@ private: QAction *disconnectAction; QAction *ctlAltDelAction;; QAction *connectAction; + QToolBar * bar; KVNCBookmarkDlg * bookmarkSelector; QWidgetStack * stack; 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 @@ -161,6 +161,8 @@ void KVNCBookmarkDlg::readBookmarks(void) server->deIconify=val.toInt(); else if (key=="updaterate") server->updateRate=val.toInt(); + else if (key=="scalefactor") + server->scaleFactor=val.toInt(); } if (server){ @@ -200,6 +202,7 @@ void KVNCBookmarkDlg::writeBookmarks(void) t << "\treadonly=" << server->readOnly << '\n'; t << "\tdeiconify=" << server->deIconify << '\n'; t << "\tupdaterate=" << server->updateRate << '\n'; + t << "\tscalefactor=" << server->scaleFactor << '\n'; } f.close(); 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,6 +1,7 @@ #include <qframe.h> #include <qvbox.h> #include <qcheckbox.h> +#include <qcombobox.h> #include <qspinbox.h> #include <qlabel.h> #include <qlayout.h> @@ -29,6 +30,12 @@ KVNCConnDlg::KVNCConnDlg( KRFBServer *options, 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 ); @@ -40,9 +47,12 @@ KVNCConnDlg::KVNCConnDlg( KRFBServer *options, shared->setChecked( options->shared ); timeBox->setValue( options->updateRate ); + serverPassword->setEchoMode(QLineEdit::Password); + + connect(togglePassword, SIGNAL( stateChanged(int) ), this, SLOT( showPassword(int) ) ); -} +} KVNCConnDlg::~KVNCConnDlg() { } @@ -66,6 +76,7 @@ void KVNCConnDlg::save() tmpOptions.password = serverPassword->text(); tmpOptions.display = serverDisplay->value(); tmpOptions.name = serverBookmark->text(); + tmpOptions.scaleFactor = scaleFactor->currentText().toInt(); if (!serverBookmark->text().isEmpty()) { if ( options) { @@ -73,3 +84,11 @@ void KVNCConnDlg::save() } } } + +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 @@ -20,6 +20,7 @@ class KVNCConnDlg : public KVNCConnDlgBase void accept(); private slots: void save(); + void showPassword(int); private: KRFBServer tmpOptions; 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 @@ -11,8 +11,8 @@ <rect> <x>0</x> <y>0</y> - <width>984</width> - <height>676</height> + <width>260</width> + <height>242</height> </rect> </property> <property stdset="1"> @@ -22,21 +22,21 @@ <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"> @@ -56,56 +56,59 @@ <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" > @@ -115,33 +118,45 @@ <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" > @@ -165,23 +180,6 @@ </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> @@ -290,6 +288,59 @@ <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> @@ -412,7 +463,6 @@ </vbox> </widget> </widget> - </vbox> </widget> <tabstops> <tabstop>TabWidget3</tabstop> |