123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- library demo04;
- {$I zglCustomConfig.cfg}
- {$I zgl_config.cfg}
- uses
- zgl_application,
- zgl_file,
- zgl_screen,
- zgl_window,
- zgl_timers,
- zgl_touch,
- zgl_font,
- zgl_text,
- zgl_primitives_2d,
- zgl_sprite_2d,
- zgl_textures,
- zgl_textures_png,
- zgl_textures_jpg,
- zgl_types,
- zgl_collision_2d,
- gegl_color,
- zgl_types,
- zgl_utils;
- var
- dirRes : UTF8String = 'assets/';
- fntMain : LongWord;
- texBack : zglPTexture;
- correctAspect : Boolean = TRUE;
- correctRect : zglTRect2D;
- str : UTF8String;
- TimeStart: Byte;
- procedure Init;
- begin
- zgl_Enable( CORRECT_RESOLUTION );
- scr_CorrectResolution( 800, 600 );
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
- fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
- texBack := tex_LoadFromFile( dirRes + 'back03.jpg' );
- file_CloseArchive();
- str := 'Tap here to toggle' + #10 + 'Correction of aspect';
- setFontTextScale(15, fntMain);
- end;
- procedure Draw;
- var
- w : Single;
- begin
- ssprite2d_Draw( texBack, 0, 0, 800, 600, 0 );
- correctRect.W := text_GetWidth( fntMain, str ) + 16;
- correctRect.H := 72;
- correctRect.X := 400 - correctRect.W / 2;
- correctRect.Y := 100;
- if correctAspect Then
- begin
- pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_White05, PR2D_FILL );
- pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_Lime );
- end else
- begin
- pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_Black05, PR2D_FILL );
- pr2d_Rect( correctRect.X, correctRect.Y, correctRect.W, correctRect.H, cl_White );
- end;
- text_DrawInRect( fntMain, correctRect, str, TEXT_HALIGN_CENTER or TEXT_VALIGN_CENTER );
- end;
- procedure Timer;
- begin
- if touch_Tap( 0 ) Then
- begin
- // RU: Android устройства имеют самые разнообразные разрешения экрана и соотношения сторон, поэтому коррекция аспекта просто необходма.
- // EN: Android devices have a lot of different screen resolutions and aspects, and because of this correction of aspect is "must have" for project.
- if col2d_PointInRect( touch_X( 0 ), touch_Y( 0 ), correctRect ) Then
- begin
- correctAspect := not correctAspect;
- if correctAspect Then
- begin
- zgl_Enable( CORRECT_WIDTH );
- zgl_Enable( CORRECT_HEIGHT );
- scr_SetOptions();
- end else
- begin
- zgl_Disable( CORRECT_WIDTH );
- zgl_Disable( CORRECT_HEIGHT );
- scr_SetOptions();
- end;
- end;
- end;
- touch_ClearState();
- end;
- procedure Restore;
- begin
- file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
- font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
- tex_RestoreFromFile( texBack, dirRes + 'back03.jpg' );
- file_CloseArchive();
- end;
- procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
- begin
- TimeStart := timer_Add( @Timer, 16, t_Start );
- zgl_Reg( SYS_LOAD, @Init );
- zgl_Reg( SYS_DRAW, @Draw );
- zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
- scr_SetOptions();
- end;
- exports
- Java_zengl_android_ZenGL_Main,
- {$I android_export.inc}
- End.
|