#include "hbgtinfo.ch"
#include "hbgfx.ch"

PROCEDURE Main()

   LOCAL nFontHeight, nFontWidth
   LOCAL nTop, nLeft, nHeight, nWidth, nColor, nSec := Seconds()
   LOCAL cWelcome

#if defined( __HBSCRIPT__HBSHELL )
#  if defined( __PLATFORM__WINDOWS )
      hbshell_gtSelect( "GTWVT" )
#  elif defined( __PLATFORM__UNIX )
      hbshell_gtSelect( "GTXWC" )
#  endif
#endif

   IF ! hb_gtInfo( HB_GTI_ISGRAPHIC )
      ? "You are using a non graphics capable gt:"
      ? "GT" + hb_gtVersion()
      QUIT
   ENDIF

   IF hb_gtInfo( HB_GTI_DESKTOPWIDTH ) > 1000
      hb_gtInfo( HB_GTI_FONTWIDTH, 12 )
      hb_gtInfo( HB_GTI_FONTSIZE, 24 )
   ENDIF

   nFontHeight := hb_gtInfo( HB_GTI_FONTSIZE )
   nFontWidth := hb_gtInfo( HB_GTI_FONTWIDTH )

   cWelcome := "Welcome to the World of Harbour multiplatform Graphics!" + " (GT" + hb_gtVersion() + ")"

   SetColor( "n/w" )
   @ 0, 0 SAY Space( MaxCol() + 1 )
   @ 1, 0 SAY PadC( cWelcome, MaxCol() + 1 )
   @ 2, 0 SAY Space( MaxCol() + 1 )

   hb_gtInfo( HB_GTI_WINTITLE, "Cross-GT, multiplatform graphics demo" )

   PutFrame( ;
      nFontHeight / 2, ;
      MaxCol() / 2 * nFontWidth - Len( cWelcome ) / 2 * nFontWidth - nFontWidth, ;
      nFontHeight * 2 + nFontHeight / 2, ;
      nFontWidth + MaxCol() / 2 * nFontWidth + Len( cWelcome ) / 2 * nFontWidth, ;
      hb_gfxMakeColor( 0, 0, 0 ), hb_gfxMakeColor( 255, 255, 255 ) )

   DO WHILE Inkey() == 0
      nTop := Int( hb_Random( 3.1 * nFontHeight, hb_gtInfo( HB_GTI_SCREENHEIGHT ) ) )
      nLeft := Int( hb_Random( hb_gtInfo( HB_GTI_SCREENWIDTH ) ) )
      nHeight := Int( hb_Random( 251 ) )
      nWidth := Int( hb_Random( 251 ) )
      nColor := hb_gfxMakeColor( Int( hb_Random( 32, 256 ) ), Int( hb_Random( 32, 256 ) ), Int( hb_Random( 32, 256 ) ) )

      SWITCH Int( hb_Random( 1, 9 ) )
      CASE 1
         hb_gfxLine( nTop, nLeft, nTop + nHeight, nLeft + nWidth, nColor )
         EXIT
      CASE 2
         hb_gfxRect( nTop, nLeft, nTop + nHeight, nLeft + nWidth, nColor )
         EXIT
      CASE 3
         hb_gfxFilledRect( nTop, nLeft, nTop + nHeight, nLeft + nWidth, nColor )
         EXIT
      CASE 4
         nTop += nHeight
         hb_gfxCircle( nTop, nLeft, nHeight, nColor )
         EXIT
      CASE 5
         nTop += nHeight
         hb_gfxFilledCircle( nTop, nLeft, nHeight, nColor )
         EXIT
      CASE 6
         nTop += nHeight
         hb_gfxEllipse( nTop, nLeft, nHeight, nWidth, nColor )
         EXIT
      CASE 7
         nTop += nHeight
         hb_gfxFilledEllipse( nTop, nLeft, nHeight, nWidth, nColor )
         EXIT
      CASE 8
         nHeight %= 64
         IF nHeight % 2 == 1
            nHeight++
         ENDIF
         hb_gfxText( nTop, nLeft, "Hello", nColor, nHeight )
         EXIT
      ENDSWITCH
      IF Seconds() - nSec > 3
         hb_gfxFloodFill( 0, 0, nColor )
         nSec := Seconds()
      ENDIF
   ENDDO

   RETURN

FUNCTION PutFrame( nTop, nLeft, nBottom, nRight, nColor1, nColor2 )

   hb_gfxRect( nTop, nLeft, nBottom, nRight, nColor1 )
   hb_gfxRect( nTop + 1, nLeft + 1, nBottom - 1, nRight - 1, nColor2 )
   hb_gfxLine( nTop + 1, nLeft + 1, nTop + 1, nRight - 1, nColor2 )
   hb_gfxLine( nTop + 2, nLeft + 1, nBottom - 1, nLeft + 1, nColor2 )

   RETURN NIL
