From 0e6c71d263a989af607a6c714341b7f34aa02631 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Sat, 25 Apr 2009 15:52:04 +0000 Subject: [PATCH] 2009-04-25 08:46 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) * harbour/contrib/gtqtc/gtqtc.cpp * harbour/contrib/gtqtc/gtqtc.h + Implemented Box Characters independant of fonts and OS. At this moment only B_SINGLE. This feature relies on the DispBox()* functions which sets the attributes in GT. Final goal should be recognizing Box characters from the char itself, but it may be trivival to handle as Harbour must be heading for UNICODE. Przemek, your attention to this fact is requested. * harbour/contrib/gtqtc/tests/wvtext.prg ! Tweaked for inkey( 0.1 ). No more GPFs now. Play freely. --- harbour/ChangeLog | 15 ++ harbour/contrib/gtqtc/gtqtc.cpp | 357 ++++++++++++++----------- harbour/contrib/gtqtc/gtqtc.h | 26 +- harbour/contrib/gtqtc/tests/wvtext.prg | 6 +- 4 files changed, 244 insertions(+), 160 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 0e1602d425..735d19a7ac 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,21 @@ 2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org) */ +2009-04-25 08:46 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com) + * harbour/contrib/gtqtc/gtqtc.cpp + * harbour/contrib/gtqtc/gtqtc.h + + Implemented Box Characters independant of fonts and OS. + At this moment only B_SINGLE. + This feature relies on the DispBox()* functions which + sets the attributes in GT. Final goal should be recognizing + Box characters from the char itself, but it may be trivival to + handle as Harbour must be heading for UNICODE. + + Przemek, your attention to this fact is requested. + + * harbour/contrib/gtqtc/tests/wvtext.prg + ! Tweaked for inkey( 0.1 ). No more GPFs now. Play freely. + 2009-04-25 10:51 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * ChangeLog + Added "inspired by" text for hb_retc*_buffer() functions' diff --git a/harbour/contrib/gtqtc/gtqtc.cpp b/harbour/contrib/gtqtc/gtqtc.cpp index 740896d4a6..62d19fbd97 100644 --- a/harbour/contrib/gtqtc/gtqtc.cpp +++ b/harbour/contrib/gtqtc/gtqtc.cpp @@ -80,36 +80,22 @@ static HB_CRITICAL_NEW( s_wvtMtx ); static PHB_GTWVT s_wvtWindows[ WVT_MAX_WINDOWS ]; static int s_wvtCount = 0; -void hb_ToOutDebug( const char * sTraceMsg, ... ); - /*----------------------------------------------------------------------*/ -#if 0 /* I M P O R T A N T */ - /* */ -static PHB_GTWVT hb_gt_wvt_Find( MainWindow qWnd ) +#if 1 +static void DebugIt( char* text, int iVal, int iVal2 ) { - int iCount = s_wvtCount, iPos = 0; - PHB_GTWVT pWVT = NULL; + char buf[ 100 ]; + wsprintf( buf, text, iVal, iVal2 ); + OutputDebugString( buf ); - HB_WVT_LOCK - - while( iCount && iPos < WVT_MAX_WINDOWS ) - { - if( s_wvtWindows[ iPos ] ) - { - if( s_wvtWindows[ iPos ]->qWnd == qWnd ) - { - pWVT = s_wvtWindows[ iPos ]; - break; - } - --iCount; - } - ++iPos; - } - HB_WVT_UNLOCK - - return pWVT; +#if 0 + HB_SYMBOL_UNUSED( text ); + HB_SYMBOL_UNUSED( iVal ); + HB_SYMBOL_UNUSED( iVal2 ); +#endif } #endif +/*----------------------------------------------------------------------*/ static BOOL hb_gt_wvt_Alloc( PHB_GTWVT pWVT ) { @@ -141,23 +127,16 @@ static BOOL hb_gt_wvt_Alloc( PHB_GTWVT pWVT ) static void hb_gt_wvt_Free( PHB_GTWVT pWVT ) { - HB_WVT_LOCK - s_wvtWindows[ pWVT->iHandle ] = NULL; if( pWVT->qWnd->_drawingArea->_basicTimer->isActive() ) pWVT->qWnd->_drawingArea->_basicTimer->stop(); -#if 1 + if( pWVT->qEventLoop ) { pWVT->qEventLoop->exit(); pWVT->qEventLoop = NULL; } -#endif -#if 0 - if( pWVT->qFont ) - pWVT->qFont->~QFont(); -#endif if( pWVT->pszSelectCopy ) hb_xfree( pWVT->pszSelectCopy ); @@ -166,14 +145,7 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT ) { app->quit(); } - else - { - s_wvtWindows[ 0 ]->qWnd->setFocus(); - } - hb_xfree( pWVT ); -//OutputDebugString( "2" ); - HB_WVT_UNLOCK } static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, int iCmdShow ) @@ -234,9 +206,17 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT, int iCmdShow ) pWVT->bAlreadySizing = FALSE; #ifndef HB_CDP_SUPPORT_OFF - pWVT->hostCDP = hb_vmCDP(); - pWVT->inCDP = hb_vmCDP(); - pWVT->boxCDP = hb_cdpFind( "EN" ); + pWVT->hostCDP = hb_vmCDP(); +#if defined( UNICODE ) + pWVT->inCDP = hb_vmCDP(); + pWVT->boxCDP = hb_cdpFind( "EN" ); +#else + { + int i; + for( i = 0; i < 256; ++i ) + pWVT->chrTransTbl[ i ] = pWVT->keyTransTbl[ i ] = ( BYTE ) i; + } +#endif #endif return pWVT; @@ -272,24 +252,6 @@ static int hb_gt_wvt_FireEvent( PHB_GTWVT pWVT, int nEvent ) return nResult; } -/* - * use the standard fixed oem font, unless the caller has requested set size fonts - */ -static QFont* hb_gt_wvt_GetFont( const char * pszFace, int iHeight, int iWidth, int iWeight, int iQuality, int iCodePage ) -{ - QFont *qFont = new QFont( pszFace, iHeight, iWeight, FALSE ); - - if( qFont ) - { - qFont->setFixedPitch( TRUE ); - } - HB_SYMBOL_UNUSED( iWidth ); - HB_SYMBOL_UNUSED( iQuality ); - HB_SYMBOL_UNUSED( iCodePage ); - - return qFont; -} - #if 0 /* I M P O R T A N T */ static QPoint hb_gt_wvt_QGetXYFromColRow( PHB_GTWVT pWVT, int col, int row ) { @@ -315,7 +277,7 @@ static void hb_gt_wvt_QUpdateCaret( PHB_GTWVT pWVT ) int iRow, iCol, iStyle, iCaretSize; /* Restore previous cell value */ - pWVT->qWnd->_drawingArea->displayCell( pWVT->qWnd->_drawingArea->_crtLastCol, pWVT->qWnd->_drawingArea->_crtLastRow ); + pWVT->qWnd->_drawingArea->displayCell( pWVT->qWnd->_drawingArea->_crtLastRow, pWVT->qWnd->_drawingArea->_crtLastCol ); HB_GTSELF_GETSCRCURSOR( pWVT->pGT, &iRow, &iCol, &iStyle ); @@ -404,7 +366,7 @@ static void hb_gt_wvt_AddCharToInputQueue( PHB_GTWVT pWVT, int iKey ) static BOOL hb_gt_wvt_GetCharFromInputQueue( PHB_GTWVT pWVT, int * iKey ) { - if( pWVT->keyPointerOut != pWVT->keyPointerIn ) + if( pWVT && pWVT->keyPointerOut != pWVT->keyPointerIn ) { *iKey = pWVT->Keys[ pWVT->keyPointerOut ]; if( ++pWVT->keyPointerOut >= WVT_CHAR_QUEUE_SIZE ) @@ -470,16 +432,6 @@ static int hb_gt_wvt_key_ansi_to_oem( int c ) // CharToOemBuffA( ( LPCSTR ) pszAnsi, ( LPSTR ) pszOem, 1 ); return * pszOem; } - -static void hb_gt_wvt_FitRows( PHB_GTWVT pWVT ) -{ - HB_SYMBOL_UNUSED( pWVT ); -} - -static void hb_gt_wvt_FitSize( PHB_GTWVT pWVT ) -{ - HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS ); -} #endif static void hb_gt_wvt_QResetWindowSize( PHB_GTWVT pWVT ) @@ -613,6 +565,7 @@ static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wPara } #endif +#if 0 static bool hb_gt_wvt_QValidWindowSize( int rows, int cols, QFont *qFont, int iWidth ) { //QDesktopWidget *desk = new QDesktopWidget(); @@ -626,6 +579,7 @@ static bool hb_gt_wvt_QValidWindowSize( int rows, int cols, QFont *qFont, int iW return TRUE; } +#endif static void hb_gt_wvt_QCenterWindow( PHB_GTWVT pWVT ) { @@ -738,7 +692,9 @@ static void hb_gt_wvt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil /* Transferred back to its original position from REFRESH method */ /* Actually this is the way it must be issued */ + //HB_WVT_LOCK hb_gt_wvt_CreateConsoleWindow( pWVT ); + //HB_WVT_UNLOCK } /* ********************************************************************** */ @@ -754,11 +710,8 @@ static void hb_gt_wvt_Exit( PHB_GT pGT ) if( pWVT ) { -//OutputDebugString( "1" ); hb_gt_wvt_Free( pWVT ); -//OutputDebugString( "111" ); } -// HB_GTSUPER_EXIT( pGT ); } /* ********************************************************************** */ @@ -801,6 +754,8 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT ) { if( !pWVT->fInit ) { + //HB_WVT_LOCK + pWVT->fInit = TRUE; if( pWVT->CenterWindow ) { @@ -809,7 +764,8 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT ) pWVT->qWnd->show(); pWVT->qWnd->update(); pWVT->qWnd->_drawingArea->setFocus(); - //pWVT->qWnd->_drawingArea->show() + + //HB_WVT_UNLOCK } hb_gt_wvt_QUpdateCaret( pWVT ); } @@ -873,7 +829,6 @@ static int hb_gt_wvt_ReadKey( PHB_GT pGT, int iEventMask ) pWVT = HB_GTWVT_GET( pGT ); if( pWVT ) { - qApp->processEvents(); if( pWVT->qEventLoop ) /* Is the window already open */ { pWVT->qEventLoop->processEvents(); @@ -904,6 +859,8 @@ static BOOL hb_gt_wvt_SetDispCP( PHB_GT pGT, const char * pszTermCDP, const char HB_GTSUPER_SETDISPCP( pGT, pszTermCDP, pszHostCDP, fBox ); #ifndef HB_CDP_SUPPORT_OFF + +#if defined( UNICODE ) /* * We are displaying text in U16 so pszTermCDP is unimportant. * We only have to know what is the internal application codepage @@ -918,6 +875,38 @@ static BOOL hb_gt_wvt_SetDispCP( PHB_GT pGT, const char * pszTermCDP, const char if( cdpHost ) HB_GTWVT_GET( pGT )->hostCDP = cdpHost; } + +#else + if( !pszHostCDP ) + pszHostCDP = hb_cdpID(); + if( !pszTermCDP ) + pszTermCDP = pszHostCDP; + + if( pszTermCDP && pszHostCDP ) + { + PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); + PHB_CODEPAGE cdpTerm = hb_cdpFind( pszTermCDP ), + cdpHost = hb_cdpFind( pszHostCDP ); + int i; + + for( i = 0; i < 256; ++i ) + pWVT->chrTransTbl[ i ] = ( BYTE ) i; + + if( cdpTerm && cdpHost && cdpTerm != cdpHost && + cdpTerm->nChars && cdpTerm->nChars == cdpHost->nChars ) + { + for( i = 0; i < cdpHost->nChars; ++i ) + { + pWVT->chrTransTbl[ ( BYTE ) cdpHost->CharsUpper[ i ] ] = + ( BYTE ) cdpTerm->CharsUpper[ i ]; + pWVT->chrTransTbl[ ( BYTE ) cdpHost->CharsLower[ i ] ] = + ( BYTE ) cdpTerm->CharsLower[ i ]; + } + } + } + +#endif + #endif return TRUE; @@ -1136,23 +1125,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) iVal = hb_itemGetNI( pInfo->pNewVal ); if( iVal != pWVT->CodePage ) { - if( !pWVT->qWnd ) - { - pWVT->CodePage = iVal; - } - else - { - QFont *qFont = hb_gt_wvt_GetFont( pWVT->fontFace, pWVT->fontHeight, pWVT->fontWidth, - pWVT->fontWeight, pWVT->fontQuality, iVal ); - if( qFont ) - { - if( pWVT->qFont ) - pWVT->qFont->~QFont(); - - pWVT->qFont = qFont; - pWVT->CodePage = iVal; - } - } + pWVT->CodePage = iVal; } } break; @@ -1538,11 +1511,93 @@ void DrawingArea::resetWindowSize(void) setFont( _qFont ); setFocus(Qt::OtherFocusReason); update(); +} + +void DrawingArea::drawBoxCharacter( QPainter *painter, USHORT usChar, BYTE bColor, int x, int y ) +{ + painter->save(); #if 0 - wsprintf( buf, "%i %i %i %i", pWVT->fontWidth, pWVT->fontHeight, _fontWidth, _fontHeight); - OutputDebugString( buf ); +/* Single-line */ +#define B_SINGLE ( Chr( 218 ) + Chr( 196 ) + Chr( 191 ) + Chr( 179 ) + ; + Chr( 217 ) + Chr( 196 ) + Chr( 192 ) + Chr( 179 ) ) +/* Double-line */ +#define B_DOUBLE ( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + ; + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 ) ) +/* Single-line top, double-line sides */ +#define B_SINGLE_DOUBLE ( Chr( 214 ) + Chr( 196 ) + Chr( 183 ) + Chr( 186 ) + ; + Chr( 189 ) + Chr( 196 ) + Chr( 211 ) + Chr( 186 ) ) +/* Double-line top, single-line sides */ +#define B_DOUBLE_SINGLE ( Chr( 213 ) + Chr( 205 ) + Chr( 184 ) + Chr( 179 ) + ; + Chr( 190 ) + Chr( 205 ) + Chr( 212 ) + Chr( 179 ) ) +#define B_THIN ( Chr( 219 ) + Chr( 223 ) + Chr( 219 ) + Chr( 219 ) + ; + Chr( 219 ) + Chr( 220 ) + Chr( 219 ) + Chr( 219 ) ) +#define B_FAT ( Chr( 219 ) + Chr( 219 ) + Chr( 219 ) + Chr( 219 ) + ; + Chr( 219 ) + Chr( 219 ) + Chr( 219 ) + Chr( 219 ) ) #endif + + /* Common to all drawing operations except characters */ + int iMidY = y + _fontHeight/2; + int iMidX = x + _fontWidth/2; + int iEndY = y + _fontHeight; + int iEndX = x + _fontWidth; + + /* painter->setPen( QPen( QBrush( _COLORS[ bColor & 0x0F ] ),1 ) ); */ + painter->setPen( QPen( _COLORS[ bColor & 0x0F ] ) ); + painter->setBackground( QBrush( _COLORS[ bColor >> 4 ] ) ); + painter->fillRect( x, y, _fontWidth, _fontHeight, QBrush( _COLORS[ bColor >> 4 ] ) ); + + switch( usChar ) + { + /* B_SINGLE */ + /* --------------------------------------------------------------- */ + case 179: /* | */ + painter->drawLine( iMidX, y, iMidX, iEndY ); /* Vertical */ + break; + case 191: /* top right */ + painter->drawLine( x, iMidY, iMidX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, iMidY, iMidX, iEndY ); /* Vertical */ + break; + case 217: /* bottom right */ + painter->drawLine( x, iMidY, iMidX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, y, iMidX, iMidY ); /* Vertical */ + break; + case 218: /* top left */ + painter->drawLine( iMidX, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, iMidY, iMidX, iEndY ); /* Vertical */ + break; + case 192: /* bottom left */ + painter->drawLine( iMidX, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, iMidY, iMidX, y ); /* Vertical */ + break; + case 196: /* -- */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + break; + case 193: /* bottom mid up */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, y, iMidX, iMidY ); /* Vertical */ + break; + case 194: /* top mid down */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, iMidY, iMidX, iEndY ); /* Vertical */ + break; + case 195: /* middle left */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, iMidY, iEndX, iMidY ); /* Vertical */ + break; + case 180: /* middle right */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( x, iMidY, iMidX, iMidY ); /* Vertical */ + break; + case 197: /* middle cross */ + painter->drawLine( x, iMidY, iEndX, iMidY ); /* Horozontal */ + painter->drawLine( iMidX, y, iMidX, iEndY ); /* Vertical */ + break; + default: + painter->drawText( QPoint( x,y+_fontAscent ), QString( usChar ) ); + break; + } + painter->restore(); } void DrawingArea::redrawBuffer( const QRect & rect ) @@ -1555,7 +1610,7 @@ void DrawingArea::redrawBuffer( const QRect & rect ) USHORT usChar; int iCol, iRow, len, iTop, startCol; - BYTE bColor, bAttr, bOldColor = 0; + BYTE bColor, bAttr, bOldColor = 0, bOldAttr = 0; char text[ WVT_MAX_COLS ]; QRect rcRect = hb_gt_wvt_QGetColRowFromXYRect( pWVT, rect ); @@ -1571,18 +1626,34 @@ void DrawingArea::redrawBuffer( const QRect & rect ) if( !HB_GTSELF_GETSCRCHAR( pGT, iRow, iCol, &bColor, &bAttr, &usChar ) ) break; - //usChar = hb_cdpGetU16( bAttr & HB_GT_ATTR_BOX ? pWVT->boxCDP : pWVT->hostCDP, TRUE, ( BYTE ) usChar ); + usChar = pWVT->chrTransTbl[ usChar & 0xFF ]; + if( bAttr & HB_GT_ATTR_BOX ) + { + drawBoxCharacter( &painter, usChar, bColor, iCol*_fontWidth, iRow*_fontHeight ); + } + if( len == 0 ) { + bOldAttr = bAttr; bOldColor = bColor; } - else if( bColor != bOldColor ) + else if( bColor != bOldColor || bAttr != bOldAttr ) { text[ len ] = '\0'; - painter.setPen( QPen( _COLORS[ bOldColor & 0x0F ] ) ); - painter.setBackground( QBrush( _COLORS[ bOldColor >> 4 ] ) ); - painter.drawText( QPoint( startCol*_fontWidth, iTop ), QString( text ) ); + #if 1 + if( bOldAttr & HB_GT_ATTR_BOX ) + { + + } + else + #endif + { + painter.setPen( QPen( _COLORS[ bOldColor & 0x0F ] ) ); + painter.setBackground( QBrush( _COLORS[ bOldColor >> 4 ] ) ); + painter.drawText( QPoint( startCol*_fontWidth, iTop ), QString( text ) ); + } bOldColor = bColor; + bOldAttr = bAttr; startCol = iCol; len = 0; } @@ -1592,9 +1663,18 @@ void DrawingArea::redrawBuffer( const QRect & rect ) if( len > 0 ) { text[ len ] = '\0'; - painter.setPen( QPen( _COLORS[ bOldColor & 0x0F ] ) ); - painter.setBackground( QBrush( _COLORS[ bOldColor >> 4 ] ) ); - painter.drawText( QPoint( startCol*_fontWidth, iTop ), QString( text ) ); + #if 1 + if( bOldAttr & HB_GT_ATTR_BOX ) + { + + } + else + #endif + { + painter.setPen( QPen( _COLORS[ bOldColor & 0x0F ] ) ); + painter.setBackground( QBrush( _COLORS[ bOldColor >> 4 ] ) ); + painter.drawText( QPoint( startCol*_fontWidth, iTop ), QString( text ) ); + } } } } @@ -1636,7 +1716,7 @@ void DrawingArea::setCaretPos(int iCol, int iRow) _crtLastCol = iCol; _crtLastRow = iRow; } -void DrawingArea::displayCell( int iCol, int iRow ) +void DrawingArea::displayCell( int iRow, int iCol ) { QPainter painter(_image); painter.setBackgroundMode(Qt::OpaqueMode); @@ -1652,15 +1732,15 @@ void DrawingArea::displayCell( int iCol, int iRow ) painter.setBackground( QBrush( _COLORS[ bColor >> 4 ] ) ); painter.drawText( QPoint( iCol*_fontWidth, ( iRow*_fontHeight ) + _fontAscent ), QString( usChar ) ); } - //update( QRect( iCol*_fontWidth, iRow*_fontHeight, _fontWidth, _fontHeight ) ); + /* We need immediate painting */ repaint( QRect( iCol*_fontWidth, iRow*_fontHeight, _fontWidth, _fontHeight ) ); } -void DrawingArea::displayBlock( int iCol, int iRow ) +void DrawingArea::displayBlock( int iRow, int iCol ) { QPainter painter(_image); painter.fillRect( QRect( iCol*_fontWidth, iRow*_fontHeight+(_fontHeight-_crtHeight), _fontWidth, _crtHeight ), qRgb( 255,255,255 ) ); - //update( QRect( iCol*_fontWidth, iRow*_fontHeight, _fontWidth, _fontHeight ) ); + /* We need immediate painting */ repaint( QRect( iCol*_fontWidth, iRow*_fontHeight, _fontWidth, _fontHeight ) ); } void DrawingArea::timerEvent(QTimerEvent *event) @@ -1670,12 +1750,12 @@ void DrawingArea::timerEvent(QTimerEvent *event) if( _bBlinking ) { _bBlinking = FALSE; - displayCell( _crtLastCol, _crtLastRow ); + displayCell( _crtLastRow, _crtLastCol ); } else { _bBlinking = TRUE; - displayBlock( _crtLastCol, _crtLastRow ); + displayBlock( _crtLastRow, _crtLastCol ); } } else @@ -1684,6 +1764,21 @@ void DrawingArea::timerEvent(QTimerEvent *event) } } +void DrawingArea::resizeImage(const QSize &newSize) +{ + if (_image->size() == newSize) + return; + + QImage *newImage = new QImage( newSize, QImage::Format_RGB32 ); + newImage->fill( qRgb( 255, 255, 255 ) ); + QPainter painter( newImage ); + painter.drawImage( QPoint(0,0), *_image ); + /* Cleanup Memory */ + delete _image; + /* Assign new image */ + _image = newImage; +} + void DrawingArea::resizeEvent(QResizeEvent *event) { PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); @@ -1775,21 +1870,6 @@ void DrawingArea::focusOutEvent(QFocusEvent *event) QWidget::focusOutEvent(event); } -void DrawingArea::resizeImage(const QSize &newSize) -{ - if (_image->size() == newSize) - return; - - QImage *newImage = new QImage( newSize, QImage::Format_RGB32 ); - newImage->fill( qRgb( 255, 255, 255 ) ); - QPainter painter( newImage ); - painter.drawImage( QPoint(0,0), *_image ); - /* Cleanup Memory */ - delete _image; - /* Assign new image */ - _image = newImage; -} - void DrawingArea::keyReleaseEvent(QKeyEvent *event) { HB_SYMBOL_UNUSED( event ); @@ -1895,14 +1975,6 @@ void DrawingArea::mousePressEvent(QMouseEvent *event) PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); int c = 0; -#ifdef __QTCDEBUG__ -wsprintf( buf,"ROWS = %i",pWVT->ROWS ); -OutputDebugString( buf ); -#endif - - pWVT->qWnd->_drawingArea->setFocus( Qt::MouseFocusReason ); - - show(); if( _bSizing ) { _bSizing = FALSE; @@ -1972,18 +2044,10 @@ void DrawingArea::mouseReleaseEvent(QMouseEvent *event) bool DrawingArea::event(QEvent *event) { -if( ( event->type() == QEvent::KeyPress ) ) -{ -#ifdef __QTCDEBUG__ - PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); - wsprintf( buf, "event of pWvt->rows=%i", pWVT->ROWS ); - OutputDebugString( buf ); -#endif -} if( _bSizing && ( event->type() == QEvent::Enter || event->type() == QEvent::Leave ) ) { - PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); _bSizing = FALSE; + PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); pWVT->qWnd->setWindowSize(); } return( QWidget::event( event ) ); @@ -2066,11 +2130,6 @@ void DrawingArea::keyPressEvent(QKeyEvent *event) Qt::KeyboardModifiers kbm = event->modifiers(); PHB_GTWVT pWVT = HB_GTWVT_GET( pGT ); -#ifdef __QTCDEBUG__ -wsprintf( buf, "keyPressEvent pWVT->ROWS = %i", pWVT->ROWS ); -OutputDebugString( buf ); -#endif - switch( event->key() ) { case Qt::Key_Escape : diff --git a/harbour/contrib/gtqtc/gtqtc.h b/harbour/contrib/gtqtc/gtqtc.h index 596658272d..e5bffbb920 100644 --- a/harbour/contrib/gtqtc/gtqtc.h +++ b/harbour/contrib/gtqtc/gtqtc.h @@ -82,11 +82,11 @@ #include "hbvm.h" #include "hbthread.h" -#define WVT_CHAR_QUEUE_SIZE 128 -#define WVT_MAX_TITLE_SIZE 128 -#define WVT_MAX_ROWS 256 -#define WVT_MAX_COLS 256 -#define WVT_MAX_WINDOWS 256 +#define WVT_CHAR_QUEUE_SIZE 4096 // 128 +#define WVT_MAX_TITLE_SIZE 128 +#define WVT_MAX_ROWS 256 +#define WVT_MAX_COLS 256 +#define WVT_MAX_WINDOWS 256 #if defined( HB_OS_WIN_CE ) # define WVT_DEFAULT_ROWS 15 # define WVT_DEFAULT_COLS 50 @@ -199,9 +199,10 @@ public: void setCaretPos(int iRow, int iCol); void destroyCaret(); - void displayCell(int iCol, int iRow); - void displayBlock(int iCol, int iRow); + void displayCell(int iRow, int iCol); + void displayBlock(int iRow, int iCol); void resizeImage(const QSize &newSize); + void drawBoxCharacter(QPainter *painter, USHORT usChar, BYTE bColor, int x, int y); QRgb _COLORS[ 16 ]; @@ -223,8 +224,6 @@ public: QBasicTimer *_basicTimer; - char buf[ 80 ]; - protected: void keyPressEvent(QKeyEvent *event); void keyReleaseEvent(QKeyEvent *event); @@ -331,6 +330,15 @@ typedef struct bool bResizing; bool bAlreadySizing; +#if defined( UNICODE ) + PHB_CODEPAGE boxCDP; /* CodePage for legacy drawing chars: IBM437 */ +#endif + +#if !defined( UNICODE ) + BYTE keyTransTbl[ 256 ]; + BYTE chrTransTbl[ 256 ]; +#endif + } HB_GTWVT, * PHB_GTWVT; diff --git a/harbour/contrib/gtqtc/tests/wvtext.prg b/harbour/contrib/gtqtc/tests/wvtext.prg index 1c39cde4a4..29a2aebcf5 100644 --- a/harbour/contrib/gtqtc/tests/wvtext.prg +++ b/harbour/contrib/gtqtc/tests/wvtext.prg @@ -40,13 +40,14 @@ FUNCTION Main() Hb_GtInfo( HB_GTI_ICONFILE, "../../../contrib/hbqt/tests/test.ico" ) SetCursor( 0 ) SetColor( "n/w" ) + Hb_GtInfo( HB_GTI_CODEPAGE, 255 ) HB_GtInfo( HB_GTI_NOTIFIERBLOCK, {|nEvent, ...| MyNotifier( nEvent, ... ) } ) DispScreen() DO WHILE .T. - nKey := Inkey() + nKey := Inkey( 0.1 ) if nKey == K_ESC exit endif @@ -202,7 +203,8 @@ PROCEDURE thFunc() if ( nBrowser % 2 ) != 0 Hb_GtInfo( HB_GTI_RESIZEMODE, HB_GTI_RESIZEMODE_ROWS ) endif - Hb_GtInfo( HB_GTI_WINTITLE, 'test.dbf ['+if( ( nBrowser % 2 ) != 0, 'RESIZABLE_BY_ROWS', 'RESIZABLE_BY_FONT' )+']' ) + Hb_GtInfo( HB_GTI_WINTITLE, 'Test.dbf ['+if( ( nBrowser % 2 ) != 0, 'RESIZABLE_BY_ROWS', 'RESIZABLE_BY_FONT' )+']' ) + Hb_GtInfo( HB_GTI_ICONFILE, "test.ico" ) SetColor( aColor[ nColorIndex ] ) CLS