вторник, 9 февраля 2016 г.

Lazarus World. Используем True Type Fonts шрифты при помощи библиотеки SDL_ttf



Внимание! Статья основна из статей посвященных SDL 1.2 с сайта http://www.freepascal-meets-sdl.net/


Давайте попробуем загрузить шрифт True Type Fonts и вывести текст в нашем SDL окне. Первое что нам понадобится, это создать SDL окно. Как это сделать я писал в статье Lazarus World. Подключаем библиотеку SDL 1.2. Вторым шагом будет найти и скачать True Type Fonts шрифт. Я скачал его отсюда. Третье, что нам необходимо сделать, это установить библиотеку SDL_TTF используя следующую команду в терминале:

sudo apt-get install libsdl-ttf2.0-0 libsdl-ttf2.0-dev

Создайте папку хранения нашего проекта, например ~/projects/lazarus/sdl/sdl_p2/. Сохраните проект под именем sdl_p2.lpr. Скопируйте шрифт в папку с проектом, файл шрифта называется cour.ttf. Нам осталось в редактор кода добавить код, собрать его и запустить на исполнение.

 Рисунок 1. Результат работы программы

program sdl_p2;

{$mode objfpc}{$H+}

uses sdl, sdl_ttf;
var
  screen :pSDL_SURFACE;
  fontface:pSDL_SURFACE;
  loaded_font: pointer;
  colour_font, colour_font2:pSDL_COLOR;
  i:BYTE;
  loopstop: boolean = FALSE;
  event: pSDL_EVENT;

begin
     SDL_Init(SDL_INIT_VIDEO);
     screen := SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
     if screen = NIL then Halt;

     if Ttf_Init = -1 then Halt;
     loaded_font := TTF_OPENFONT('cour.ttf', 60);

     new(colour_font);
     new(colour_font2);
     colour_font^.r:=255; colour_font^.g:=0; colour_font^.b:=0;
     colour_font2^.r:=0; colour_font2^.g:=255; colour_font2^.b:=255;

     fontface:=TTF_RENDERTEXT_SHADED(loaded_font
               'Hello World!', colour_font^, colour_font2^);

     new(event);

     while loopstop = FALSE do
     begin
          if SDL_PollEvent(event) = 1 then
          begin
               case event^.type_ of
                    SDL_KEYDOWN:
                    begin
                         if event^.key.keysym.sym = 27  
                         then loopstop := TRUE;
                    end;
                    SDL_QUITEV:
                    begin
                         loopstop := TRUE;
                    end;
               end;
          end;
          SDL_BLITSURFACE(fontface, NIL, screen, NIL);
          SDL_FLIP(screen);
     end;
     Dispose(colour_font);
     Dispose(colour_font2);
     Dispose(event);
     SDL_FreeSurface(screen);
     SDL_FreeSurface(fontface);
     TTF_CloseFont(loaded_font);
     TTF_QUIT;
     SDL_QUIT;
end.


syntax highlighted by Code2HTML, v. 0.9.1
 

Lazarus World. Подключаем библиотеку SDL 1.2


Внимание! Статья основна из статей посвященных SDL 1.2 с сайта http://www.freepascal-meets-sdl.net/

Для того чтобы начать работать с библиотекой SDL 1.2 нам с вами понадобятся заголовочные файлы переведенные в язык Pascal и файлы динамических библиотек (файлы запускаемого окружения), которые используется вместе с нашей программой в момент запуска.
Мне известны два проекта, в рамках которых осуществлен перевод заголовочных файлов на язык Pascal. Ниже я приведу названия этих проектов и ссылки на ресурсы, откуда их можно скачать.
Скачивать заголовочные файлы нам не придется, т.к. в составе компилятора freepascal они уже включены (начиная с версии fpc 2.2.2 http://wiki.freepascal.org/FPC_and_SDL ), т.е. если мы устанавливаем IDE Lazarus на Ubuntu 15.10, то все необходимые заголовочные файлы SDL 1.2 там уже есть. Расположены они по следующему пути:

/usr/share/fpcsrc/2.6.4/packages/sdl

Файлы динамических библиотек в Ubuntu 15.10 можно установить по следующей команде в терминале:

sudo apt-get install libsdl1.2debian libsdl1.2-dev

Ну и не помешает установить весь необходимый инструментарий для сборки проектов, в частности туда входит компиляторы gcc, g++ и т.д.

sudo apt-get install build-essential

Теперь можно перейти к созданию нового проекта и настройки проекта в среде Lazarus.

Запустите Lazarus и создайте новый проект. Для это выберите пункт меню «File» (Файл) – подпункт «New...» (Создать...). В открывшемся окне, с именем «New..» (Создать...), в левой части выберите раздел «Project» (Проект) и потом выберите подраздел «Program» (Программа), потом нажмите кнопку «OK».

Создайте папку хранения нашего проекта, например ~/projects/lazarus/sdl/sdl_p1/. Сохраните проект под именем sdl_p1.lpr. Для этого выберите пункт меню «File» (Файл) - подпункт меню «Save As...» (Сохранить как) и указать путь до папки хранения нашего проекта.

Настойка проекта завершена. Нам осталось в редактор кода добавить минимальный код SDL проекта, собрать его и запустить на исполнение.

program sdl_p1;

{$mode objfpc}{$H+}

uses sdl;
var
  screen :pSDL_SURFACE;
  loopstop: boolean = FALSE;
  event: pSDL_EVENT;

begin
     SDL_Init(SDL_INIT_VIDEO);
     screen := SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

     new(event);

     while loopstop = FALSE do
     begin
          if SDL_PollEvent(event) = 1 then
          begin
               case event^.type_ of
                    SDL_KEYDOWN:
                    begin
                         if event^.key.keysym.sym = 27 
                         then loopstop := TRUE;
                    end;
                    SDL_QUITEV:
                    begin
                         loopstop := TRUE;
                    end;
               end;
          end;
     end;
     Dispose(event);
     SDL_FreeSurface(screen);
     SDL_QUIT;
end.  


syntax highlighted by Code2HTML, v. 0.9.1