It show a short menu (R-run, Q-quit). The user type R <ENTER>
a window shows up with the text Hello, World
. The user type ESC, the window is closed. Then the user re-type R <ENTER>
another window shows up but the text is not displayed.
!
! BUILDING IN MSYS2/MINGW64
!
! rm -rf {*.mod,../../modules/*}; \
! gfortran -march=native -Wall -std=f2018 -fmax-errors=1 -O3 \
! -J ../../modules ../../sdl2-fortran/src/{c_util,sdl2/{sdl2_stdinc,\
! sdl2_audio,sdl2_blendmode,sdl2_cpuinfo,sdl2_gamecontroller,sdl2_error,\
! sdl2_events,sdl2_filesystem,sdl2_hints,sdl2_joystick,sdl2_keyboard,\
! sdl2_log,sdl2_messagebox,sdl2_rect,sdl2_pixels,sdl2_platform,\
! sdl2_scancode,sdl2_surface,sdl2_render,sdl2_keycode,sdl2_mouse,\
! sdl2_rwops,sdl2_thread,sdl2_timer,sdl2_version,sdl2_video,\
! sdl2_opengl},sdl2}.f90 \
! ../../sdl2_gfx-fortran/src/{sdl2_gfx_misc,primitives,framerate,\
! sdl2_gfx}.f90 sdl2_gfx_text_test.f90 -o sdl2_gfx_text_test-static.out \
! -lmingw32 -lSDL2_gfx -lSDL2main -lSDL2 \
! -lws2_32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 \
! -lole32 -loleaut32 -lshell32 -lversion -luuid -lcomdlg32 -lhid \
! -lsetupapi; rm -rf {*.mod,../modules/*}
!
!
! BUILDING IN WSL
!
! rm -rf {*.mod,../../modules/*}; \
! gfortran -march=native -Wall -std=f2018 -fmax-errors=1 -O3 \
! -J ../../modules ../../sdl2-fortran/src/{c_util,sdl2/{sdl2_stdinc,\
! sdl2_audio,sdl2_blendmode,sdl2_cpuinfo,sdl2_gamecontroller,\
! sdl2_error,sdl2_events,sdl2_filesystem,sdl2_hints,sdl2_joystick,\
! sdl2_keyboard,sdl2_log,sdl2_messagebox,sdl2_rect,sdl2_pixels,\
! sdl2_platform,sdl2_scancode,sdl2_surface,sdl2_render,sdl2_keycode,\
! sdl2_mouse,sdl2_rwops,sdl2_thread,sdl2_timer,sdl2_version,\
! sdl2_video,sdl2_opengl},sdl2}.f90 \
! ../../sdl2_gfx-fortran/src/{sdl2_gfx_misc,primitives,framerate,\
! sdl2_gfx}.f90 sdl2_gfx_text_test.f90 -o sdl2_gfx_text_test-wsl.out \
! -lSDL2_gfx -lSDL2; rm -rf {*.mod,../modules/*}
!
program sdl2_gfx_text_test
implicit none
character :: key = ' '
integer :: ikey = ichar(' ')
do while (ikey /= ichar('Q'))
! SHOW Menu
write(*,*) 'Choose item:'
write(*,*) ' R : RUN'
write(*,*) ' Q : QUIT'
write(*,'(a)',ADVANCE='NO') 'Choice : '
read(*,*) key
! Convert in upcase if not
if ('a' <= key .and. key <= 'z') then
ikey = ichar(key)-32
else
ikey = ichar(key)
end if
write(*,*)
select case (ikey)
case (ichar('R'))
call run()
end select
write(*,*)
end do
contains
subroutine run()
use :: sdl2_gfx_misc
use :: sdl2_gfx
integer, parameter :: SCREEN_WIDTH = 640
integer, parameter :: SCREEN_HEIGHT = 480
integer, parameter :: FONT_SIZE = 8
integer, parameter :: RED = int(z'FF0000FF')
integer, parameter :: GREEN = int(z'FF00FF00')
character(len=*), parameter :: MSG = &
'Hello, World!'
type(sdl) :: window
type(sdl) :: renderer
type(sdl_event) :: event
integer :: i, j, rc
logical :: done = .false.
! initialise SDL
if (sdl_init(SDL_INIT_VIDEO) < 0) then
write (stderr, *) 'SDL Error: ', sdl_get_error()
stop
end if
! create the SDL window
window = sdl_create_window(c_str('SDL2_GFX_TEXT_TEST'), &
SDL_WINDOWPOS_UNDEFINED, &
SDL_WINDOWPOS_UNDEFINED, &
SCREEN_WIDTH, &
SCREEN_HEIGHT, &
SDL_WINDOW_SHOWN)
if (.not. sdl_associated(window)) then
write (stderr, *) 'SDL Error: ', sdl_get_error()
stop
end if
! create the renderer
renderer = sdl_create_renderer(window, -1, &
ior(SDL_RENDERER_ACCELERATED, SDL_RENDERER_TARGETTEXTURE))
i = (SCREEN_WIDTH-string_length(MSG,FONT_SIZE))/2
j = SCREEN_HEIGHT/2
rc = pixel(renderer,10,10,RED)
rc = pixel(renderer,11,11,RED)
rc = pixel(renderer,12,12,RED)
rc = pixel(renderer,13,13,RED)
rc = pixel(renderer,14,14,RED)
rc = pixel(renderer,15,15,RED)
rc = string(renderer,i,j,MSG,GREEN)
print *, rc
if (rc < 0) then
write(*,*) 'SDL Error: ', sdl_get_error()
!stop
end if
call sdl_render_present(renderer) ! Render to screen
done = .false.
do while (.not. done)
do while (sdl_poll_event(event) > 0)
select case (event%type)
case (SDL_QUITEVENT)
done = .true.
case (SDL_KEYDOWN)
select case (event%key%key_sym%scan_code)
case (SDL_SCANCODE_ESCAPE)
done = .true.
end select
end select
end do
end do
! cleanup and quit
call sdl_destroy_renderer(renderer)
call sdl_destroy_window(window)
call sdl_quit()
end subroutine run
end program sdl2_gfx_text_test