Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 

160 rader
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.