author | ibotty <ibotty> | 2002-10-14 11:44:23 (UTC) |
---|---|---|
committer | ibotty <ibotty> | 2002-10-14 11:44:23 (UTC) |
commit | 767d7347ce002e7633278d66758e17d49f40b0f0 (patch) (side-by-side diff) | |
tree | d6611d0151cd4c42e51fc98c8e8c87a93788e128 | |
parent | 0bccef01b70fec98e744fab286f5ea443287cdad (diff) | |
download | opie-767d7347ce002e7633278d66758e17d49f40b0f0.zip opie-767d7347ce002e7633278d66758e17d49f40b0f0.tar.gz opie-767d7347ce002e7633278d66758e17d49f40b0f0.tar.bz2 |
widget should now update properly
-rw-r--r-- | noncore/apps/opie-console/emulation_widget.cpp | 46 | ||||
-rw-r--r-- | noncore/apps/opie-console/emulation_widget.h | 2 |
2 files changed, 48 insertions, 0 deletions
diff --git a/noncore/apps/opie-console/emulation_widget.cpp b/noncore/apps/opie-console/emulation_widget.cpp index 40199fa..5a02fac 100644 --- a/noncore/apps/opie-console/emulation_widget.cpp +++ b/noncore/apps/opie-console/emulation_widget.cpp @@ -154,32 +154,78 @@ void EmulationWidget::setImage( QArray<Character> const newimg, int lines, int c } drawFrame( &paint ); paint.end(); setUpdatesEnabled( true ); /*if ( hasBlinker && !blinkT->isActive() ) blinkT->start(1000); //ms if ( ! hasBlinker && blinkT->isActive() ) { blinkT->stop(); blinking = false; }*/ delete [] disstrU; } + +void EmulationWidget::paintEvent( QPaintEvent* pe ) +{ + QPainter painter; + const QPixmap* pm = backgroundPixmap(); + + painter.begin( this ); + painter.setBackgroundMode( TransparentMode ); + + QRect rect = pe->rect().intersect( contentsRect() ); + QPoint tL = contentsRect().topLeft(); + int tLx = tL.x(); + int tLy = tL.y(); + + int lux = QMIN(m_columns-1, QMAX(0,(rect.left() - tLx - m_blX ) / f_width)); + int luy = QMIN(m_lines-1, QMAX(0,(rect.top() - tLy - m_bY ) / f_height)); + int rlx = QMIN(m_columns-1, QMAX(0,(rect.right() - tLx - m_blX ) / f_width)); + int rly = QMIN(m_lines-1, QMAX(0,(rect.bottom() - tLy - m_bY ) / f_height)); + + QChar *disstrU = new QChar[m_columns]; + for (int y = luy; y <= rly; y++) + for (int x = lux; x <= rlx; x++) + { + int len = 1; + disstrU[0] = vt100extended(m_image[loc(x,y)].c); + int cf = m_image[loc(x,y)].f; + int cb = m_image[loc(x,y)].b; + int cr = m_image[loc(x,y)].r; + while (x+len <= rlx && + m_image[loc(x+len,y)].f == cf && + m_image[loc(x+len,y)].b == cb && + m_image[loc(x+len,y)].r == cr ) + { + disstrU[len] = vt100extended(m_image[loc(x+len,y)].c); + len += 1; + } + QString unistr(disstrU,len); + + drawAttrString( unistr, painter, QRect( m_blX+tLx+f_width*x,m_bY+tLy+f_height*y,f_width*len,f_height ), m_image[loc(x ,y )], pm != NULL, false ); + x +=len -1; + } + delete [] disstrU; + drawFrame( &painter ); + painter.end(); +} + void EmulationWidget::calcGeometry() { m_scrollbar->resize(QApplication::style().scrollBarExtent().width(), contentsRect().height() ); switch( scrollLoc ) { case SCRNONE : m_columns = ( contentsRect().width() -2 * rimX ) / f_width; m_blX = ( contentsRect().width() - ( m_columns*f_width ) ) / 2; m_brX = m_blX; m_scrollbar->hide(); break; case SCRLEFT : m_columns = ( contentsRect().width() - 2 * rimX - m_scrollbar->width() ) / f_width; m_brX = ( contentsRect().width() - ( m_columns*f_width ) - m_scrollbar->width() ) / 2; m_blX = m_brX + m_scrollbar->width(); diff --git a/noncore/apps/opie-console/emulation_widget.h b/noncore/apps/opie-console/emulation_widget.h index 5e20dc4..d050681 100644 --- a/noncore/apps/opie-console/emulation_widget.h +++ b/noncore/apps/opie-console/emulation_widget.h @@ -57,32 +57,34 @@ public: /** * scrolls (not yet implemented) * @param int value, scroll by this value */ virtual void scroll( int value ); virtual QSize calcSize( int cols, int lins ) const; protected: /** * calculates current image bounds */ virtual void calcGeometry(); + void paintEvent( QPaintEvent* event ); + /** * @param const ColorEntry* table, the new color table */ void setColorTable( const ColorEntry table[] ); /** * draws a String * @param QString& string, string to be drawn * @param QPainter& painter, painter, that should draw * @param QRect rect, rect to be drawn into * @param Character attr, attributes of Characters * @param bool usePixmap, if to use the background pixmap (currently not supported) * @param bool clear, if rect should be cleared */ void drawAttrString( QString& string, QPainter& painter, QRect rect, Character attr, bool pm, bool clear ); |