TTMSFMXRichEditor too slow

Hi:

How is your experience with the TTMSFMXRichEditor? On a 4K display under Windows 8.1, I have to place the editor in a TLayOut so it will scale properly for the 4K display rather than appear too small.

Unfortunately, the performance of the component is not adequate for general users especially when the container form is maximized.  (Vertical) Scrolling is slow. Even selecting text is hard as the selection highlighting lags about 2-3 seconds behind the mouse selection.

To some degree, the scaling in the TLayOut contributes. However, what really degrades performance is when the user maximizes the form containing the editor.

Has anyone else notice this?

Would anyone share a better way to scale for 4K displays than using a TLayOut and scaling it, e.g. via an interface below?

Thanks in advance!

Navid


unit FMXScaling;

interface

uses
  FMX.Forms,
  FMX.Layouts, System.Classes;

type
  /// <summary>
  ///   In order to scale the form, implement the form must implement this
  ///   interface and place all its graphic elements within a TLayout as the
  ///   root item. The form's constructor or OnCreate event shold then call the
  ///   Scale procedure with a scale/zoom factor
  /// </summary>
  /// <seealso cref="FMXScaling|Scale">
  ///   Scale
  /// </seealso>
  InmFMXScale = interface
  ['{2CDA8523-9700-4DAB-89DF-C0C15755386F}']
  function GetRootLayOut: TLayout;
  property RootLayout: TLayout read GetRootLayOut;
  end;

  TZoomProc = procedure(const AForm: TForm; AZoomfactor: Single);
  TMagnifyProc = procedure(const AForm: TForm; AMagnificationfactor: Single);

/// <summary>
///   Procedure that will scale the calling form if it implements the
///   InmFMXScale interface
/// </summary>
/// <param name="AForm">
///   The form to be scaled
/// </param>
/// <param name="AScalefactor">
///   The factor to scale by
/// </param>
/// <seealso cref="FMXScaling|InmFMXScale">
///   InmFMXScale
/// </seealso>
procedure Scale(const AForm: TForm; AScalefactor: Single);

var
  /// <summary>
  ///   Alternative name for Scale
  /// </summary>
  /// <seealso cref="FMXScaling|Scale">
  ///   Scale
  /// </seealso>
  Zoom: TZoomProc;
  /// <summary>
  ///   Alternative name for Scale
  /// </summary>
  /// <seealso cref="FMXScaling|Scale">
  ///   Scale
  /// </seealso>
  Magnify: TMagnifyProc;

implementation

uses
  System.SysUtils;

procedure Scale(const AForm: TForm; AScalefactor: Single);
var
  ToScale: InmFMXScale;
begin
  if Supports(AForm, InmFMXScale, ToScale) then
  begin
    AForm.Height := Round(AForm.Height * AScalefactor);
    AForm.Width := Round(AForm.Width * AScalefactor);
    ToScale.RootLayout.Scale.X := ToScale.RootLayout.Scale.X * AScalefactor;
    ToScale.RootLayout.Scale.Y := ToScale.RootLayout.Scale.Y * AScalefactor;
  end;
end;

initialization
  Zoom := Scale;
  Magnify := Scale;

end.



Hi, 


Unfortunately the performance issue is due to the text drawing in FireMonkey. When maximizing this on a 4K screen it requires a significant amount of resources.

Kind Regards, 
Pieter