-rw-r--r-- | noncore/apps/opie-console/widget_layer.cpp | 24 | ||||
-rw-r--r-- | noncore/apps/opie-console/widget_layer.h | 27 |
2 files changed, 35 insertions, 16 deletions
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp index 28227e4..f428ed4 100644 --- a/noncore/apps/opie-console/widget_layer.cpp +++ b/noncore/apps/opie-console/widget_layer.cpp @@ -20,10 +20,8 @@ #include "common.h" -#define loc(X,Y) ((Y)*m_columns+(X)) - -WidgetLayer::WidgetLayer( QObject *parent, const char *name ) : QObject( parent, name ) +WidgetLayer::WidgetLayer( QWidget *parent, const char *name ) : QFrame( parent, name ) { // get the clipboard m_clipboard = QApplication::clipboard(); @@ -37,12 +35,17 @@ WidgetLayer::WidgetLayer( QObject *parent, const char *name ) : QObject( parent m_columns = 1; m_resizing = false; - m_image = QArray<Character>(); + // just for demonstrating + //m_image = QArray<Character>( m_lines * m_columns ); + m_image = QArray<Character>( 1 ); + } + WidgetLayer::~WidgetLayer() { - // clean up! + // clean up + delete m_image; } /* --------------------------------- audio ---------------------------------- */ @@ -58,17 +61,15 @@ void WidgetLayer::bell() void WidgetLayer::propagateSize() { - QArray<Character> oldimage = m_image; + QArray<Character> oldimage = m_image.copy(); int oldlines = m_lines; int oldcolumns = m_columns; makeImage(); // copy old image, to reduce flicker - if ( oldimage ) + if ( ! oldimage.isEmpty() ) { - //FIXME: is it possible to do this with QArray.dublicate()? - int lins = QMIN( oldlines, m_lines ); int cols = QMIN( oldcolumns, m_columns ); for ( int lin = 0; lin < lins; ++lin ) @@ -77,11 +78,12 @@ void WidgetLayer::propagateSize() (void*) &oldimage[oldcolumns*lin], cols*sizeof( Character ) ); } - //free( oldimage ); } else clearImage(); + delete oldimage; + m_resizing = true; emit imageSizeChanged( m_lines, m_columns ); m_resizing = false; @@ -90,7 +92,7 @@ void WidgetLayer::propagateSize() void WidgetLayer::makeImage() { calcGeometry(); - m_image = QArray<Character>(); + m_image = QArray<Character>( m_columns * m_lines ); clearImage(); } diff --git a/noncore/apps/opie-console/widget_layer.h b/noncore/apps/opie-console/widget_layer.h index 07ec12a..99d248e 100644 --- a/noncore/apps/opie-console/widget_layer.h +++ b/noncore/apps/opie-console/widget_layer.h @@ -15,6 +15,8 @@ // qt includes #include <qapplication.h> +#include <qframe.h> +#include <qarray.h> #include <qtimer.h> #include <qkeycode.h> #include <qclipboard.h> @@ -24,7 +26,16 @@ #include "session.h" #include "common.h" -class WidgetLayer : public QObject +/* + * given a pseudo location ( column, line ), + * returns the actual index, in the QArray<Character> + */ +#define loc(X,Y) ((Y)*m_columns+(X)) + + + + +class WidgetLayer : public QFrame { Q_OBJECT public: @@ -32,7 +43,7 @@ public: /** * constructor */ - WidgetLayer( QObject *parent=0, const char *name=0 ); + WidgetLayer( QWidget *parent=0, const char *name=0 ); /** * destructor @@ -43,7 +54,7 @@ public: /** * sets the image */ - virtual void setImage( const Character* const newimg, int lines, int colums ) = 0; + virtual void setImage( QArray<Character> const newimg, int lines, int colums ); /** * annoy the user @@ -141,7 +152,7 @@ protected: void propagateSize(); /** - * + *determines count of lines and columns */ virtual void calcGeometry() = 0; @@ -173,6 +184,12 @@ protected: /** * current character image + * + * a Character at loc( column, line ) + * has the actual index: + * ix = line * m_columns + column; + * + * use loc( x, y ) macro to access. */ QArray<Character> m_image; @@ -192,7 +209,7 @@ protected: QClipboard* m_clipboard; /** - * whether widget was resized + * whether widget is resizing */ bool m_resizing; }; |