/*
 * Harbour 3.2.0dev (r2307062207)
 * MinGW GNU C 7.3 (32-bit)
 * Generated C source from "Bevel.prg"
 */

#include "hbvmpub.h"
#include "hbinit.h"


HB_FUNC( XBEVEL );
HB_FUNC_EXTERN( __CLSLOCKDEF );
HB_FUNC_EXTERN( XACLASS );
HB_FUNC_EXTERN( TWINCONTROL );
HB_FUNC_EXTERN( NOR );
HB_FUNC_STATIC( XBEVEL_CREATE );
HB_FUNC_STATIC( XBEVEL_FREE );
HB_FUNC_STATIC( XBEVEL_SETPEN );
HB_FUNC_EXTERN( XWINCONTROL_WMERASEBKGND );
HB_FUNC_STATIC( XBEVEL_WMNCCALCSIZE );
HB_FUNC_STATIC( XBEVEL_WMNCPAINT );
HB_FUNC_EXTERN( __CLSUNLOCKDEF );
HB_FUNC_EXTERN( __OBJHASMSG );
HB_FUNC_EXTERN( EMPTY );
HB_FUNC_EXTERN( DELETEOBJECT );
HB_FUNC_EXTERN( CREATEPEN );
HB_FUNC_EXTERN( SETWINDOWPOS );
HB_FUNC_INITSTATICS();


HB_INIT_SYMBOLS_BEGIN( hb_vm_SymbolInit_BEVEL )
{ "XBEVEL", {HB_FS_PUBLIC | HB_FS_FIRST | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL )}, NULL },
{ "__CLSLOCKDEF", {HB_FS_PUBLIC}, {HB_FUNCNAME( __CLSLOCKDEF )}, NULL },
{ "NEW", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "XACLASS", {HB_FS_PUBLIC}, {HB_FUNCNAME( XACLASS )}, NULL },
{ "TWINCONTROL", {HB_FS_PUBLIC}, {HB_FUNCNAME( TWINCONTROL )}, NULL },
{ "ADDPROPINIT", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "ADDPROPERTY", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "SETPEN", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "ADDMULTIDATA", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "NOR", {HB_FS_PUBLIC}, {HB_FUNCNAME( NOR )}, NULL },
{ "ADDEVENT", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "ADDMETHOD", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "XBEVEL_CREATE", {HB_FS_STATIC | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL_CREATE )}, NULL },
{ "XBEVEL_FREE", {HB_FS_STATIC | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL_FREE )}, NULL },
{ "XBEVEL_SETPEN", {HB_FS_STATIC | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL_SETPEN )}, NULL },
{ "ADDINLINE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "XWINCONTROL_WMERASEBKGND", {HB_FS_PUBLIC}, {HB_FUNCNAME( XWINCONTROL_WMERASEBKGND )}, NULL },
{ "XBEVEL_WMNCCALCSIZE", {HB_FS_STATIC | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL_WMNCCALCSIZE )}, NULL },
{ "XBEVEL_WMNCPAINT", {HB_FS_STATIC | HB_FS_LOCAL}, {HB_FUNCNAME( XBEVEL_WMNCPAINT )}, NULL },
{ "CREATE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "__CLSUNLOCKDEF", {HB_FS_PUBLIC}, {HB_FUNCNAME( __CLSUNLOCKDEF )}, NULL },
{ "INSTANCE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "__OBJHASMSG", {HB_FS_PUBLIC}, {HB_FUNCNAME( __OBJHASMSG )}, NULL },
{ "INITCLASS", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "SUPER", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "EMPTY", {HB_FS_PUBLIC}, {HB_FUNCNAME( EMPTY )}, NULL },
{ "HPEN", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "DELETEOBJECT", {HB_FS_PUBLIC}, {HB_FUNCNAME( DELETEOBJECT )}, NULL },
{ "_HPEN", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "FREE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "_FNPENCOLOR", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "_FNPENSIZE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "_FNPENSTYLE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "CREATEPEN", {HB_FS_PUBLIC}, {HB_FUNCNAME( CREATEPEN )}, NULL },
{ "FNPENSTYLE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "FNPENSIZE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "FNPENCOLOR", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "SETWINDOWPOS", {HB_FS_PUBLIC}, {HB_FUNCNAME( SETWINDOWPOS )}, NULL },
{ "HANDLE", {HB_FS_PUBLIC | HB_FS_MESSAGE}, {NULL}, NULL },
{ "(_INITSTATICS00001)", {HB_FS_INITEXIT | HB_FS_LOCAL}, {hb_INITSTATICS}, NULL }
HB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_BEVEL, "Bevel.prg", 0x0, 0x0003 )

#if defined( HB_PRAGMA_STARTUP )
   #pragma startup hb_vm_SymbolInit_BEVEL
#elif defined( HB_DATASEG_STARTUP )
   #define HB_DATASEG_BODY    HB_DATASEG_FUNC( hb_vm_SymbolInit_BEVEL )
   #include "hbiniseg.h"
#endif

HB_FUNC( XBEVEL )
{
	static const HB_BYTE pcode[] =
	{
		149,3,0,116,39,0,36,17,0,103,1,0,100,8,
		29,250,4,176,1,0,104,1,0,12,1,29,239,4,
		166,177,4,0,122,80,1,48,2,0,176,3,0,12,
		0,106,7,88,66,101,118,101,108,0,108,4,4,1,
		0,108,0,112,3,80,2,36,19,0,97,1,129,0,
		0,80,1,36,20,0,48,5,0,95,2,106,7,110,
		87,105,100,116,104,0,92,100,100,95,1,9,100,100,
		100,100,100,9,112,11,73,36,21,0,48,5,0,95,
		2,106,8,110,72,101,105,103,104,116,0,92,100,100,
		95,1,9,100,100,100,100,100,9,112,11,73,36,23,
		0,48,5,0,95,2,106,13,110,66,111,114,100,101,
		114,83,116,121,108,101,0,92,6,100,95,1,9,100,
		100,100,100,100,9,112,11,73,36,24,0,48,6,0,
		95,2,106,13,110,66,111,114,100,101,114,83,105,100,
		101,115,0,100,100,95,1,9,100,100,100,100,100,9,
		112,11,73,36,25,0,48,5,0,95,2,106,13,108,
		84,114,97,110,115,112,97,114,101,110,116,0,9,100,
		95,1,9,100,100,100,100,100,9,112,11,73,36,26,
		0,48,5,0,95,2,106,11,108,79,119,110,66,111,
		114,100,101,114,0,9,100,95,1,9,100,100,100,100,
		100,9,112,11,73,36,27,0,48,5,0,95,2,106,
		9,110,79,112,97,99,105,116,121,0,121,100,95,1,
		9,100,100,100,100,100,9,112,11,73,36,30,0,48,
		5,0,95,2,106,10,110,80,101,110,67,111,108,111,
		114,0,97,211,211,211,0,100,95,1,9,100,89,19,
		0,2,0,0,0,48,7,0,95,1,95,2,100,100,
		112,3,6,100,106,9,80,69,95,67,111,108,111,114,
		0,100,9,112,11,73,36,31,0,48,5,0,95,2,
		106,9,110,80,101,110,83,105,122,101,0,92,2,100,
		95,1,9,100,89,19,0,2,0,0,0,48,7,0,
		95,1,100,95,2,100,112,3,6,100,100,100,9,112,
		11,73,36,34,0,48,5,0,95,2,106,10,110,80,
		101,110,83,116,121,108,101,0,121,100,95,1,9,100,
		89,19,0,2,0,0,0,48,7,0,95,1,100,100,
		95,2,112,3,6,100,100,106,8,112,115,83,111,108,
		105,100,0,121,4,2,0,106,7,112,115,68,97,115,
		104,0,122,4,2,0,106,6,112,115,68,111,116,0,
		92,2,4,2,0,106,10,112,115,68,97,115,104,68,
		111,116,0,92,3,4,2,0,106,13,112,115,68,97,
		115,104,68,111,116,68,111,116,0,92,4,4,2,0,
		106,7,112,115,78,117,108,108,0,92,5,4,2,0,
		106,14,112,115,73,110,115,105,100,101,70,114,97,109,
		101,0,92,6,4,2,0,4,7,0,9,112,11,73,
		36,36,0,92,2,80,1,36,37,0,48,8,0,95,
		2,100,176,9,0,93,128,0,92,2,122,12,3,95,
		1,121,72,121,72,121,72,106,12,110,67,108,97,115,
		115,83,116,121,108,101,0,4,1,0,9,112,5,73,
		36,38,0,48,8,0,95,2,100,100,95,1,121,72,
		121,72,121,72,106,5,104,80,101,110,0,4,1,0,
		9,112,5,73,36,40,0,48,6,0,95,2,106,6,
		99,84,101,120,116,0,100,100,95,1,9,100,100,100,
		100,100,9,112,11,73,36,41,0,48,10,0,95,2,
		106,11,79,110,68,98,108,67,108,105,99,107,0,95,
		1,106,1,0,112,3,73,36,43,0,122,80,1,36,
		44,0,48,11,0,95,2,106,7,67,114,101,97,116,
		101,0,108,12,95,1,92,8,72,121,72,121,72,112,
		3,73,36,45,0,48,11,0,95,2,106,5,70,114,
		101,101,0,108,13,95,1,121,72,121,72,121,72,112,
		3,73,36,46,0,48,11,0,95,2,106,7,83,101,
		116,80,101,110,0,108,14,95,1,121,72,121,72,121,
		72,112,3,73,36,48,0,122,80,1,36,49,0,48,
		6,0,95,2,106,9,99,77,101,115,115,97,103,101,
		0,100,100,95,1,9,100,100,100,100,100,9,112,11,
		73,36,50,0,48,6,0,95,2,106,4,108,51,68,
		0,100,100,95,1,9,100,100,100,100,100,9,112,11,
		73,36,51,0,48,6,0,95,2,106,8,108,66,111,
		114,100,101,114,0,100,100,95,1,9,100,100,100,100,
		100,9,112,11,73,36,52,0,48,6,0,95,2,106,
		9,108,84,97,98,83,116,111,112,0,100,100,95,1,
		9,100,100,100,100,100,9,112,11,73,36,53,0,48,
		6,0,95,2,106,12,108,80,97,114,101,110,116,70,
		111,110,116,0,100,100,95,1,9,100,100,100,100,100,
		9,112,11,73,36,54,0,48,6,0,95,2,106,9,
		110,67,108,114,84,101,120,116,0,100,100,95,1,9,
		100,100,100,100,100,9,112,11,73,36,55,0,48,6,
		0,95,2,106,6,111,70,111,110,116,0,100,100,95,
		1,9,100,100,100,100,100,9,112,11,73,36,57,0,
		48,15,0,95,2,106,13,87,77,69,114,97,115,101,
		66,107,103,110,100,0,89,9,0,1,0,0,0,122,
		6,95,1,121,72,121,72,121,72,112,3,73,36,58,
		0,48,11,0,95,2,106,8,87,77,80,97,105,110,
		116,0,108,16,95,1,121,72,121,72,121,72,112,3,
		73,36,59,0,48,11,0,95,2,106,13,87,77,78,
		67,67,97,108,99,83,105,122,101,0,108,17,95,1,
		121,72,121,72,121,72,112,3,73,36,60,0,48,11,
		0,95,2,106,10,87,77,78,67,80,97,105,110,116,
		0,108,18,95,1,121,72,121,72,121,72,112,3,73,
		36,62,0,48,19,0,95,2,112,0,73,167,14,0,
		0,176,20,0,104,1,0,95,2,20,2,168,48,21,
		0,95,2,112,0,80,3,176,22,0,95,3,106,10,
		73,110,105,116,67,108,97,115,115,0,12,2,28,12,
		48,23,0,95,3,164,146,1,0,73,95,3,110,7,
		48,21,0,103,1,0,112,0,110,7
	};

	hb_vmExecute( pcode, symbols );
}

HB_FUNC_STATIC( XBEVEL_CREATE )
{
	static const HB_BYTE pcode[] =
	{
		13,0,1,36,68,0,48,19,0,48,24,0,102,112,
		0,95,1,112,1,73,36,69,0,48,7,0,102,112,
		0,73,36,71,0,102,110,7
	};

	hb_vmExecute( pcode, symbols );
}

HB_FUNC_STATIC( XBEVEL_FREE )
{
	static const HB_BYTE pcode[] =
	{
		36,77,0,176,25,0,48,26,0,102,112,0,12,1,
		31,27,36,78,0,176,27,0,48,26,0,102,112,0,
		20,1,36,79,0,48,28,0,102,121,112,1,73,36,
		82,0,48,29,0,48,24,0,102,112,0,112,0,110,
		7
	};

	hb_vmExecute( pcode, symbols );
}

HB_FUNC_STATIC( XBEVEL_SETPEN )
{
	static const HB_BYTE pcode[] =
	{
		13,0,3,36,90,0,95,1,100,69,28,11,48,30,
		0,102,95,1,112,1,73,95,2,100,69,28,11,48,
		31,0,102,95,2,112,1,73,95,3,100,69,28,11,
		48,32,0,102,95,3,112,1,73,36,92,0,176,25,
		0,48,26,0,102,112,0,12,1,31,16,36,93,0,
		176,27,0,48,26,0,102,112,0,20,1,36,96,0,
		48,28,0,102,176,33,0,48,34,0,102,112,0,48,
		35,0,102,112,0,48,36,0,102,112,0,12,3,112,
		1,73,36,99,0,176,37,0,48,38,0,102,112,0,
		121,121,121,121,121,176,9,0,92,32,92,2,122,92,
		16,92,4,12,5,20,7,36,101,0,100,110,7
	};

	hb_vmExecute( pcode, symbols );
}

HB_FUNC_INITSTATICS()
{
	static const HB_BYTE pcode[] =
	{
		117,39,0,1,0,7
	};

	hb_vmExecute( pcode, symbols );
}

#line 106 "Bevel.prg"

#include <windows.h>
#include <xailer.h>
#include <constants.ch>

extern void PaintSelected( void );

//------------------------------------------------------------------------------

HB_FUNC_STATIC( XBEVEL_WMNCCALCSIZE )
{
   if ( hb_parnl( 1 ) )
      {
      PHB_ITEM Self = hb_stackSelfItem();
      BOOLEAN lOwnBorder = XA_ObjGetL( Self, "lOwnBorder" );
      LPNCCALCSIZE_PARAMS csp = (LPVOID) hb_parnl( 2 );

      if ( lOwnBorder )
         {
         UINT nMargin = XA_ObjGetNL( Self, "nPenSize" );
         if ( nMargin )
            {
            csp->rgrc[0].left += nMargin;
            csp->rgrc[0].top += nMargin;
            csp->rgrc[0].right -= nMargin;
            csp->rgrc[0].bottom -= nMargin;
            }
         }
      else
         {
         PHB_ITEM tControl;
         tControl = XA_ObjGetItemCopy( Self, "TControl" );
         XA_ObjSendNL2( tControl, "WMNCCalcSize", hb_parnl( 1 ), hb_parnl( 2 ) );
         hb_itemRelease( tControl );
         }
      }

   hb_ret();
}

//------------------------------------------------------------------------------

HB_FUNC_STATIC( XBEVEL_WMNCPAINT )
{
   PHB_ITEM Self = hb_stackSelfItem();
   BOOLEAN lOwnBorder = XA_ObjGetL( Self, "lOwnBorder" );
   HWND hWnd = GetHandleOf( Self );
   int nMargin = XA_ObjGetNL( Self, "nPenSize" );

   if ( lOwnBorder && hWnd && nMargin )
      {
      HDC hdc;
      RECT rect;
      HRGN hrgn = (HRGN) hb_parnl( 1 );
      HPEN hPen;
      UINT nBorderSides = XA_ObjGetNL( Self, "nBorderSides" );

      if( GetRgnBox( hrgn, &rect ) > NULLREGION )
         {
         rect.right += nMargin;
         rect.bottom += nMargin;
         hrgn = CreateRectRgnIndirect( &rect );
         }

      PrevWindowProc( hWnd, WM_NCPAINT, (WPARAM) hrgn, 0 );
      DeleteObject( hrgn );

      hdc = GetWindowDC( hWnd );

      GetWindowRect( hWnd, &rect );
      nMargin = ( nMargin >> 1 );
      rect.right -= rect.left;
      rect.bottom -= rect.top;
      rect.left = 0;
      rect.top = 0;

      hPen = SelectObject( hdc, (HPEN) XA_ObjGetNL( Self, "hPen" ) );

      if( nBorderSides & bsLEFT )
         {
         MoveToEx( hdc, rect.left + nMargin, rect.top, NULL );
         LineTo( hdc, rect.left + nMargin, rect.bottom );
         }

      if( nBorderSides & bsBOTTOM )
         {
         MoveToEx( hdc, rect.left, rect.bottom - max( nMargin, 1 ), NULL );
         LineTo( hdc, rect.right, rect.bottom - max( nMargin, 1 ) );
         }

      if( nBorderSides & bsRIGHT )
         {
         MoveToEx( hdc, rect.right - max( 1, nMargin ), rect.bottom, NULL );
         LineTo( hdc, rect.right - max( 1, nMargin ), rect.top );
         }

      if( nBorderSides & bsTOP )
         {
         MoveToEx( hdc, rect.right, rect.top + nMargin, NULL );
         LineTo( hdc, rect.left, rect.top + nMargin );
         }

      SelectObject( hdc, hPen );
      ReleaseDC( hWnd, hdc );
      PaintSelected();
      }

   else
      {
      PHB_ITEM tControl;
      tControl = XA_ObjGetItemCopy( Self, "TControl" );
      XA_ObjSendNL2( tControl, "WMNCPaint", hb_parnl( 1 ), hb_parnl( 2 ) );
      hb_itemRelease( tControl );
      }

   hb_retnl( 0 );
}

