You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

160 rivejä
5.0 KiB

  1. unit uMainForm;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  6. uglcContext, ulibTextSuite;
  7. type
  8. TMainForm = class(TForm)
  9. procedure FormCreate(Sender: TObject);
  10. procedure FormDestroy(Sender: TObject);
  11. procedure FormPaint(Sender: TObject);
  12. procedure FormResize(Sender: TObject);
  13. private
  14. fContext: TglcContext;
  15. fltsContext: TltsContext;
  16. fltsRenderer: TltsRendererOpenGL;
  17. fltsCreator: TltsFontCreatorGDI;
  18. fltsFont: TltsFont;
  19. fltsPostProcessorList: TltsPostProcessorList;
  20. procedure Render;
  21. end;
  22. var
  23. MainForm: TMainForm;
  24. implementation
  25. {$R *.lfm}
  26. uses
  27. dglOpenGL;
  28. const
  29. {$IF DEFINED(WIN32)}
  30. LibName = '..\..\..\libTextSuite-i386-win32.dll';
  31. {$ELSEIF DEFINED(WIN64)}
  32. LibName = '..\..\..\libTextSuite-x86_64-win64.dll';
  33. {$ELSEIF DEFINED(LINUX) AND DEFINED(CPU32)}
  34. LibName = '../../../libTextSuite-i386-linux.so';
  35. {$ELSEIF DEFINED(LINUX) AND DEFINED(CPU64)}
  36. LibName = '../../../libTextSuite-x86_64-linux.so';
  37. {$ELSE}
  38. {$ERROR 'unknown operation system'}
  39. {$IFEND}
  40. TEST_TEXT = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.';
  41. PATTER_DATA: array[0..15] of Byte = (
  42. $FF, $BF, $7F, $BF,
  43. $BF, $FF, $BF, $7F,
  44. $7F, $BF, $FF, $BF,
  45. $BF, $7F, $BF, $FF);
  46. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  47. //MainForm//////////////////////////////////////////////////////////////////////////////////////////////////////////////
  48. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  49. procedure TMainForm.FormCreate(Sender: TObject);
  50. var
  51. pf: TglcContextPixelFormatSettings;
  52. pp: TltsPostProcessor;
  53. img: TltsImage;
  54. begin
  55. ltsInitialize(LibName);
  56. pf := TglcContext.MakePF();
  57. fContext := TglcContext.GetPlatformClass.Create(self, pf);
  58. fContext.BuildContext;
  59. fContext.Activate;
  60. glDisable(GL_DEPTH_TEST);
  61. glDisable(GL_CULL_FACE);
  62. glClearColor(1.0, 1.0, 1.0, 1.0);
  63. fltsContext := TltsContext.Create;
  64. fltsRenderer := TltsRendererOpenGL.Create(fltsContext, ltsFormatRGBA8);
  65. fltsCreator := TltsFontCreatorGDI.Create(fltsContext);
  66. fltsPostProcessorList := TltsPostProcessorList.Create(fltsContext, true);
  67. img := TltsImage.Create(fltsContext);
  68. img.CreateEmpty(ltsFormatAlpha8, 4, 4);
  69. Move(PATTER_DATA[0], img.Data^, 16);
  70. pp := TltsPostProcessorFillPattern.Create(fltsContext, img, true, ltsPosition(0, 0), LTS_IMAGE_MODES_MODULATE_ALL, LTS_COLOR_CHANNELS_RGBA);
  71. pp.AddChars(ltsUsageInclude, 'Lorem');
  72. fltsPostProcessorList.Add(pp);
  73. pp := TltsPostProcessorFillColor.Create(fltsContext, ltsColor4f(0, 0, 0.5, 1), LTS_IMAGE_MODES_REPLACE_ALL, LTS_COLOR_CHANNELS_RGB);
  74. pp.AddChars(ltsUsageExclude, 'e');
  75. fltsPostProcessorList.Add(pp);
  76. pp := TltsPostProcessorBorder.Create(fltsContext, 3.0, 0.5, ltsColor4f(0.0, 0.5, 0.0, 1.0), true);
  77. pp.AddChars(ltsUsageInclude, 'e');
  78. fltsPostProcessorList.Add(pp);
  79. fltsFont := fltsCreator.GetFontByFile(ExpandFileName('../Prototype.ttf'), 40, [], ltsAANormal);
  80. fltsFont.PostProcessor := fltsPostProcessorList;
  81. end;
  82. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  83. procedure TMainForm.FormDestroy(Sender: TObject);
  84. begin
  85. FreeAndNil(fltsFont);
  86. FreeAndNil(fltsPostProcessorList);
  87. FreeAndNil(fltsCreator);
  88. FreeAndNil(fltsRenderer);
  89. FreeAndNil(fltsContext);
  90. FreeAndNil(fContext);
  91. ltsFinalize;
  92. end;
  93. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  94. procedure TMainForm.FormPaint(Sender: TObject);
  95. begin
  96. Render;
  97. end;
  98. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. procedure TMainForm.FormResize(Sender: TObject);
  100. begin
  101. if Assigned(fContext) then begin
  102. glViewport(0, 0, ClientWidth, ClientHeight);
  103. glMatrixMode(GL_PROJECTION);
  104. glLoadIdentity;
  105. glOrtho(0, ClientWidth, ClientHeight, 0, 10, -10);
  106. glMatrixMode(GL_MODELVIEW);
  107. glLoadIdentity;
  108. end;
  109. end;
  110. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  111. procedure TMainForm.Render;
  112. var
  113. block: TltsTextBlock;
  114. begin
  115. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  116. glLoadIdentity;
  117. glEnable(GL_BLEND);
  118. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  119. block := fltsRenderer.BeginBlock(10, 10, ClientWidth-20, ClientHeight-20, [ltsBlockFlagWordWrap]);
  120. try
  121. block.HorzAlign := ltsHorzAlignJustify;
  122. block.ChangeFont(fltsFont);
  123. block.ChangeColor(ltsColor4f(1.0, 1.0, 1.0, 1.0));
  124. block.TextOutW(TEST_TEXT);
  125. finally
  126. fltsRenderer.EndBlock(block);
  127. end;
  128. fContext.SwapBuffers;
  129. end;
  130. end.