2009-05-04 17:52 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)

* harbour/contrib/gtwvg/gtwvg.h
  * harbour/contrib/gtwvg/hbgtwvg.ch
  * harbour/contrib/gtwvg/gtwvg.c
  * harbour/contrib/gtwvg/wvgcore.c
  * harbour/contrib/gtwvg/wvgcuig.c
  * harbour/contrib/gtwvg/wvgcrt.prg
    ! Fixed many artifacts. Probbaly it is difficult to jot down all.
This commit is contained in:
Pritpal Bedi
2009-05-05 01:18:09 +00:00
parent 2fdebe2b32
commit 43e5b5a07b
7 changed files with 319 additions and 147 deletions

View File

@@ -17,6 +17,15 @@
past entries belonging to these authors: Viktor Szakats.
*/
2009-05-04 17:52 UTC-0800 Pritpal Bedi (pritpal@vouchcac.com)
* harbour/contrib/gtwvg/gtwvg.h
* harbour/contrib/gtwvg/hbgtwvg.ch
* harbour/contrib/gtwvg/gtwvg.c
* harbour/contrib/gtwvg/wvgcore.c
* harbour/contrib/gtwvg/wvgcuig.c
* harbour/contrib/gtwvg/wvgcrt.prg
! Fixed many artifacts. Probbaly it is difficult to jot down all.
2009-05-05 03:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* utils/hbmk2/hbmk2.prg
! Minor fixes to texts.

View File

@@ -222,9 +222,7 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
int iIndex;
HB_WVT_LOCK
s_wvtWindows[ pWVT->iHandle ] = NULL;
if( --s_wvtCount == 0 )
{
hb_wvt_gtReleaseGuiData();
@@ -233,7 +231,6 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
if( pWVT->hInstance )
UnregisterClass( s_szClassName, pWVT->hInstance );
}
HB_WVT_UNLOCK
if( pWVT->pszSelectCopy )
@@ -298,6 +295,8 @@ static void hb_gt_wvt_Free( PHB_GTWVT pWVT )
if( pWVT->gObjs->hBrush )
if( pWVT->gObjs->bDestroyBrush )
DeleteObject( pWVT->gObjs->hBrush );
if( pWVT->gObjs->bBlock )
hb_itemRelease( pWVT->gObjs->bBlock );
#if ! defined( HB_OS_WIN_CE )
if( pWVT->gObjs->iPicture )
if( pWVT->gObjs->bDestroyPicture )
@@ -1043,9 +1042,11 @@ static void hb_gt_wvt_ResetWindowSize( PHB_GTWVT pWVT )
}
}
SetWindowPos( pWVT->hWnd, NULL, wi.left, wi.top, width, height, SWP_NOZORDER );
HB_GTSELF_EXPOSEAREA( pWVT->pGT, 0, 0, pWVT->ROWS, pWVT->COLS );
{
int iAttr = SWP_DRAWFRAME | SWP_NOZORDER | SWP_DEFERERASE;
SetWindowPos( pWVT->hWnd, NULL, wi.left, wi.top, width, height, iAttr );
}
if( pWVT->CaretExist && !pWVT->CaretHidden )
hb_gt_wvt_UpdateCaret( pWVT );
@@ -1874,7 +1875,14 @@ static void hb_gt_wvt_PaintText( PHB_GTWVT pWVT, RECT updateRect )
static LRESULT CALLBACK hb_gt_wvt_WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
#if 1
PHB_GTWVT pWVT = hb_gt_wvt_Find( hWnd );
#else
/*
* The protocl below generates RT error somehwo at some other part of the code
*/
PHB_GTWVT pWVT = ( PHB_GTWVT ) GetWindowLongPtr( hWnd, GWL_USERDATA );
#endif
if( pWVT ) switch( message )
{
@@ -2309,6 +2317,34 @@ static BOOL hb_gt_wvt_ValidWindowSize( HWND hWnd, int rows, int cols, HFONT hFon
return ( width <= maxWidth ) && ( height <= maxHeight );
}
static void hb_gt_wvt_ShowWindow( PHB_GTWVT pWVT )
{
int iCmdShow;
if( pWVT->pPP->bConfigured )
{
iCmdShow = pWVT->pPP->bVisible ? SW_SHOWNORMAL : SW_HIDE;
}
else
{
/*
* If you wish to show window the way you want, put somewhere in your application
* ANNOUNCE HB_NOSTARTUPWINDOW
* If so compiled, then you need to issue Wvt_ShowWindow( SW_RESTORE )
* at the point you desire in your code.
*/
if( hb_dynsymFind( "HB_NOSTARTUPWINDOW" ) != NULL )
{
iCmdShow = SW_HIDE;
}
else
{
iCmdShow = SW_SHOWNORMAL;
}
}
ShowWindow( pWVT->hWnd, iCmdShow );
}
static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT, BOOL bResizable )
{
HWND hWnd, hWndParent;
@@ -2448,13 +2484,17 @@ static HWND hb_gt_wvt_CreateWindow( PHB_GTWVT pWVT, BOOL bResizable )
static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
{
int iCmdShow;
if( !pWVT->hWnd )
{
pWVT->hWnd = hb_gt_wvt_CreateWindow( pWVT, pWVT->bResizable );
if( !pWVT->hWnd )
hb_errInternal( 10001, "Failed to create WVT window", NULL, NULL );
/* An experimental call - processed at WndProc to recognize pWVT off hWnd */
#if 0
SetWindowLongPtr( pWVT->hWnd, GWL_USERDATA, ( LONG_PTR ) pWVT );
#endif
#if 0
if( ! GetSystemMetrics( SM_REMOTESESSION ) )
{
@@ -2515,37 +2555,12 @@ static BOOL hb_gt_wvt_CreateConsoleWindow( PHB_GTWVT pWVT )
}
}
/* Manage Windows Open Mode */
{
if( pWVT->pPP->bConfigured )
{
iCmdShow = pWVT->pPP->bVisible ? SW_SHOWNORMAL : SW_HIDE;
}
else
{
/*
* If you wish to show window the way you want, put somewhere in your application
* ANNOUNCE HB_NOSTARTUPWINDOW
* If so compiled, then you need to issue Wvt_ShowWindow( SW_RESTORE )
* at the point you desire in your code.
*/
if( hb_dynsymFind( "HB_NOSTARTUPWINDOW" ) != NULL )
{
iCmdShow = SW_HIDE;
}
else
{
iCmdShow = SW_SHOWNORMAL;
}
}
ShowWindow( pWVT->hWnd, iCmdShow );
UpdateWindow( pWVT->hWnd );
}
/* Show | Update Window */
hb_gt_wvt_ShowWindow( pWVT );
/* Initialize GUI base */
{
pWVT->hdc = GetDC( pWVT->hWnd );
pWVT->hCompDC = CreateCompatibleDC( pWVT->hdc );
hb_wvt_gtInitGui( pWVT );
if( b_MouseEnable )
@@ -2582,6 +2597,7 @@ static void hb_gt_wvt_Init( PHB_GT pGT, HB_FHANDLE hFilenoStdin, HB_FHANDLE hFil
HB_GTSUPER_INIT( pGT, hFilenoStdin, hFilenoStdout, hFilenoStderr );
HB_GTSELF_RESIZE( pGT, pWVT->ROWS, pWVT->COLS );
HB_GTSELF_SEMICOLD( pGT );
/* hb_gt_wvt_CreateConsoleWindow( pWVT ); */
}
@@ -3039,23 +3055,25 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
{
if( ( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING ) )
{
/* HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL; */
HICON hIconToFree = pWVT->hIcon;
LPTSTR lpImage;
HICON hIcon;
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
pWVT->bIconToFree = TRUE;
pWVT->hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
hIcon = ( HICON ) LoadImage( ( HINSTANCE ) NULL, lpImage,
IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
HB_TCHAR_FREE( lpImage );
if( hIcon )
{
if( pWVT->hIcon )
DestroyIcon( pWVT->hIcon );
pWVT->hIcon = hIcon;
}
if( pWVT->hWnd )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
}
if( hIconToFree )
DestroyIcon( hIconToFree );
}
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon );
break;
@@ -3065,41 +3083,47 @@ static BOOL hb_gt_wvt_Info( PHB_GT pGT, int iType, PHB_GT_INFO pInfo )
{
if( hb_itemType( pInfo->pNewVal ) & HB_IT_STRING )
{
/* HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL; */
HICON hIconToFree = pWVT->hIcon;
LPTSTR lpIcon;
LPTSTR lpImage;
HICON hIcon;
lpIcon = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
pWVT->bIconToFree = FALSE;
pWVT->hIcon = LoadIcon( pWVT->hInstance, lpIcon );
HB_TCHAR_FREE( lpIcon );
lpImage = HB_TCHAR_CONVTO( hb_itemGetCPtr( pInfo->pNewVal ) );
hIcon = LoadIcon( pWVT->hInstance, lpImage );
HB_TCHAR_FREE( lpImage );
if( hIcon )
{
if( pWVT->hIcon )
DestroyIcon( pWVT->hIcon );
pWVT->hIcon = hIcon;
}
if( pWVT->hWnd )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
}
if( hIconToFree )
DestroyIcon( hIconToFree );
}
else if( hb_itemType( pInfo->pNewVal ) & HB_IT_NUMERIC )
{
HICON hIconToFree = ( pWVT->hIcon && pWVT->bIconToFree ) ? pWVT->hIcon : NULL;
pWVT->bIconToFree = FALSE;
pWVT->hIcon = LoadIcon( pWVT->hInstance,
MAKEINTRESOURCE( ( HB_LONG )
hb_itemGetNInt( pInfo->pNewVal ) ) );
if( pWVT->hWnd )
if( hb_itemGetNInt( pInfo->pNewVal ) != 0 )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
}
HICON hIcon = LoadIcon( pWVT->hInstance,
MAKEINTRESOURCE( ( HB_LONG )
hb_itemGetNInt( pInfo->pNewVal ) ) );
if( hIcon )
{
if( pWVT->hIcon )
DestroyIcon( pWVT->hIcon );
if( hIconToFree )
DestroyIcon( hIconToFree );
pWVT->hIcon = hIcon;
}
if( pWVT->hWnd )
{
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_SMALL, ( LPARAM ) pWVT->hIcon ); /* Set Title Bar Icon */
SendNotifyMessage( pWVT->hWnd, WM_SETICON, ICON_BIG , ( LPARAM ) pWVT->hIcon ); /* Set Task List Icon */
}
}
}
pInfo->pResult = hb_itemPutNInt( pInfo->pResult, ( HB_PTRDIFF ) pWVT->hIcon );
break;
@@ -3915,6 +3939,7 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT )
pWVT = HB_GTWVT_GET( pGT );
if( pWVT )
{
#if 1
if( !pWVT->hWnd && pWVT->fInit )
hb_gt_wvt_CreateConsoleWindow( pWVT );
@@ -3923,6 +3948,18 @@ static void hb_gt_wvt_Refresh( PHB_GT pGT )
SendNotifyMessage( pWVT->hWnd, WM_MY_UPDATE_CARET, 0, 0 );
hb_gt_wvt_ProcessMessages( pWVT );
}
#else
if( pWVT->hWnd )
{
if( !pWVT->fInit )
{
pWVT->fInit = TRUE;
hb_gt_wvt_ShowWindow( pWVT );
}
SendNotifyMessage( pWVT->hWnd, WM_MY_UPDATE_CARET, 0, 0 );
hb_gt_wvt_ProcessMessages( pWVT );
}
#endif
}
}
@@ -4317,11 +4354,6 @@ static void hb_wvt_gtExitGui( PHB_GTWVT pWVT )
{
DestroyWindow( pWVT->hWndTT );
}
if( pWVT->hCompDC )
{
DeleteDC( pWVT->hCompDC );
pWVT->hCompDC = NULL;
}
if( pWVT->hGuiDC )
{
DeleteDC( pWVT->hGuiDC );

View File

@@ -79,6 +79,7 @@
#include <ole2.h>
#include <oleauto.h>
#if ! defined( HB_OS_WIN_CE )
#include <ocidl.h>
#include <olectl.h>
#endif
#include <commdlg.h>
@@ -255,24 +256,6 @@ typedef struct
int iRight ;
} HB_GOBJ_OFFSET ;
#define GOBJ_OBJTYPE_BOXRAISED 1
#define GOBJ_OBJTYPE_BOXRECESSED 2
#define GOBJ_OBJTYPE_BOXGET 3
#define GOBJ_OBJTYPE_BOXGROUP 4
#define GOBJ_OBJTYPE_BOXGROUPRAISED 5
#define GOBJ_OBJTYPE_PICTURE 6
#define GOBJ_OBJTYPE_LINE 7
#define GOBJ_OBJTYPE_LINEEX 8
#define GOBJ_OBJTYPE_LABEL 9
#define GOBJ_OBJTYPE_LABELEX 10
#define GOBJ_OBJTYPE_OUTLINE 11
#define GOBJ_OBJTYPE_ELLIPSE 12
#define GOBJ_OBJTYPE_RECTANGLE 13
#define GOBJ_OBJTYPE_ROUNDRECT 14
#define GOBJ_OBJTYPE_COLORRECT 15
#define GOBJ_OBJTYPE_SHADEDRECT 16
#define GOBJ_OBJTYPE_TEXTBOX 17
#define GOBJ_OBJTYPE_OUTLINEEX 18
typedef struct _tag_GOBJS
{
@@ -307,6 +290,7 @@ typedef struct _tag_GOBJS
BOOL bDestroyPicture ;
TRIVERTEX vert[ 2 ] ;
LPTSTR lpText ;
PHB_ITEM bBlock ;
struct _tag_GOBJS * gObjNext ;
} HB_GOBJS, * PHB_GOBJS ;
@@ -438,8 +422,6 @@ typedef struct
int iFactor; /* Transparency factor 0~255 */
HDC hdc; /* Handle to Windows Device Context */
HDC hCompDC; /* Compatible DC to _s.hdc */
HDC hWndDC;
int LastMenuEvent; /* Last menu item selected */
int MenuKeyEvent; /* User definable event number for windows menu command */

View File

@@ -161,6 +161,31 @@
#define GOBJ_IMAGESOURCE_RESOURCE 2
#define GOBJ_IMAGESOURCE_FILE 3
/* CUI-GUI Draw Objects */
#define GOBJ_OBJTYPE_BOXRAISED 1
#define GOBJ_OBJTYPE_BOXRECESSED 2
#define GOBJ_OBJTYPE_BOXGET 3
#define GOBJ_OBJTYPE_BOXGROUP 4
#define GOBJ_OBJTYPE_BOXGROUPRAISED 5
#define GOBJ_OBJTYPE_PICTURE 6
#define GOBJ_OBJTYPE_LINE 7
#define GOBJ_OBJTYPE_LINEEX 8
#define GOBJ_OBJTYPE_LABEL 9
#define GOBJ_OBJTYPE_LABELEX 10
#define GOBJ_OBJTYPE_OUTLINE 11
#define GOBJ_OBJTYPE_ELLIPSE 12
#define GOBJ_OBJTYPE_RECTANGLE 13
#define GOBJ_OBJTYPE_ROUNDRECT 14
#define GOBJ_OBJTYPE_COLORRECT 15
#define GOBJ_OBJTYPE_SHADEDRECT 16
#define GOBJ_OBJTYPE_TEXTBOX 17
#define GOBJ_OBJTYPE_OUTLINEEX 18
#define GOBJ_OBJTYPE_GRIDVERT 19
#define GOBJ_OBJTYPE_GRIDHORZ 20
#define GOBJ_OBJTYPE_OBJECT 25 /* One of the above objects */
/*----------------------------------------------------------------------*/
#endif /* _HBGTWVG_CH */

View File

@@ -3124,17 +3124,12 @@ HB_FUNC( WVT_SAVESCREEN )
hBmp = CreateCompatibleBitmap( _s->hdc, iWidth, iHeight ) ;
#if 0
oldBmp = (HBITMAP) SelectObject( _s->hCompDC, hBmp );
BitBlt( _s->hCompDC, 0, 0, iWidth, iHeight, _s->hdc, iLeft, iTop, SRCCOPY );
SelectObject( _s->hCompDC, oldBmp );
#else
hCompDC = CreateCompatibleDC( _s->hdc );
oldBmp = (HBITMAP) SelectObject( hCompDC, hBmp );
BitBlt( hCompDC, 0, 0, iWidth, iHeight, _s->hdc, iLeft, iTop, SRCCOPY );
SelectObject( hCompDC, oldBmp );
DeleteDC( hCompDC );
#endif
hb_arraySetNI( info, 1, iWidth );
hb_arraySetNI( info, 2, iHeight );
hb_arraySetNInt( info, 3, ( HB_PTRDIFF ) hBmp );
@@ -3169,7 +3164,6 @@ HB_FUNC( WVT_RESTSCREEN )
iWidth = iRight - iLeft + 1 ;
iHeight = iBottom - iTop + 1 ;
#if 1
hCompDC = CreateCompatibleDC( _s->hdc );
hBmp = (HBITMAP) SelectObject( hCompDC, ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
if ( hBmp )
@@ -3200,52 +3194,12 @@ HB_FUNC( WVT_RESTSCREEN )
}
}
DeleteDC( hCompDC );
#else
hBmp = (HBITMAP) SelectObject( _s->hCompDC, ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
if ( hBmp )
{
if ( ( iWidth == hb_parni( 5,1 ) ) && ( iHeight == hb_parni( 5,2 ) ) )
{
if ( BitBlt( _s->hdc,
iLeft,
iTop,
iWidth,
iHeight,
_s->hCompDC,
0,
0,
SRCCOPY ) )
{
bResult = TRUE;
}
}
else
{
if ( StretchBlt( _s->hdc,
iLeft,
iTop,
iWidth,
iHeight,
_s->hCompDC,
0,
0,
hb_parni( 5,1 ),
hb_parni( 5,2 ),
SRCCOPY ) )
{
bResult = TRUE;
}
}
}
#endif
SelectObject( _s->hCompDC, hBmp );
if ( ! bDoNotDestroyBMP )
{
SelectObject( hCompDC, hBmp );
DeleteObject( ( HBITMAP ) ( HB_PTRDIFF ) hb_parnint( 5,3 ) );
}
hb_retl( bResult );
}

View File

@@ -406,11 +406,10 @@ METHOD destroy() CLASS WvgCrt
ENDIF
if ::lModal
::pGT := NIL
hb_gtSelect( ::pGTp )
hb_gtInfo( HB_GTI_ENABLE , ::pGTp )
hb_gtSelect( ::pGTp )
hb_gtInfo( HB_GTI_SETFOCUS, ::pGTp )
endif
ENDIF
::pGT := NIL
::pGTp := NIL

View File

@@ -97,6 +97,7 @@ static PHB_GOBJS hb_wvg_ObjectNew( PHB_GTWVT pWVT )
gObj->iHandle = iHandle;
gObj->iState = GOBJ_OBJSTATE_ENABLED;
gObj->lpText = NULL;
gObj->bBlock = NULL;
hb_retni( iHandle );
@@ -153,6 +154,8 @@ HB_FUNC( WVG_CLEARGUIOBJECTS )
if( pWVT->gObjs->hBrush )
if( pWVT->gObjs->bDestroyBrush )
DeleteObject( pWVT->gObjs->hBrush );
if( pWVT->gObjs->bBlock )
hb_itemRelease( pWVT->gObjs->bBlock );
#if ! defined( HB_OS_WIN_CE )
if( pWVT->gObjs->iPicture )
if( pWVT->gObjs->bDestroyPicture )
@@ -1434,23 +1437,191 @@ static void hb_wvg_RenderPicture( PHB_GTWVT pWVT, PHB_GOBJS gObj, int iLeft, int
#endif
}
/*----------------------------------------------------------------------*/
/*
Wvg_Object( nObj, bBlock )
nObj == one of the objects == GOBJ_OBJTYPE_ROUNDRECT | GOBJ_OBJTYPE_IMAGE | etc
bBlock == Block returning the array conataining as many elements as necessary for the given object
Also it will return those array elements in the same order expected by the object to draw
This protocol is necessary for dyanamic coordinates which might have been changed by the
applications, like TBrowse dimensions.
Wvg_Object( GOBJ_OBJTYPE_BOXRAISED, {|| oBrw:nTop, oBrw:nLeft, oBrw:nBottom, oBrw:nRight, {-2,-2,2,2} } )
*/
HB_FUNC( WVG_OBJECT )
{
PHB_GTWVT pWVT = hb_wvt_gtGetWVT();
HB_GOBJS *gObj = hb_wvg_ObjectNew( pWVT );
gObj->iObjType = GOBJ_OBJTYPE_OBJECT;
gObj->iData = hb_parni( 1 ); /* Object to be executed */
gObj->bBlock = hb_itemNew( hb_param( 2, HB_IT_BLOCK ) );
gObj->gObjNext = pWVT->gObjs;
pWVT->gObjs = gObj;
}
/*----------------------------------------------------------------------*/
/*
* Wvg_Object( GOBJ_OBJTYPE_GRIDVERT, {|| { nTop, nBottom, aCols, nCols, aPxlOff } } )
* aPxlOff[ 1 ] and aPxlOff[ 3 ] used
*/
static void hb_wvg_GridVert( PHB_GTWVT pWVT, PHB_ITEM pArray, RECT *uRect )
{
PHB_ITEM pCols = hb_arrayGetItemPtr( pArray, 3 );
int iTabs = hb_arrayLen( pCols );
if( iTabs > 0 )
{
int x, i, iTop, iBottom;
iTop = ( hb_arrayGetNI( pArray, 1 ) * ( int ) pWVT->PTEXTSIZE.y );
iBottom = ( ( hb_arrayGetNI( pArray, 2 ) + 1 ) * ( int ) pWVT->PTEXTSIZE.y ) - 1;
if( ( iTop >= uRect->top && iTop <= uRect->bottom ) ||
( iBottom >= uRect->top && iBottom <= uRect->bottom ) )
{
HDC hdc = pWVT->hGuiDC;
SelectObject( hdc, pWVT->currentPen );
for ( i = 1; i <= iTabs; i++ )
{
x = ( hb_arrayGetNI( pCols, i ) * pWVT->PTEXTSIZE.x );
MoveToEx( hdc, x, iTop, NULL );
LineTo( hdc, x, iBottom );
}
/* Play it on screen too directly as this area is not going to be revalidated
* we are not to invalidate this region as it is redrawn many many times.
* perhaps we can avoid drawing on the image ???
*/
hdc = pWVT->hdc;
SelectObject( hdc, pWVT->currentPen );
for ( i = 1; i <= iTabs; i++ )
{
x = ( hb_arrayGetNI( pCols, i ) * pWVT->PTEXTSIZE.x );
MoveToEx( hdc, x, iTop, NULL );
LineTo( hdc, x, iBottom );
}
}
}
}
/*----------------------------------------------------------------------*/
static void hb_wvg_GridHorz( PHB_GTWVT pWVT, PHB_ITEM pArray, RECT *uRect )
{
int iAtRow = hb_arrayGetNI( pArray, 1 );
int iRows = hb_arrayGetNI( pArray, 4 );
int i, y, iLeft, iRight, iTop, iBottom;
HDC hdc;
iLeft = ( hb_arrayGetNI( pArray, 2 ) * pWVT->PTEXTSIZE.x );
iRight = ( ( ( hb_arrayGetNI( pArray, 3 ) + 1 ) * pWVT->PTEXTSIZE.x ) - 1 );
iTop = iAtRow * pWVT->PTEXTSIZE.y;
iBottom = ( iAtRow + iRows ) * pWVT->PTEXTSIZE.y; // do not add 1
if( ( uRect->left > iRight ) || ( uRect->top > iBottom ) ||
( uRect->bottom < iTop ) || ( uRect->right < iLeft ) )
{
return;
}
hdc = pWVT->hdc;
SelectObject( hdc, pWVT->currentPen );
for ( i = 0; i < iRows; i++ )
{
y = ( ( iAtRow ) * pWVT->PTEXTSIZE.y );
MoveToEx( hdc, iLeft, y, NULL );
LineTo( hdc, iRight, y );
iAtRow++;
}
hdc = pWVT->hGuiDC;
SelectObject( hdc, pWVT->currentPen );
for ( i = 0; i < iRows; i++ )
{
y = ( ( iAtRow ) * pWVT->PTEXTSIZE.y );
MoveToEx( hdc, iLeft, y, NULL );
LineTo( hdc, iRight, y );
iAtRow++;
}
}
/*----------------------------------------------------------------------*/
/* Owner Draw Implementation */
/*----------------------------------------------------------------------*/
void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
{
PHB_GOBJS gObj = pWVT->gObjs;
int iTop, iLeft, iBottom, iRight;
int iObjType;
while( gObj )
{
iObjType = 0;
if( gObj->iState == GOBJ_OBJSTATE_ENABLED )
{
iTop = ( pWVT->PTEXTSIZE.y * gObj->iTop ) + gObj->aOffset.iTop;
iLeft = ( pWVT->PTEXTSIZE.x * gObj->iLeft ) + gObj->aOffset.iLeft;
iBottom = ( pWVT->PTEXTSIZE.y * ( gObj->iBottom + 1 ) ) - 1 + gObj->aOffset.iBottom;
iRight = ( pWVT->PTEXTSIZE.x * ( gObj->iRight + 1 ) ) - 1 + gObj->aOffset.iRight;
if( gObj->iObjType == GOBJ_OBJTYPE_OBJECT )
{
if( hb_vmRequestReenter() )
{
PHB_ITEM pArray;
switch( gObj->iObjType )
hb_vmPushEvalSym();
hb_vmPush( gObj->bBlock );
hb_vmSend( 0 );
pArray = hb_param( -1, HB_IT_ARRAY );
if( pArray && hb_arrayLen( pArray ) >= 3 )
{
iObjType = gObj->iData;
if( iObjType == GOBJ_OBJTYPE_GRIDVERT )
{
if( hb_arrayGetNI( pArray, 4 ) > 0 )
{
hb_wvg_GridVert( pWVT, pArray, uRect );
}
}
else if( iObjType == GOBJ_OBJTYPE_GRIDHORZ )
{
hb_wvg_GridHorz( pWVT, pArray, uRect );
}
else
{
/* Take care of offsets 5th element */
iTop = ( pWVT->PTEXTSIZE.y * hb_arrayGetNI( pArray,1 ) );
iLeft = ( pWVT->PTEXTSIZE.x * hb_arrayGetNI( pArray,2 ) );
iBottom = ( pWVT->PTEXTSIZE.y * ( hb_arrayGetNI( pArray,3 ) + 1 ) ) - 1;
iRight = ( pWVT->PTEXTSIZE.x * ( hb_arrayGetNI( pArray,4 ) + 1 ) ) - 1;
}
}
else
{
iObjType = 0;
}
/* C A R E F U L */
#if 0
if( pArray )
{
//hb_itemRelease( pArray );
//pArray = NULL;
}
#endif
hb_vmRequestRestore();
}
}
else
{
iObjType = gObj->iObjType;
iTop = ( pWVT->PTEXTSIZE.y * gObj->iTop ) + gObj->aOffset.iTop;
iLeft = ( pWVT->PTEXTSIZE.x * gObj->iLeft ) + gObj->aOffset.iLeft;
iBottom = ( pWVT->PTEXTSIZE.y * ( gObj->iBottom + 1 ) ) - 1 + gObj->aOffset.iBottom;
iRight = ( pWVT->PTEXTSIZE.x * ( gObj->iRight + 1 ) ) - 1 + gObj->aOffset.iRight;
}
switch( iObjType )
{
case GOBJ_OBJTYPE_BOXRAISED:
case GOBJ_OBJTYPE_BOXRECESSED:
@@ -1472,7 +1643,7 @@ void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
}
else
{
switch( gObj->iObjType )
switch( iObjType )
{
case GOBJ_OBJTYPE_BOXRAISED:
hb_wvg_BoxRaised( pWVT, iLeft-1, iTop-1, iRight+1, iBottom+1 );
@@ -1511,7 +1682,7 @@ void hb_gt_wvt_PaintGObjects( PHB_GTWVT pWVT, RECT *uRect )
}
else
{
switch( gObj->iObjType )
switch( iObjType )
{
case GOBJ_OBJTYPE_LINE: