Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

113 lignes
3.2 KiB

  1. unit uMainForm;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, uglcContext, TextSuite, uglcTypes, utsTextSuite;
  6. type
  7. TMainForm = class(TForm)
  8. ApplicationProperties: TApplicationProperties;
  9. procedure ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
  10. procedure FormCreate(Sender: TObject);
  11. procedure FormPaint(Sender: TObject);
  12. private
  13. fContext: TglcContext;
  14. fTextSuiteContext: tsContextID;
  15. fFontID: tsFontID;
  16. ftsContext: TtsContext;
  17. ftsRenderer: TtsRenderer;
  18. ftsCreator: TtsFontCreator;
  19. ftsFont: TtsFont;
  20. procedure Render;
  21. public
  22. { public declarations }
  23. end;
  24. var
  25. MainForm: TMainForm;
  26. implementation
  27. {$R *.lfm}
  28. uses
  29. dglOpenGL;
  30. const
  31. TEST_STRING = '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. 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.';
  32. procedure TMainForm.FormCreate(Sender: TObject);
  33. var
  34. pf: TglcContextPixelFormatSettings;
  35. begin
  36. pf := TglcContext.MakePF();
  37. fContext := TglcContext.GetPlatformClass.Create(self, pf);
  38. fContext.BuildContext;
  39. tsInit(TS_INIT_TEXTSUITE or TS_INIT_OPENGL or TS_INIT_GDI);
  40. tsContextCreate(@fTextSuiteContext);
  41. tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL);
  42. tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI);
  43. tsContextBind(fTextSuiteContext);
  44. tsFontCreateCreatorA('ttf/calibri.ttf', 24, 0, TS_ANTIALIASING_NORMAL, TS_DEFAULT, @fFontID);
  45. tsFontBind(fFontID);
  46. ftsContext := TtsContext.Create;
  47. ftsRenderer := TtsRenderer.Create(ftsContext, tsFormatRGBA8);
  48. ftsCreator := TtsFontCreator.Create;
  49. ftsFont := TtsFont.Create(ftsRenderer, ftsCreator, '', '', '', '', 12, 0, 0, [], tsAANormal);
  50. end;
  51. procedure TMainForm.FormPaint(Sender: TObject);
  52. begin
  53. Render;
  54. end;
  55. procedure TMainForm.Render;
  56. var
  57. block: TtsTextBlock;
  58. begin
  59. glViewport(0, 0, ClientWidth, ClientHeight);
  60. glClearColor(0, 0, 0, 0);
  61. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  62. glMatrixMode(GL_PROJECTION);
  63. glLoadIdentity;
  64. glOrtho(0, ClientWidth, ClientHeight, 0, -10, 10);
  65. glMatrixMode(GL_MODELVIEW);
  66. glLoadIdentity;
  67. glDisable(GL_CULL_FACE);
  68. glDisable(GL_DEPTH_TEST);
  69. glEnable(GL_BLEND);
  70. glcBlendFunc(TglcBlendMode.bmAdditiveAlphaBlend);
  71. //tsTextBeginBlock(10, 10, ClientWidth-10, ClientHeight-10, TS_ALIGN_BLOCK);
  72. //tsTextOutA(TEST_STRING);
  73. //tsTextEndBlock;
  74. block := ftsRenderer.BeginBlock(10, 10, ClientWidth-10, ClientHeight-10, [tsBlockFlagWordWrap]);
  75. try
  76. block.ChangeFont(ftsFont);
  77. block.TextOutW('test'#13#10#13#10'test'#13#13'test'#10#10'test'#13#10#10'test'#13#13#10);
  78. finally
  79. ftsRenderer.EndBlock(block);
  80. end;
  81. fContext.SwapBuffers;
  82. end;
  83. procedure TMainForm.ApplicationPropertiesIdle(Sender: TObject; var Done: Boolean);
  84. begin
  85. Render;
  86. Done := false;
  87. end;
  88. end.