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.

113 rivejä
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.