From a6e805095c9118916d1dcb3b3fd3fb6f92bad1c3 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Sat, 7 Jun 2008 07:44:51 +0000 Subject: [PATCH] 2008-06-07 09:39 UTC+0100 Viktor Szakats (harbour.01 syenar hu) * source/rtl/gtwvt/gtwvt.c ! Fixed cursor width to be synced properly after a font change. ! Fixed cursor SC_NORMAL height to be calculated from the font height, instead of being a static number. [RC1_TOMERGE] * contrib/hbcurl/hbcurl.c + Added RTEs when wrong parameter was passed to the remaining functions: CURL_EASY_STRERROR() CURL_SHARE_STRERROR() CURL_MULTI_STRERROR() CURL_GETDATE() --- harbour/ChangeLog | 16 +++ harbour/contrib/hbcurl/hbcurl.c | 21 ++- harbour/source/rtl/gtwvt/gtwvt.c | 211 ++++++++++++++++--------------- 3 files changed, 140 insertions(+), 108 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 6312253df6..513ef1c806 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,22 @@ 2008-12-31 13:59 UTC+0100 Foo Bar */ +2008-06-07 09:39 UTC+0100 Viktor Szakats (harbour.01 syenar hu) + * source/rtl/gtwvt/gtwvt.c + ! Fixed cursor width to be synced properly after + a font change. + ! Fixed cursor SC_NORMAL height to be calculated + from the font height, instead of being a static + number. [RC1_TOMERGE] + + * contrib/hbcurl/hbcurl.c + + Added RTEs when wrong parameter was passed + to the remaining functions: + CURL_EASY_STRERROR() + CURL_SHARE_STRERROR() + CURL_MULTI_STRERROR() + CURL_GETDATE() + 2008-06-06 23:30 UTC+0800 Pritpal Bedi (pritpal@vouchcac.com * harbour/source/rtl/gtwvt/gtwvt.c ! hb_gt_wvt_Info() diff --git a/harbour/contrib/hbcurl/hbcurl.c b/harbour/contrib/hbcurl/hbcurl.c index 1eb463aa5d..69ef099a89 100644 --- a/harbour/contrib/hbcurl/hbcurl.c +++ b/harbour/contrib/hbcurl/hbcurl.c @@ -1673,23 +1673,36 @@ HB_FUNC( CURL_VERSION_INFO ) HB_FUNC( CURL_EASY_STRERROR ) { - hb_retc( curl_easy_strerror( ( CURLcode ) hb_parnl( 1 ) ) ); + if( ISNUM( 1 ) ) + hb_retc( curl_easy_strerror( ( CURLcode ) hb_parnl( 1 ) ) ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_EASY_STRERROR", HB_ERR_ARGS_BASEPARAMS ); } HB_FUNC( CURL_SHARE_STRERROR ) { - hb_retc( curl_share_strerror( ( CURLSHcode ) hb_parnl( 1 ) ) ); + if( ISNUM( 1 ) ) + hb_retc( curl_share_strerror( ( CURLSHcode ) hb_parnl( 1 ) ) ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_SHARE_STRERROR", HB_ERR_ARGS_BASEPARAMS ); } HB_FUNC( CURL_MULTI_STRERROR ) { - hb_retc( curl_multi_strerror( ( CURLMcode ) hb_parnl( 1 ) ) ); + if( ISNUM( 1 ) ) + hb_retc( curl_multi_strerror( ( CURLMcode ) hb_parnl( 1 ) ) ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_MULTI_STRERROR", HB_ERR_ARGS_BASEPARAMS ); } #endif /* NOTE: This returns the number of seconds since January 1st 1970 in the UTC time zone. */ +/* TODO: Add support for second curl_getdate() parameter: 'time_t * now' */ HB_FUNC( CURL_GETDATE ) { - hb_retnint( ( HB_LONG ) curl_getdate( hb_parcx( 1 ), NULL ) ); + if( ISCHAR( 1 ) ) + hb_retnint( ( HB_LONG ) curl_getdate( hb_parcx( 1 ), NULL ) ); + else + hb_errRT_BASE( EG_ARG, 2010, NULL, "CURL_GETDATE", HB_ERR_ARGS_BASEPARAMS ); } diff --git a/harbour/source/rtl/gtwvt/gtwvt.c b/harbour/source/rtl/gtwvt/gtwvt.c index e2fec0433c..e5b31aee31 100644 --- a/harbour/source/rtl/gtwvt/gtwvt.c +++ b/harbour/source/rtl/gtwvt/gtwvt.c @@ -193,17 +193,6 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT ) pWVT->COLORS[14] = YELLOW; pWVT->COLORS[15] = BRIGHT_WHITE; - pWVT->CaretExist = FALSE; - pWVT->CaretHidden = FALSE; - pWVT->CaretSize = 4; - pWVT->MousePos.x = 0; - pWVT->MousePos.y = 0; - pWVT->MouseMove = TRUE; - pWVT->hWnd = NULL; - pWVT->keyPointerIn = 0; - pWVT->keyPointerOut = 0; - pWVT->keyLast = 0; - /* THEESE are the default font parameters, if not changed by user */ pWVT->PTEXTSIZE.x = WVT_DEFAULT_FONT_WIDTH; pWVT->PTEXTSIZE.y = WVT_DEFAULT_FONT_HEIGHT; @@ -213,6 +202,17 @@ static PHB_GTWVT hb_gt_wvt_New( PHB_GT pGT ) pWVT->fontQuality = DEFAULT_QUALITY; hb_strncpy( pWVT->fontFace, WVT_DEFAULT_FONT_NAME, sizeof( pWVT->fontFace ) - 1 ); + pWVT->CaretExist = FALSE; + pWVT->CaretHidden = FALSE; + pWVT->CaretSize = max( ( pWVT->PTEXTSIZE.y >> 2 ) - 1, 1 ); + pWVT->MousePos.x = 0; + pWVT->MousePos.y = 0; + pWVT->MouseMove = TRUE; + pWVT->hWnd = NULL; + pWVT->keyPointerIn = 0; + pWVT->keyPointerOut = 0; + pWVT->keyLast = 0; + pWVT->CentreWindow = TRUE; /* Default is to always display window in centre of screen */ pWVT->CodePage = OEM_CHARSET; /* GetACP(); - set code page to default system */ @@ -520,6 +520,94 @@ static HFONT hb_gt_wvt_GetFont( char * pszFace, int iHeight, int iWidth, int iWe return hFont; } +static POINT hb_gt_wvt_GetXYFromColRow( PHB_GTWVT pWVT, USHORT col, USHORT row ) +{ + POINT xy; + + xy.x = col * pWVT->PTEXTSIZE.x; + xy.y = row * pWVT->PTEXTSIZE.y; + + return xy; +} + +static RECT hb_gt_wvt_GetXYFromColRowRect( PHB_GTWVT pWVT, RECT colrow ) +{ + RECT xy; + + xy.left = colrow.left * pWVT->PTEXTSIZE.x; + xy.top = colrow.top * pWVT->PTEXTSIZE.y; + xy.right = ( colrow.right + 1 ) * pWVT->PTEXTSIZE.x; + xy.bottom = ( colrow.bottom + 1 ) * pWVT->PTEXTSIZE.y; + + return xy; +} + +static void hb_gt_wvt_UpdateCaret( PHB_GTWVT pWVT ) +{ + int iRow, iCol, iStyle, iCaretSize; + + HB_GTSELF_GETSCRCURSOR( pWVT->pGT, &iRow, &iCol, &iStyle ); + + if( iRow < 0 || iCol < 0 || iRow >= pWVT->ROWS || iCol >= pWVT->COLS ) + { + iCaretSize = 0; + } + else switch( iStyle ) + { + case SC_INSERT: + iCaretSize = pWVT->PTEXTSIZE.y >> 1; + break; + case SC_SPECIAL1: + iCaretSize = pWVT->PTEXTSIZE.y; + break; + case SC_SPECIAL2: + iCaretSize = - ( pWVT->PTEXTSIZE.y >> 1 ); + break; + case SC_NORMAL: + iCaretSize = max( ( pWVT->PTEXTSIZE.y >> 2 ) - 1, 1 ); + break; + default: + iCaretSize = 0; + break; + } + + if( iCaretSize == 0 ) + { + if( pWVT->CaretExist && !pWVT->CaretHidden ) + { + HideCaret( pWVT->hWnd ); + pWVT->CaretHidden = TRUE; + } + } + else + { + if( iCaretSize != pWVT->CaretSize || !pWVT->CaretExist ) + { + pWVT->CaretSize = iCaretSize; + pWVT->CaretExist = CreateCaret( pWVT->hWnd, ( HBITMAP ) NULL, pWVT->PTEXTSIZE.x, + pWVT->CaretSize < 0 ? - pWVT->CaretSize : pWVT->CaretSize ); + } + if( pWVT->CaretExist ) + { + POINT xy; + xy = hb_gt_wvt_GetXYFromColRow( pWVT, ( SHORT ) iCol, ( SHORT ) iRow ); + SetCaretPos( xy.x, pWVT->CaretSize < 0 ? + xy.y : xy.y + pWVT->PTEXTSIZE.y - pWVT->CaretSize ); + ShowCaret( pWVT->hWnd ); + pWVT->CaretHidden = FALSE; + } + } +} + +static void hb_gt_wvt_KillCaret( PHB_GTWVT pWVT ) +{ + if( pWVT->CaretExist ) + { + DestroyCaret(); + pWVT->CaretExist = FALSE; + } +} + static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT ) { HDC hdc; @@ -579,6 +667,9 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT ) width += ( USHORT ) ( wi.right - wi.left - ci.right ); height += ( USHORT ) ( wi.bottom - wi.top - ci.bottom ); + hb_gt_wvt_KillCaret( pWVT ); + hb_gt_wvt_UpdateCaret( pWVT ); + /* * Centre the window within the CLIENT area on the screen * but only if pWVT->CentreWindow == TRUE @@ -654,28 +745,6 @@ static RECT hb_gt_wvt_GetColRowFromXYRect( PHB_GTWVT pWVT, RECT xy ) return colrow; } -static POINT hb_gt_wvt_GetXYFromColRow( PHB_GTWVT pWVT, USHORT col, USHORT row ) -{ - POINT xy; - - xy.x = col * pWVT->PTEXTSIZE.x; - xy.y = row * pWVT->PTEXTSIZE.y; - - return xy; -} - -static RECT hb_gt_wvt_GetXYFromColRowRect( PHB_GTWVT pWVT, RECT colrow ) -{ - RECT xy; - - xy.left = colrow.left * pWVT->PTEXTSIZE.x; - xy.top = colrow.top * pWVT->PTEXTSIZE.y; - xy.right = ( colrow.right + 1 ) * pWVT->PTEXTSIZE.x; - xy.bottom = ( colrow.bottom + 1 ) * pWVT->PTEXTSIZE.y; - - return xy; -} - /* * functions for handling the input queues for the mouse and keyboard */ @@ -1247,72 +1316,6 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect ) EndPaint( pWVT->hWnd, &ps ); } -static void hb_gt_wvt_UpdateCaret( PHB_GTWVT pWVT ) -{ - int iRow, iCol, iStyle, iCaretSize; - - HB_GTSELF_GETSCRCURSOR( pWVT->pGT, &iRow, &iCol, &iStyle ); - - if( iRow < 0 || iCol < 0 || iRow >= pWVT->ROWS || iCol >= pWVT->COLS ) - { - iCaretSize = 0; - } - else switch( iStyle ) - { - case SC_INSERT: - iCaretSize = pWVT->PTEXTSIZE.y >> 1; - break; - case SC_SPECIAL1: - iCaretSize = pWVT->PTEXTSIZE.y; - break; - case SC_SPECIAL2: - iCaretSize = - ( pWVT->PTEXTSIZE.y >> 1 ); - break; - case SC_NORMAL: - iCaretSize = 4; - break; - default: - iCaretSize = 0; - break; - } - - if( iCaretSize == 0 ) - { - if( pWVT->CaretExist && !pWVT->CaretHidden ) - { - HideCaret( pWVT->hWnd ); - pWVT->CaretHidden = TRUE; - } - } - else - { - if( iCaretSize != pWVT->CaretSize || !pWVT->CaretExist ) - { - pWVT->CaretSize = iCaretSize; - pWVT->CaretExist = CreateCaret( pWVT->hWnd, ( HBITMAP ) NULL, pWVT->PTEXTSIZE.x, - pWVT->CaretSize < 0 ? - pWVT->CaretSize : pWVT->CaretSize ); - } - if( pWVT->CaretExist ) - { - POINT xy; - xy = hb_gt_wvt_GetXYFromColRow( pWVT, ( SHORT ) iCol, ( SHORT ) iRow ); - SetCaretPos( xy.x, pWVT->CaretSize < 0 ? - xy.y : xy.y + pWVT->PTEXTSIZE.y - pWVT->CaretSize ); - ShowCaret( pWVT->hWnd ); - pWVT->CaretHidden = FALSE; - } - } -} - -static void hb_gt_wvt_KillCaret( PHB_GTWVT pWVT ) -{ - if( pWVT->CaretExist ) - { - DestroyCaret(); - pWVT->CaretExist = FALSE; - } -} - static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd ); @@ -1563,13 +1566,13 @@ static void hb_gt_wvt_Init( PHB_GT pGT, FHANDLE hFilenoStdin, FHANDLE hFilenoStd if( ! hb_winmainArgGet( &s_hInstance, &s_hPrevInstance, &s_iCmdShow ) ) { - hb_errInternal( 10001, "It's not a window GUI program.", "", "" ); + hb_errInternal( 10001, "It's not a window GUI program.", NULL, NULL ); } pWVT = hb_gt_wvt_New( pGT ); if( !pWVT ) { - hb_errInternal( 10001, "Cannot allocate new window", "", "" ); + hb_errInternal( 10001, "Cannot allocate new window", NULL, NULL ); } HB_GTLOCAL( pGT ) = ( void * ) pWVT; @@ -1580,7 +1583,7 @@ static void hb_gt_wvt_Init( PHB_GT pGT, FHANDLE hFilenoStdin, FHANDLE hFilenoStd if( !pWVT->hWnd ) { /* hb_errRT_TERM( EG_CREATE, 10001, "WINAPI CreateWindow() failed", "hb_gt_wvt_Init()", 0, 0 ); */ - hb_errInternal( 10001, "WINAPI CreateWindow() failed", "", "" ); + hb_errInternal( 10001, "WINAPI CreateWindow() failed", NULL, NULL ); } hb_gt_wvt_InitWindow( pWVT, WVT_DEFAULT_ROWS, WVT_DEFAULT_COLS ); @@ -1984,7 +1987,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) if( hb_gt_wvt_GetWindowTitle( pWVT->hWnd, &szTitle ) ) pInfo->pResult = hb_itemPutCPtr( pInfo->pResult, szTitle, strlen( szTitle ) ); else - pInfo->pResult = hb_itemPutC( pInfo->pResult, "" ); + pInfo->pResult = hb_itemPutC( pInfo->pResult, NULL ); if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) hb_gt_wvt_SetWindowTitle( pWVT->hWnd, hb_itemGetCPtr( pInfo->pNewVal ) ); break; @@ -2077,7 +2080,7 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo ) } else { - pInfo->pResult = hb_itemPutC( pInfo->pResult, "" ); + pInfo->pResult = hb_itemPutC( pInfo->pResult, NULL ); } } break;